Mantenha os índices de vetores

Selecione uma versão da documentação:

Esta página descreve as opções para manter os seus í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.

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

Pode usar a flag da base de dados de scann.enable_index_maintenanceconfiguração unificada geral (GUC) juntamente com o parâmetro auto_maintenance ao nível do índice ao criar um índice ScaNN. A utilização destas definições em conjunto permite ao AlloyDB gerir incrementalmente o índice e dividir grandes partições atípicas à medida que o conjunto de dados cresce. Ao dividir partições, o AlloyDB tenta oferecer melhores consultas por segundo (CPS) e resultados da pesquisa.

As atualizações de índices de manutenção automática persistem até o AlloyDB atualizar novamente o índice.

Para permitir que o AlloyDB mantenha um índice automaticamente, adicione a extensão alloydb_scann ao parâmetro shared_preload_libraries, ative a flag da base de dados scann.enable_index_maintenance e, em seguida, carregue a extensão alloydb_scann reiniciando a base de dados:

  1. Carregue a extensão alloydb_scann para a lista shared_preload_libraries:

    sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,alloydb_scann'|" DATA_DIR/postgresql.conf
  2. Verifique se a configuração do parâmetro está definida corretamente:

    grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
  3. Ative o sinalizador scann.enable_index_maintenance definindo-o no ficheiro postgresql.conf:

    scann.enable_index_maintenance = ON
  4. Reinicie o AlloyDB Omni para que a alteração do parâmetro entre em vigor:

    Docker

     docker container restart CONTAINER_NAME

    Substitua CONTAINER_NAME pelo nome que atribuiu ao contentor do AlloyDB Omni quando o iniciou.

    Podman

     podman container restart CONTAINER_NAME

    Substitua CONTAINER_NAME pelo nome que atribuiu ao contentor do AlloyDB Omni quando o iniciou.

Depois de ativar a flag scann.enable_index_maintenance, pode ativar a manutenção automática para os índices ou ativar a função scann_index_maintenance para invocar manualmente a manutenção.

Ative 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 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.

Invocar manualmente a manutenção

Se quiser invocar a manutenção num índice específico a pedido, execute o seguinte comando:

SELECT AS scann_index_maintenance('INDEX_NAME');

Faça a gestão das folhas para pesquisar partições divididas automaticamente

Se 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 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.

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?