Manter os índices vetoriais de vizinhos mais próximos escalonáveis (ScaNN) no AlloyDB para PostgreSQL ajuda a preservar o recall de pesquisa e o desempenho de consultas à medida que os dados da tabela mudam ao longo do tempo. É possível monitorar as métricas de distribuição de índices para detectar desvios de dados e contar com a manutenção automática de índices ou recriações manuais para manter os índices de vetor equilibrados.
Antes de começar
Antes de gerenciar a manutenção do índice, instale ou atualize as extensões vector e
alloydb_scann:
Se as extensões
vectorealloydb_scannnão estiverem instaladas, instale-as.CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS alloydb_scann;Se as extensões
vectorealloydb_scannjá estiverem instaladas, atualize-as.ALTER EXTENSION vector UPDATE; ALTER EXTENSION alloydb_scann UPDATE;
Manter índices automaticamente
É possível permitir que o AlloyDB gerencie automaticamente seus índices vetoriais. À medida que o conjunto de dados cresce, o AlloyDB analisa e atualiza os centroides e divide as partições grandes de outliers. Isso melhora automaticamente as consultas por segundo (QPS) e a qualidade dos resultados da pesquisa. Todas as atualizações automáticas são permanentes até a próxima execução de manutenção.
O AlloyDB ativa a manutenção automática de índices por padrão para índices ScaNN ajustados automaticamente. Se você quiser criar índices ScaNN ajustados automaticamente, mas desativar a manutenção automática, consulte Desativar a manutenção automática para índices automáticos.
Para ativar a manutenção automática em índices criados manualmente, consulte Ativar a manutenção automática durante a criação do índice.
Ativar a manutenção automática durante a criação do índice
Para ativar a manutenção automática durante a criação do índice, defina o parâmetro auto_maintenance como on. Por exemplo, confira o comando a seguir que cria um índice de vetor ScaNN.
CREATE INDEX INDEX_NAME ON TABLE_NAME \
USING scann (EMBEDDING_COLUMN_NAME DISTANCE_FUNCTION_NAME) \
WITH (mode='INDEX_MODE', num_leaves=NUM_PARTITIONS, auto_maintenance=on);
Substitua as seguintes variáveis:
INDEX_NAME: 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_NAME: tabela em que você quer adicionar o índice.EMBEDDING_COLUMN_NAME: coluna que armazena os dadosvectorque você quer indexar.DISTANCE_FUNCTION_NAME: 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
INDEX_MODE: modo em que o índice ScaNN será criado. Os valores disponíveis são os seguintes:AUTO: o AlloyDB gerencia e ajusta automaticamente a estrutura do índice. O valor padrão deauto_maintenance, quandomodeé definido comoAUTO, éon.MANUAL: gerencie e ajuste manualmente o índice do ScaNN. O valor padrão deauto_maintenance, quandomodeé definido comoMANUAL, éoff.
Para mais informações sobre qual modo de índice usar, consulte Criar um índice ScaNN.
NUM_PARTITIONS: número de partições a serem aplicadas a esse índice. Defina como qualquer valor entre 1 e 104.857.600 para o PostgreSQL versão 17 e mais recentes, e entre 1 e 30 milhões para o PostgreSQL versão 16 e anteriores. Para mais informações sobre como decidir esse valor, consulte Ajustar um índiceScaNN.
Configurar a manutenção automática para índices atuais
Para configurar a manutenção automática de índices manuais, execute o seguinte comando:
ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);
Substitua as seguintes variáveis:
INDEX_NAME: nome do índice que você quer alterar. Por exemplo,my_scann_index.AUTOMATIC_MAINTENANCE: ativar ou desativar a manutenção automática. Para ativar, defina o valor comoon. Para desativar, defina o valor comooff.
Aumentar a capacidade de manutenção automática
Para aumentar a capacidade de manutenção automática, configure a flag de banco de dados scann.max_background_workers. Aumentar o número de workers em segundo plano aumenta o número de índices processados por unidade de tempo. Ele não reduz o tempo de processamento de
índices individuais. Esse valor precisa ser menor que o valor de
max_worker_processes
definido para o cluster de banco de dados.
Para mais informações sobre como configurar flags de banco de dados, consulte Configurar flags de banco de dados de uma instância.
Aumentar o atraso da manutenção automática
Para aumentar o atraso entre as execuções de manutenção automática, configure a flag de banco de dados scann.maintenance_background_naptime_s.
Para mais informações sobre como configurar flags de banco de dados, consulte Configurar flags de banco de dados de uma instância.
Pesquisar porcentagem de partições
À medida que o número de partições aumenta devido à divisão automática de partições grandes pelo AlloyDB, recomendamos que você ajuste o número de folhas que pesquisa para manter o desempenho ideal. Para gerenciar
esse número automaticamente, configure o parâmetro scann.pct_leaves_to_search.
scann.pct_leaves_to_search representa a porcentagem de partições atuais a serem pesquisadas. É 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 valor definido em scann.num_leaves_to_search. Se scann.num_leaves_to_search também estiver definido como 0, o
AlloyDB usará como padrão 1% de folhas.
Se você espera que seu conjunto de dados cresça significativamente, defina o valor inicial como 1.
Para definir o scann.pct_leaves_to_search, execute o seguinte comando:
ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;
Substitua as seguintes variáveis:
DB_NAME: nome do banco de dados.PERCENTAGE_PARTITIONS_TO_SEARCH: porcentagem de partições a serem pesquisadas.
Invocar manualmente a manutenção de índice
Se você quiser invocar a manutenção de um índice específico manualmente, execute o seguinte comando:
SELECT scann_index_maintenance('INDEX_NAME');
Substitua INDEX_NAME pelo
nome do índice em que você quer invocar a manutenção. Por exemplo, my_scann_index.
Desativar a manutenção automática para índices automáticos
Para desativar a manutenção automática de índices ScaNN ajustados automaticamente, defina o
parâmetro auto_maintenance como OFF durante a criação do índice. Por exemplo, confira
o comando a seguir, que cria um índice ScaNN ajustado automaticamente:
CREATE INDEX similarity_index ON products
USING scann (description_embedding cosine)
WITH (mode = 'AUTO', auto_maintenance = 'OFF');
Se você quiser desativar a manutenção automática em um índice ScaNN ajustado automaticamente, consulte Configurar a manutenção automática para índices atuais.
Recriar o índice manualmente
Se a tabela estiver sujeita a atualizações ou inserções frequentes, recomendamos reconstruir periodicamente o índice ScaNN para melhorar a acurácia de recall. Para mais informações sobre como visualizar mudanças em distribuições ou mutações de vetores desde que o índice foi criado, consulte Visualizar métricas de índice vetorial.
Para recriar o índice manualmente usando as configurações originais, 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.
Para mais informações sobre a reindexação no PostgreSQL, consulte REINDEX.
A seguir
- Criar um índice ScaNN
- Métricas de índice vetorial
- Otimizar o desempenho de consultas vetoriais para o ScaNN