Manter índices vetoriais

Nesta página, descrevemos as opções para manter seus índices vetoriais. A manutenção de índices ajuda a garantir que os índices se adaptem às alterações nos dados que podem afetar a acurácia dos resultados da pesquisa. Use as estratégias desta página para evitar a degradação no desempenho da consulta à medida que seu conjunto de dados aumenta.

Antes de começar

  • Instale ou atualize as extensões vector e alloydb_scann.

    1. Se as extensões vector e alloydb_scann não estiverem instaladas, instale as versões mais recentes.

      CREATE EXTENSION IF NOT EXISTS vector;
      CREATE EXTENSION IF NOT EXISTS alloydb_scann;
      
    2. Se as extensões vector e alloydb_scann já estiverem instaladas, atualize-as para a versão mais recente.

      ALTER EXTENSION vector UPDATE;
      ALTER EXTENSION alloydb_scann UPDATE;
      

Visualizar métricas de índice vetorial

Se a sua tabela está sujeita a atualizações ou inserções frequentes, recomendamos reindexar periodicamente o índice ScaNN atual para melhorar a acurácia de recall do índice. Você pode monitorar as métricas de índice para visualizar alterações nas distribuições de vetores ou mutações de vetores desde que o índice foi criado e, em seguida, reindexá-lo corretamente.

Para mais informações sobre métricas, consulte Visualizar métricas de índice vetorial.

Manter índices automaticamente

É possível usar a flag de banco de dados scann.enable_preview_features (GUC) com o parâmetro auto_maintenance no nível do índice ao criar um índice ScaNN. Usar essas configurações juntas permite que o AlloyDB gerencie o índice de forma incremental para que, quando o conjunto de dados crescer, ele divida partições grandes de outliers. Ao dividir partições, o AlloyDB tenta oferecer QPS e resultados da pesquisa melhores.

Todas as atualizações feitas no índice como resultado da manutenção automática são permanentes até que o AlloyDB atualize o índice novamente.

Para permitir que o AlloyDB mantenha um índice automaticamente, ative a flag scann.enable_preview_features:

gcloud alloydb instances update INSTANCE_ID \
     --database-flags scann.enable_preview_features=on \
     --region=REGION_ID \
     --cluster=CLUSTER_ID \
     --project=PROJECT_ID

Substitua o seguinte:

  • INSTANCE_ID: o ID da instância.
  • REGION_ID: a região em que a instância está localizada, por exemplo, us-central1.
  • CLUSTER_ID: o ID do cluster em que a instância está localizada.
  • PROJECT_ID: o ID do projeto em que o cluster está localizado.

Depois de ativar a flag scann.enable_preview_features, é possível ativar a manutenção automática para índices ou a função scann_index_maintenance para invocar a manutenção manualmente.

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

Para criar um índice ScaNN com a manutenção automática ativada, execute o seguinte comando de exemplo:

CREATE INDEX INDEX_NAME ON TABLE
  USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
  WITH (num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);

Substitua o seguinte:

  • INDEX_NAME: o 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: a tabela em que o índice será adicionado.

  • EMBEDDING_COLUMN: uma coluna que armazena dados de vector.

  • DISTANCE_FUNCTION: a 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

  • NUM_LEAVES_VALUE: o número de partições a serem aplicadas a esse índice. Definido como qualquer valor entre 1 e 1.048.576. Para mais informações sobre como decidir esse valor, consulte Ajustar um índice ScaNN.

Gerenciar folhas para pesquisar partições divididas automaticamente

Se você ativou a manutenção automática de índices, o AlloyDB divide automaticamente as partições quando o limite de num_leaves é atingido. À medida que o número de partições aumenta devido a essas divisões, ajuste o número de folhas a serem pesquisadas para manter o desempenho ideal.

Para gerenciar o número de folhas a serem pesquisadas automaticamente, use pct_leaves_to_search. Com esse parâmetro, é possível especificar uma porcentagem do número de partições a serem pesquisadas. Se você espera que seu conjunto de dados cresça significativamente, comece definindo o valor de pct_leaves_to_search como 1. Por padrão, o parâmetro fica desativado.

Defina esse valor como a porcentagem do número atual de partições. Por exemplo, para pesquisar 1% do número atual de partições, defina esse valor como 1.

É 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 scann.num_leaves_to_search para calcular o número de folhas a serem pesquisadas.

Para definir a flag pct_leaves_to_search no banco de dados, execute o seguinte comando:

ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;

Substitua o seguinte:

  • DATABASE_NAME: o nome do banco de dados.
  • PERCENTAGE_LEAVES_TO_SEARCH: a porcentagem de num_leaves a ser pesquisada.

Invocar a manutenção manualmente

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

SELECT scann_index_maintenance('INDEX_NAME');

Recriar o índice manualmente

Você poderá recriar manualmente o índice se quiser reconstruí-lo com as configurações especificadas na criação.

Para recriar o índice manualmente, 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. 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.

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

A seguir