Nesta página, descrevemos as opções para manter os í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
vectorealloydb_scann.Se as extensões
vectorealloydb_scannnão estiverem instaladas, instale as versões mais recentes.CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS alloydb_scann;Se as extensões
vectorealloydb_scannjá 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
Com a manutenção automática de índices, o AlloyDB gerencia o índice de forma incremental para que, à medida que o conjunto de dados cresce, o AlloyDB analise e atualize continuamente os centroides e divida grandes partições de outliers. Isso ajuda a manter o índice para consultas comparáveis por segundo (QPS) e a qualidade dos resultados da pesquisa. Todas as atualizações feitas pela manutenção automática são permanentes até uma execução de manutenção subsequente.
É 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 para ativar a manutenção automática de índices ScaNN.
O recurso de manutenção automática de índice é ativado por padrão para índices ScaNN ajustados automaticamente. Para
índices criados manualmente, depois de ativar a flag scann.enable_preview_features, é possível 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 de índices sob demanda.
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.
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.
Ativar a manutenção automática durante a criação do índice
Para criar um índice ScaNN manual com a manutenção automática de í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:
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 devector.DISTANCE_FUNCTION: a função de distância a ser usada com esse índice. Escolha uma destas opções:Distância de L2:
l2Produto escalar:
dot_productDistâ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 índiceScaNN.
É possível aumentar a capacidade de processamento da manutenção automática de índices em vários índices configurando a flag de banco de dados scann.max_background_workers. Aumentar o número de workers aumenta o número de índices processados em uma unidade de tempo, mas não reduz o tempo de processamento de um único índice. Também é possível definir a flag de banco de dados scann.maintenance_background_naptime_s para controlar o atraso mínimo entre as execuções automáticas de manutenção de índice.
Configurar o pct_leaves_to_search para manutenção automática de índices
Se você 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 grandes de outliers que excedem um determinado tamanho. À 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 denum_leavesa ser pesquisada.
Invocar manualmente a manutenção de índice
Se você quiser invocar a manutenção de um índice específico on demand, execute o seguinte comando: Essa função está disponível na versão alloydb_scann 0.1.2 ou mais recente.
Para usar essa função, primeiro ative a flag scann.enable_preview_features, conforme descrito em Manter índices automaticamente.
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.