Nesta página, descrevemos as opções para manter seus índices de vetor. A manutenção de índices ajuda a garantir que eles se adaptem às mudanças de dados que podem afetar a precisão dos resultados da pesquisa. Use as estratégias desta página para evitar a degradação na performance da consulta à medida que o conjunto de dados cresce.
Conferir métricas do índice vetorial
Se a tabela for propensa a atualizações ou inserções frequentes, recomendamos reindexar periodicamente o índice ScaNN para melhorar a precisão de recuperação do índice. É possível monitorar as métricas de índice para conferir mudanças nas distribuições ou mutações de vetor desde que o índice foi criado e, em seguida, reindexar de acordo.
Para mais informações sobre métricas, consulte Conferir métricas do índice vetorial.
Manter índices automaticamente
É possível usar a flag do banco de dados scann.enable_index_maintenance
Grand Unified Configuration (GUC) com o
parâmetro auto_maintenance
no nível do índice ao criar um índice ScaNN. O uso dessas configurações permite que o
AlloyDB gerencie o índice de forma incremental e divida grandes partições de valores discrepantes à medida que o conjunto de dados cresce. Ao
dividir partições, o AlloyDB tenta fornecer melhores consultas por segundo (QPS, na sigla em inglês) e
resultados de pesquisa.
As atualizações do índice de manutenção automática persistem até que o AlloyDB atualize o índice novamente.
Para permitir que o AlloyDB mantenha um índice automaticamente, adicione a extensão alloydb_scann
ao parâmetro shared_preload_libraries
, ative a flag scann.enable_index_maintenance
do banco de dados e reinicie o banco de dados para carregar a extensão alloydb_scann
:
Carregue a extensão
alloydb_scann
para a listashared_preload_libraries
:sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,alloydb_scann'|" DATA_DIR/postgresql.conf
Verifique se a configuração do parâmetro está definida corretamente:
grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
Ative a flag
scann.enable_index_maintenance
definindo-a no arquivopostgresql.conf
:scann.enable_index_maintenance = ON
Reinicie o AlloyDB Omni para que a mudança de parâmetro entre em vigor:
Docker
docker container restart CONTAINER_NAME
Substitua
CONTAINER_NAME
pelo nome que você atribuiu ao contêiner AlloyDB Omni quando o iniciou.Podman
podman container restart CONTAINER_NAME
Substitua
CONTAINER_NAME
pelo nome que você atribuiu ao contêiner AlloyDB Omni quando o iniciou.
Depois de ativar a flag scann.enable_index_maintenance
, você pode ativar a manutenção automática para índices ou ativar 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 comando de exemplo a seguir:
CREATE INDEX INDEX_NAME ON TABLE
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (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 dos índices são compartilhados no seu banco de dados. Verifique se cada nome de índice é exclusivo para cada tabela no seu 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:
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. Defina qualquer valor entre 1 e 1.048.576. Para mais informações sobre como decidir esse valor, consulte Ajustar um índiceScaNN
.
Gerenciar folhas para pesquisar partições divididas automaticamente
Se você tiver ativado a manutenção automática de índices, o AlloyDB
vai dividir automaticamente as partições quando o limite de num_leaves
for atingido. À medida
que o número de partições cresce devido a essas divisões, ajuste o número
de folhas para pesquisar e manter o desempenho ideal.
Para gerenciar o número de folhas a serem pesquisadas automaticamente, use
pct_leaves_to_search
. Esse parâmetro permite especificar uma porcentagem do número
de partições a serem pesquisadas. Se você espera que o conjunto de dados cresça significativamente, defina o valor pct_leaves_to_search
como 1. O parâmetro fica
desativado por padrão.
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 como 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 seu banco de dados, execute o seguinte comando:
ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;
Substitua:
DATABASE_NAME
: o nome do banco de dados.PERCENTAGE_LEAVES_TO_SEARCH
: a porcentagem denum_leaves
a ser pesquisada.
Invocar a manutenção manualmente
Se você quiser invocar a manutenção de um índice específico sob demanda, execute o seguinte comando:
SELECT scann_index_maintenance('INDEX_NAME');
Recriar o índice manualmente
Você pode recriar manualmente o índice com as configurações especificadas na criação.
Para reconstruir manualmente o índice, execute o seguinte comando:
REINDEX INDEX CONCURRENTLY INDEX_NAME;
Substitua INDEX_NAME
pelo nome do índice que você quer
reconstruir, por exemplo, my-scann-index
. Os nomes dos índices são compartilhados
no seu banco de dados. Verifique se cada nome de índice é exclusivo para cada
tabela no seu banco de dados.
Para mais informações sobre a reindexação no PostgreSQL, consulte REINDEX.