Práticas recomendadas para ajustar índices ScaNN no AlloyDB para PostgreSQL

Esta página fornece recomendações sobre como ajustar os parâmetros de índice para que você possa otimizar o equilíbrio entre recuperação e consultas por segundo (QPS, na sigla em inglês) no AlloyDB para PostgreSQL. Os parâmetros recomendados para o índice ScaNN variam de acordo com a criação de um índice de árvore de dois ou três níveis.

Criação de índice ScaNN

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

Índice de árvore de dois níveis

Para aplicar recomendações e encontrar os valores ideais de num_leaves e num_leaves_to_search para seu conjunto de dados, siga estas etapas recomendadas:

  1. Para criar o índice ScaNN otimizado para os casos a seguir, defina o parâmetro num_leaves como o valor a seguir, em que linhas é o número de linhas na tabela indexada:
    • tempo e qualidade de build de índice equilibrados definiram num_leaves como sqrt(rows).
    • quality define num_leaves como linhas/100.
  2. Execute as consultas de teste, aumentando o valor de scann.num_of_leaves_to_search, até atingir a faixa de recuperação desejada, por exemplo, 95%. Para mais informações sobre como analisar suas consultas, consulte Analisar suas consultas.
  3. Anote a proporção entre scann.num_leaves_to_search e num_leaves que será usada nas próximas etapas. Essa proporção fornece uma aproximação do conjunto de dados que vai ajudar a alcançar a recuperação desejada.

    Se você estiver trabalhando com vetores de alta dimensão (500 ou mais) e quiser melhorar a recuperação, tente ajustar o valor de scann.pre_reordering_num_neighbors. O valor padrão é definido como 500 * K, em que K é o limite que você definiu na consulta.
  4. Se a QPS estiver muito baixa depois que as consultas atingirem uma recuperação desejada, siga estas etapas:
    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 como 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, tente definir o dobro da raiz quadrada. Se o valor já for o dobro, tente definir o valor para triplicar a raiz quadrada.
      • Aumente scann.num_leaves_to_search conforme necessário para manter a proporção com num_leaves, que você anotou na etapa 3.
      • Defina num_leaves como um valor menor ou igual à contagem de linhas dividida por 100.
    2. Execute as consultas de teste novamente. Enquanto executa as consultas de teste, tente reduzir scann.num_leaves_to_search, encontrando um valor que aumente a QPS mantendo o recall alto. Tente valores diferentes de scann.num_leaves_to_search sem reconstruir o índice.
  5. Repita a etapa 4 até que a QPS e o intervalo de recuperação atinjam valores aceitáveis.

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

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

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

  1. Crie o índice ScaNN com as seguintes combinações de num_leaves e max_num_levels com base nas suas metas de performance:

    • balance index build time & quality: defina max_num_levels como 2 e num_leaves como power(rows, ⅔).
    • otimizar para qualidade: defina max_num_levels como 2 e num_leaves como rows/100.
  2. Execute suas consultas de teste. Para mais informações sobre como analisar consultas, consulte Analisar suas consultas.

  3. Anote a proporção entre scann.num_leaves_to_search e num_leaves que será usada nas próximas etapas. Essa proporção fornece uma estimativa do conjunto de dados que vai ajudar você a alcançar a lembrança desejada.

Se você estiver trabalhando com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar a recuperação, tente ajustar o valor de scann.pre_reordering_num_neighbors. O valor padrão é definido como 500 * K, em que K é o limite que você definiu na consulta.

  1. Se a QPS estiver muito baixa depois que as consultas atingirem uma recuperação de destino, siga estas etapas:

    • 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 como um fator maior do power(rows, ⅔). Por exemplo, se o índice tiver num_leaves definido como power(rows, ⅔), tente definir o dobro da power(rows, ⅔). Se o valor já for o dobro, tente definir o valor para triplicar o power(rows, ⅔).
    • Aumente scann.num_leaves_to_search conforme necessário para manter a proporção com num_leaves, que você anotou na etapa 3.
    • Defina num_leaves como um valor menor ou igual a rows/100.
    • Execute as consultas de teste novamente. Enquanto executa as consultas de teste, tente reduzir scann.num_leaves_to_search, encontrando um valor que aumente a QPS mantendo o recall alto. Tente valores diferentes de scann.num_leaves_to_search sem reconstruir o índice.
  2. Repita a etapa 4 até que a QPS e o intervalo de recuperação atinjam valores aceitáveis.

Manutenção de índice

Se a tabela for propensa a atualizações ou inserções frequentes, recomendamos reindexar periodicamente o índice ScaNN para melhorar a precisão da recuperação. É possível monitorar as métricas do índice para conferir mudanças nas distribuições ou mutações de vetor desde que o índice foi criado e, em seguida, reindexar de acordo. Para mais informações sobre métricas, consulte Conferir métricas do índice vetorial.

A seguir