Práticas recomendadas para otimizar os índices ScaNN no AlloyDB para PostgreSQL

Os parâmetros recomendados para o índice ScaNN diferem consoante opte por criar um índice de árvore de dois ou três níveis. Esta página fornece recomendações sobre como ajustar os parâmetros de índice do AlloyDB for PostgreSQL para um equilíbrio ideal entre a capacidade de memorização e o QPS.

Criação do índice ScaNN

Para mais informações, consulte a referência do índice ScaNN.

Índice de árvore de dois níveis

Para aplicar recomendações que ajudam a encontrar os valores ideais de num_leaves e num_leaves_to_search para o seu conjunto de dados, siga estes passos recomendados:

  1. Para criar o índice ScaNN otimizado para os seguintes casos, defina o parâmetro num_leaves para o seguinte valor, em que rows é o número de linhas na tabela indexada:
    • Tempo de criação e qualidade do índice equilibrados definidos num_leaves para sqrt(rows).
    • quality defina num_leaves como rows/100.
  2. Execute as suas consultas de teste, aumentando o valor de scann.num_of_leaves_to_search, até atingir o intervalo de recall alvo, por exemplo, 95%. Para mais informações sobre a análise das suas consultas, consulte o artigo Analise as suas consultas.
  3. Tome nota da proporção entre scann.num_leaves_to_search e num_leaves que vai ser usada nos passos seguintes. Esta proporção fornece uma aproximação em torno do conjunto de dados que vai ajudar a alcançar a sua capacidade de memorização alvo.

    Se estiver a trabalhar com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar a capacidade de memorização, experimente ajustar o valor de scann.pre_reordering_num_neighbors. O valor predefinido é definido como o valor 500 * K, em que K é o limite que definiu na sua consulta.
  4. Se o seu QPS for demasiado baixo depois de as suas consultas atingirem uma taxa de obtenção alvo, siga estes passos:
    1. Recrie o índice, aumentando o valor de num_leaves e scann.num_leaves_to_search de acordo com as seguintes orientações:
      • Defina num_leaves para um fator maior da raiz quadrada da contagem de linhas. Por exemplo, se o índice tiver num_leaves definido como a raiz quadrada da contagem de linhas, experimente defini-lo como o dobro da raiz quadrada. Se o valor já for o dobro, experimente defini-lo como o triplo da raiz quadrada.
      • Aumente scann.num_leaves_to_search conforme necessário para manter a respetiva proporção com num_leaves, que indicou no passo 3.
      • Defina num_leaves para um valor inferior ou igual à contagem de linhas dividida por 100.
    2. Execute novamente as consultas de teste. Enquanto executa as consultas de teste, experimente reduzir scann.num_leaves_to_search e encontrar um valor que aumente as QPS, mantendo a taxa de recordação elevada. Experimente valores diferentes de scann.num_leaves_to_search sem reconstruir o índice.
  5. Repita o passo 4 até o QPS e o intervalo de recolha terem atingido valores aceitáveis.

Índice de árvore de três níveis

Além das recomendações para o índice de árvore de 2 níveis ScaNN, use as seguintes orientações.

Para aplicar recomendações para encontrar o valor ideal dos parâmetros de índice num_leaves e max_num_levels, siga estes passos:

  1. Crie o índice ScaNN com as seguintes combinações de num_leaves e max_num_levels com base nos seus objetivos de desempenho:

    • Equilibrar o tempo de compilação e a qualidade do índice: defina max_num_levels como 2 e num_leaves como power(rows, ⅔).
    • Otimize em função da qualidade: defina max_num_levels como 2 e num_leaves como rows/100.
  2. Execute as suas consultas de teste. Para mais informações sobre a análise de consultas, consulte o artigo Analise as suas consultas.

  3. Tome nota da relação entre scann.num_leaves_to_search e num_leaves que vai ser usada nos passos seguintes. Esta proporção fornece uma aproximação em torno do conjunto de dados que ajuda a alcançar a taxa de recordação alvo.

Se estiver a trabalhar com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar a capacidade de memorização, experimente ajustar o valor de scann.pre_reordering_num_neighbors. O valor predefinido é definido como o valor 500 * K, em que K é o limite que definiu na sua consulta.

  1. Se o seu QPS for demasiado baixo depois de as suas consultas atingirem uma taxa de recolha alvo, siga estes passos:

    • Recrie o índice, aumentando o valor de num_leaves e scann.num_leaves_to_search de acordo com as seguintes orientações:
    • Defina num_leaves para um fator maior de power(rows, ⅔). Por exemplo, se o índice tiver num_leaves definido como power(rows, ⅔), experimente defini-lo como o dobro de power(rows, ⅔). Se o valor já for o dobro, experimente defini-lo para o triplo de power(rows, ⅔).
    • Aumente scann.num_leaves_to_search conforme necessário para manter a sua proporção com num_leaves, que anotou no passo 3.
    • Defina num_leaves para um valor inferior ou igual a rows/100.
    • Execute novamente as consultas de teste. Enquanto executa as consultas de teste, experimente reduzir scann.num_leaves_to_search e encontrar um valor que aumente as QPS, mantendo a taxa de recordação elevada. Experimente valores diferentes de scann.num_leaves_to_search sem reconstruir o índice.
  2. Repita o passo 4 até o QPS e o intervalo de recolha terem atingido valores aceitáveis.

Manutenção do índice

Se a sua tabela for propensa a atualizações ou inserções frequentes, recomendamos que reindexe periodicamente o índice ScaNN existente para melhorar a precisão da obtenção. Pode monitorizar as métricas de índice para ver as alterações nas distribuições de vetores ou nas mutações de vetores desde a criação do índice e, em seguida, reindexar em conformidade. Para mais informações sobre as métricas, consulte o artigo Veja as métricas do índice de vetores.

O que se segue?