Manter índices vetoriais

Para garantir que os índices de vetor se adaptem a mudanças que possam afetar a acurácia dos resultados da pesquisa, mantenha os índices de vetor.

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 gerencie automaticamente seus índices de vetor. À medida que o conjunto de dados cresce, o AlloyDB analisa e atualiza os centroides e divide grandes partições de outliers. Isso melhora automaticamente as consultas por segundo (QPS, na sigla em inglês) 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 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 de í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, consulte o comando a seguir que cria um índice de vetor 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: tabela em que você quer adicionar o índice.

  • EMBEDDING_COLUMN_NAME: coluna que armazena os dados 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 os seguintes:

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

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

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

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

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

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

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: ative ou desative 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 scann.max_background_workers flag de banco de dados. Aumentar o número de workers em segundo plano aumenta o número de índices processados por unidade de tempo. Isso não reduz o tempo de processamento de índices individuais. Esse valor precisa ser menor que o max_worker_processes valor definido para o cluster de banco de dados.

Para mais informações sobre como configurar flags de banco de dados, consulte Configurar flags de banco de dados de uma instância.

Aumentar o atraso da manutenção automática

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

Para mais informações sobre como configurar flags de banco de dados, consulte Configurar flags de banco de dados de uma instância.

Porcentagem de partições de pesquisa

À medida que o número de partições aumenta devido à divisão automática de grandes partições de outliers pelo AlloyDB, recomendamos ajustar 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 AlloyDB vai usar 1% de folhas por padrão.

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

Para definir 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 banco de dados.
  • PERCENTAGE_PARTITIONS_TO_SEARCH: porcentagem de partições a serem pesquisadas.

Invocar a manutenção do índice manualmente

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 de índices automáticos

Para desativar a manutenção automática de índices ScaNN ajustados automaticamente, defina o parâmetro auto_maintenance como OFF durante a criação do índice. Por exemplo, consulte 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 de índices atuais.

Recriar o índice manualmente

Se a sua tabela está sujeita a atualizações ou inserções frequentes, recomendamos recriar 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