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:
- Para criar o índice
ScaNN
otimizado para os casos a seguir, defina o parâmetronum_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
comosqrt(rows)
. - quality define num_leaves como linhas/100.
- tempo e qualidade de build de índice equilibrados definiram
- 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. - Anote a proporção entre
scann.num_leaves_to_search
enum_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 descann.pre_reordering_num_neighbors
. O valor padrão é definido como500 * K
, em queK
é o limite que você definiu na consulta. - Se a QPS estiver muito baixa depois que as consultas atingirem uma recuperação desejada, siga estas etapas:
- Recrie o índice, aumentando o valor de
num_leaves
escann.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 tivernum_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 comnum_leaves
, que você anotou na etapa 3. - Defina
num_leaves
como um valor menor ou igual à contagem de linhas dividida por 100.
- Defina
- 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 descann.num_leaves_to_search
sem reconstruir o índice.
- Recrie o índice, aumentando o valor de
- 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:
Crie o índice
ScaNN
com as seguintes combinações denum_leaves
emax_num_levels
com base nas suas metas de performance:- balance index build time & quality: defina
max_num_levels
como2
enum_leaves
comopower(rows, ⅔)
. - otimizar para qualidade: defina
max_num_levels
como2
enum_leaves
comorows/100
.
- balance index build time & quality: defina
Execute suas consultas de teste. Para mais informações sobre como analisar consultas, consulte Analisar suas consultas.
Anote a proporção entre
scann.num_leaves_to_search
enum_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.
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
escann.num_leaves_to_search
de acordo com as seguintes orientações: - Defina
num_leaves
como um fator maior dopower(rows, ⅔)
. Por exemplo, se o índice tivernum_leaves
definido comopower(rows, ⅔)
, tente definir o dobro dapower(rows, ⅔)
. Se o valor já for o dobro, tente definir o valor para triplicar opower(rows, ⅔)
. - Aumente
scann.num_leaves_to_search
conforme necessário para manter a proporção comnum_leaves
, que você anotou na etapa 3. - Defina
num_leaves
como um valor menor ou igual arows/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 descann.num_leaves_to_search
sem reconstruir o índice.
- Recrie o índice, aumentando o valor de
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.