Mantenha os índices de vetores

Esta página descreve as opções para manter os índices de vetores. A manutenção dos índices ajuda a garantir que estes se adaptam às alterações de dados que possam afetar a precisão dos resultados da pesquisa. Use as estratégias nesta página para evitar a degradação do desempenho das consultas à medida que o conjunto de dados cresce.

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 das extensões.

      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;
      

Veja métricas do índice vetorial

Se a sua tabela for propensa a atualizações ou inserções frequentes, recomendamos que reindexe periodicamente o índice ScaNN existente para melhorar a precisão da capacidade de memorização do seu índice. Pode monitorizar as métricas de índice para ver as alterações nas distribuições de vetores ou nas mutações de vetores desde a criação do índice e, em seguida, reindexar em conformidade.

Para mais informações sobre as métricas, consulte o artigo Veja as métricas do índice vetorial.

Mantenha os índices automaticamente

A funcionalidade de manutenção automática de índices permite que o AlloyDB faça a gestão incremental do índice para que, à medida que o conjunto de dados cresce, o AlloyDB analise e atualize continuamente os centroides e divida grandes partições de valores atípicos. Isto ajuda a manter o índice para consultas comparáveis por segundo (CPS) e a qualidade dos resultados da pesquisa. Todas as atualizações feitas pela manutenção automática são permanentes até à execução de uma manutenção subsequente.

Pode usar a flag da base de dados scann.enable_preview_features (GUC) juntamente com o parâmetro auto_maintenance ao nível do índice ao criar um índice ScaNN para ativar a manutenção automática de índices ScaNN.

A funcionalidade de manutenção automática do índice está ativada por predefinição para índices ScaNN ajustados automaticamente. Para os índices criados manualmente, depois de ativar a flag scann.enable_preview_features, pode definir o parâmetro auto_maintenance durante a criação do índice ou usar a função scann_index_maintenance para acionar a manutenção automática do índice a pedido.

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 onde a instância está localizada, por exemplo, us-central1.
  • CLUSTER_ID: o ID do cluster onde a instância está colocada.
  • PROJECT_ID: o ID do projeto onde o cluster está localizado.

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

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

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

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

Substitua o seguinte:

  • INDEX_NAME: o nome do índice que quer criar, por exemplo, my-scann-index. Os nomes dos índices são partilhados na sua base de dados. Certifique-se de que cada nome de índice é exclusivo para cada tabela na sua base de dados.

  • TABLE: a tabela à qual adicionar o índice.

  • EMBEDDING_COLUMN: uma coluna que armazena vector dados.

  • DISTANCE_FUNCTION: a função de distância a usar com este índice. Selecione uma das seguintes opções:

    • Distância L2: l2

    • Produto escalar: dot_product

    • Distância do cosseno: cosine

  • NUM_LEAVES_VALUE: o número de partições a aplicar a este índice. Defina qualquer valor entre 1 e 1048576. Para mais informações sobre como decidir este valor, consulte o artigo Ajuste um índice ScaNN.

Pode aumentar o débito da manutenção automática de índices em vários índices configurando a flag de base de dados scann.max_background_workers. Aumentar o número de trabalhadores aumenta o número de índices processados numa unidade de tempo. Não reduz o tempo de processamento de um único índice. Opcionalmente, também pode definir a flag da base de dados scann.maintenance_background_naptime_s para controlar o atraso mínimo entre as execuções de manutenção automática do índice.

Configure o pct_leaves_to_search para a manutenção automática do índice

Se ativou a manutenção automática de índices, o AlloyDB divide automaticamente as partições com base em heurísticas, por exemplo, dividindo partições atípicas grandes que excedam um determinado tamanho. À medida que o número de partições aumenta devido a estas divisões, deve ajustar o número de folhas a pesquisar para manter um desempenho ideal.

Para gerir o número de folhas a pesquisar automaticamente, use pct_leaves_to_search. Este parâmetro permite-lhe especificar uma percentagem do número de partições a pesquisar. Se espera que o conjunto de dados cresça significativamente, comece por definir o valor pct_leaves_to_search como 1. O parâmetro está desativado por predefinição.

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

Pode definir este parâmetro para qualquer valor entre 0 e 100. O valor predefinido é 0, que desativa este parâmetro e usa o elemento scann.num_leaves_to_search para calcular o número de folhas a pesquisar.

Para definir a flag pct_leaves_to_search na sua base 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 da base de dados.
  • PERCENTAGE_LEAVES_TO_SEARCH: a percentagem de num_leaves a pesquisar.

Invocar manualmente a manutenção do índice

Se quiser invocar a manutenção num índice específico a pedido, execute o seguinte comando. Esta função está disponível na versão 0.1.2 ou superior do alloydb_scann.

Para usar esta função, primeiro tem de ativar a flag scann.enable_preview_features, conforme descrito em Mantenha os índices automaticamente.

SELECT scann_index_maintenance('INDEX_NAME');

Reconstrua manualmente o índice

Pode reconstruir manualmente o índice se quiser reconstruí-lo com as configurações especificadas quando foi criado.

Para reconstruir manualmente o índice, execute o seguinte comando:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Substitua INDEX_NAME pelo nome do índice que quer reconstruir, por exemplo, my-scann-index. Os nomes dos índices são partilhados na sua base de dados. Certifique-se de que cada nome de índice é exclusivo para cada tabela na sua base de dados.

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

O que se segue?