Manter índices vetoriais

Selecione uma versão da documentação:

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 vector e alloydb_scann não estiverem instaladas, instale-as.

    CREATE EXTENSION IF NOT EXISTS vector;
    CREATE EXTENSION IF NOT EXISTS alloydb_scann;
    
  • Se as extensões vector e alloydb_scann já 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 vetor. À medida que o conjunto de dados cresce, o AlloyDB Omni 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 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 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 no 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 dados vector que 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: l2

    • Produto escalar: dot_product

    • Distância do cosseno:cosine

  • INDEX_MODE: modo para criar o índice ScaNN. Os valores disponíveis são os seguintes:

    • AUTO: o AlloyDB Omni gerencia e ajusta automaticamente a estrutura do índice. Se mode estiver definido como AUTO, o valor auto_maintenance padrão será definido como on.

    • MANUAL: gerencie e ajuste manualmente o índice ScaNN. O valor auto_maintenance padrão, quando mode está definido como MANUAL, é 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 entre 3 e 1048576. Para mais informações sobre como decidir esse valor, consulte Ajustar um ScaNN í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 como on. Para desativar, defina o valor como off.

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 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 scann.maintenance_background_naptime_s flag de banco de dados.

Para mais informações sobre como configurar flags de banco de dados, consulte Configurar parâmetros de banco de dados.

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 Omni, 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. Você pode definir esse parâmetro como 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 Omni será definido como 1% de folhas.

Se você espera que o 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 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 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 tabela estiver 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