Manter índices vetoriais

Selecione uma versão da documentação:

Para garantir que seus índices de vetor se adaptem a mudanças que possam afetar a acurácia dos resultados da pesquisa, faça a manutenção deles.

Antes de começar

Antes de gerenciar a manutenção do índice, instale ou atualize as extensões vector e alloydb_scann:

  • Se as extensões vector e alloydb_scann não estiverem instaladas, instale-as.

    CREATE EXTENSION IF NOT EXISTS vector;
    CREATE EXTENSION IF NOT EXISTS alloydb_scann;
    
  • Se as extensões vector e alloydb_scann já estiverem instaladas, atualize-as.

    ALTER EXTENSION vector UPDATE;
    ALTER EXTENSION alloydb_scann UPDATE;
    

Manter índices automaticamente

Você pode permitir que o AlloyDB Omni gerencie automaticamente seus índices de vetores. À medida que o conjunto de dados cresce, o AlloyDB Omni analisa e atualiza os centroides e divide partições grandes de outliers. Isso melhora automaticamente as consultas por segundo (QPS) e a qualidade dos resultados da pesquisa. Todas as atualizações automáticas são permanentes até a próxima execução de manutenção.

O AlloyDB Omni ativa a manutenção automática de índices por padrão para índices ScaNN ajustados automaticamente. Se você quiser criar índices ScaNN ajustados automaticamente, mas desativar a manutenção automática, consulte Desativar a manutenção automática para índices automáticos.

Para ativar a manutenção automática de índices criados manualmente, consulte Ativar a manutenção automática durante a criação do índice.

Ativar a manutenção automática durante a criação do índice

Para ativar a manutenção automática durante a criação do índice, defina o parâmetro auto_maintenance como on. Por exemplo, confira o comando a seguir, que cria um índice de vetor do ScaNN.

CREATE INDEX INDEX_NAME ON TABLE_NAME \
USING scann (EMBEDDING_COLUMN_NAME DISTANCE_FUNCTION_NAME) \
WITH (mode='INDEX_MODE', num_leaves=NUM_PARTITIONS, auto_maintenance=on);

Substitua as seguintes variáveis:

  • INDEX_NAME: nome do índice que você quer criar. Por exemplo, my_scann_index. Os nomes de índice são compartilhados em todo o banco de dados. Verifique se cada nome de índice é exclusivo para cada tabela no banco de dados.

  • TABLE_NAME: a tabela em que você quer adicionar o índice.

  • EMBEDDING_COLUMN_NAME: coluna que armazena os dados de vector que você quer indexar.

  • DISTANCE_FUNCTION_NAME: função de distância a ser usada com esse índice. Escolha uma destas opções:

    • Distância de L2: l2

    • Produto escalar: dot_product

    • Distância do cosseno: cosine

  • INDEX_MODE: modo para criar o índice ScaNN. Os valores disponíveis são:

    • AUTO: o AlloyDB Omni gerencia e ajusta automaticamente a estrutura do índice. O valor padrão de auto_maintenance, quando mode é definido como AUTO, é on.

    • MANUAL: gerencie e ajuste manualmente seu índice do ScaNN. O valor padrão de auto_maintenance, quando mode é definido como MANUAL, é off.

    Para mais informações sobre qual modo de índice usar, consulte Criar um índice do ScaNN.

  • NUM_PARTITIONS: número de partições a serem aplicadas a esse índice. Defina esse valor como qualquer número entre 3 e 1048576. Para mais informações sobre como decidir esse valor, consulte Ajustar um índice ScaNN.

Configurar a manutenção automática para índices atuais

Para configurar a manutenção automática de índices manuais atuais, execute o comando a seguir:

ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);

Substitua as seguintes variáveis:

  • INDEX_NAME: nome do índice que você quer alterar. Por exemplo, my_scann_index.

  • AUTOMATIC_MAINTENANCE: ativa ou desativa a manutenção automática. Para ativar, defina o valor como on. Para desativar, defina o valor como off.

Aumentar a capacidade de processamento da manutenção automática

Para aumentar a capacidade de processamento da manutenção automática, configure a flag de banco de dados scann.max_background_workers. Aumentar o número de workers em segundo plano aumenta o número de índices processados por unidade de tempo. Ele não reduz o tempo de processamento de índices individuais. Esse valor precisa ser menor que o valor max_worker_processes definido para o cluster de banco de dados.

Para mais informações sobre como configurar flags de banco de dados, consulte Configurar parâmetros de banco de dados.

Aumentar o atraso da manutenção automática

Para aumentar o atraso entre as execuções de manutenção automática, configure a flag de banco de dados scann.maintenance_background_naptime_s.

Para mais informações sobre como configurar flags de banco de dados, consulte Configurar parâmetros de banco de dados.

Pesquisar a porcentagem de partições

À medida que o número de partições aumenta com a divisão automática de partições grandes de outliers pelo AlloyDB Omni, recomendamos que você ajuste o número de folhas pesquisadas para manter o desempenho ideal. Para gerenciar esse número automaticamente, configure o parâmetro scann.pct_leaves_to_search.

scann.pct_leaves_to_search representa a porcentagem de partições atuais a serem pesquisadas. É possível definir esse parâmetro com qualquer valor entre 0 e 100. O valor padrão é 0, que desativa esse parâmetro e usa o valor definido em scann.num_leaves_to_search em vez disso. Se scann.num_leaves_to_search também estiver definido como 0, o padrão do AlloyDB Omni será 1% de folhas.

Se você espera que seu conjunto de dados cresça significativamente, defina o valor inicial como 1.

Para definir o scann.pct_leaves_to_search, execute o seguinte comando:

ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;

Substitua as seguintes variáveis:

  • DB_NAME: nome do seu banco de dados.
  • PERCENTAGE_PARTITIONS_TO_SEARCH: porcentagem de partições a serem pesquisadas.

Invocar manualmente a manutenção do índice

Se você quiser invocar a manutenção de um índice específico manualmente, execute o seguinte comando:

SELECT scann_index_maintenance('INDEX_NAME');

Substitua INDEX_NAME pelo nome do índice em que você quer invocar a manutenção. Por exemplo, my_scann_index.

Desativar a manutenção automática para índices automáticos

Para desativar a manutenção automática dos índices ScaNN ajustados automaticamente, defina o parâmetro auto_maintenance como OFF durante a criação do índice. Por exemplo, confira o comando a seguir, que cria um índice ScaNN ajustado automaticamente:

CREATE INDEX similarity_index ON products
       USING scann (description_embedding cosine)
WITH (MODE = 'AUTOMATIC', auto_maintenance = 'OFF');

Se você quiser desativar a manutenção automática em um índice ScaNN ajustado automaticamente, consulte Configurar a manutenção automática para índices atuais.

Recriar o índice manualmente

Se a sua tabela está sujeita a atualizações ou inserções frequentes, recomendamos reconstruir periodicamente o índice ScaNN para melhorar a acurácia de recall. Para mais informações sobre como visualizar mudanças nas distribuições de vetores ou mutações desde que o índice foi criado, consulte Visualizar métricas de índice vetorial.

Para recriar o índice manualmente usando as configurações originais, execute o seguinte comando:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Substitua INDEX_NAME pelo nome do índice que você quer recriar. Por exemplo, my_scann_index.

Para mais informações sobre a reindexação no PostgreSQL, consulte REINDEX.

A seguir