Para garantir que seus índices de vetor se adaptem a mudanças que possam afetar a acurácia dos resultados da pesquisa, faça a manutenção deles.
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
Você pode permitir que o AlloyDB Omni gerencie automaticamente seus índices de vetores. À medida que o conjunto de dados cresce, o AlloyDB Omni analisa e atualiza os centroides e divide 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 Omni 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 de í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 do 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: a tabela em que você quer adicionar o índice.EMBEDDING_COLUMN_NAME: coluna que armazena os dados devectorque 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 para criar o índice ScaNN. Os valores disponíveis são:AUTO: o AlloyDB Omni gerencia e ajusta automaticamente a estrutura do índice. O valor padrão deauto_maintenance, quandomodeé definido comoAUTO, éon.MANUAL: gerencie e ajuste manualmente seu í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 do ScaNN.
NUM_PARTITIONS: número de partições a serem aplicadas a esse índice. Defina esse valor como qualquer número entre3e1048576. 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 atuais, execute o comando a seguir:
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: ativa ou desativa a manutenção automática. Para ativar, defina o valor comoon. Para desativar, defina o valor comooff.
Aumentar a capacidade de processamento da manutenção automática
Para aumentar a capacidade de processamento da 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 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 parâmetros de banco de dados.
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 parâmetros de banco de dados.
Pesquisar a porcentagem de partições
À medida que o número de partições aumenta com a divisão automática de partições grandes de outliers pelo AlloyDB Omni, recomendamos que você ajuste o número de folhas pesquisadas 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
em vez disso. Se scann.num_leaves_to_search também estiver definido como 0, o padrão do AlloyDB Omni será 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 seu banco de dados.PERCENTAGE_PARTITIONS_TO_SEARCH: porcentagem de partições a serem pesquisadas.
Invocar manualmente a manutenção do í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 dos í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 = 'AUTOMATIC', 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 sua tabela está 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 nas distribuições de vetores ou mutações 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 do ScaNN
- Métricas de índice vetorial
- Otimizar o desempenho de consultas vetoriais para o ScaNN