Para garantir que os índices de vetor se adaptem a mudanças que possam afetar a acurácia dos resultados da pesquisa, mantenha os índices de vetor.
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 gerencie automaticamente seus índices de vetor. À medida que o conjunto de dados cresce, o AlloyDB analisa e atualiza os centroides e divide grandes partições de outliers. Isso melhora automaticamente as consultas por segundo (QPS, na sigla em inglês) 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 de í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, consulte 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 para criar o índice ScaNN. Os valores disponíveis são os seguintes:AUTO: o AlloyDB gerencia e ajusta automaticamente a estrutura do índice. O valorauto_maintenancepadrão, quandomodeé definido comoAUTO, éon.MANUAL: gerencie e ajuste manualmente o índice ScaNN. O valorauto_maintenancepadrão, 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 esse valor como qualquer valor entre3e1048576. Para mais informações sobre como decidir esse valor, consulte Ajustar umScaNNíndice.
Configurar a manutenção automática de índices atuais
Para configurar a manutenção automática de índices manuais atuais, 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: ative ou desative 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
scann.max_background_workers
flag de banco de dados. Aumentar o número de workers em segundo plano aumenta o número de índices processados por unidade de tempo. Isso não reduz o tempo de processamento de índices individuais. Esse valor precisa ser menor que o
max_worker_processes
valor 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
scann.maintenance_background_naptime_s
flag 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.
Porcentagem de partições de pesquisa
À medida que o número de partições aumenta devido à divisão automática de grandes partições de outliers pelo AlloyDB, recomendamos ajustar 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 AlloyDB vai usar 1% de folhas por padrão.
Se você espera que seu conjunto de dados cresça significativamente, defina o valor inicial como 1.
Para definir 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 a manutenção do índice manualmente
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 de í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, consulte 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 de índices atuais.
Recriar o índice manualmente
Se a sua tabela está sujeita a atualizações ou inserções frequentes, recomendamos recriar 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 ScaNN
- Métricas de índice vetorial
- Otimizar o desempenho de consultas vetoriais para o ScaNN