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:
- Para criar o índice
ScaNN
otimizado para os seguintes casos, defina o parâmetronum_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
parasqrt(rows)
. - quality defina num_leaves como rows/100.
- Tempo de criação e qualidade do índice equilibrados definidos
- 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. - Tome nota da proporção entre
scann.num_leaves_to_search
enum_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 descann.pre_reordering_num_neighbors
. O valor predefinido é definido como o valor500 * K
, em queK
é o limite que definiu na sua consulta. - Se o seu QPS for demasiado baixo depois de as suas consultas atingirem uma taxa de obtenção alvo, siga estes passos:
- Recrie o índice, aumentando o valor de
num_leaves
escann.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 tivernum_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 comnum_leaves
, que indicou no passo 3. - Defina
num_leaves
para um valor inferior ou igual à contagem de linhas dividida por 100.
- Defina
- 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 descann.num_leaves_to_search
sem reconstruir o índice.
- Recrie o índice, aumentando o valor de
- 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:
Crie o índice
ScaNN
com as seguintes combinações denum_leaves
emax_num_levels
com base nos seus objetivos de desempenho:- Equilibrar o tempo de compilação e a qualidade do índice: defina
max_num_levels
como2
enum_leaves
comopower(rows, ⅔)
. - Otimize em função da qualidade: defina
max_num_levels
como2
enum_leaves
comorows/100
.
- Equilibrar o tempo de compilação e a qualidade do índice: defina
Execute as suas consultas de teste. Para mais informações sobre a análise de consultas, consulte o artigo Analise as suas consultas.
Tome nota da relação entre
scann.num_leaves_to_search
enum_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.
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
escann.num_leaves_to_search
de acordo com as seguintes orientações: - Defina
num_leaves
para um fator maior depower(rows, ⅔)
. Por exemplo, se o índice tivernum_leaves
definido comopower(rows, ⅔)
, experimente defini-lo como o dobro depower(rows, ⅔)
. Se o valor já for o dobro, experimente defini-lo para o triplo depower(rows, ⅔)
. - Aumente
scann.num_leaves_to_search
conforme necessário para manter a sua proporção comnum_leaves
, que anotou no passo 3. - Defina
num_leaves
para um valor inferior ou igual arows/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 descann.num_leaves_to_search
sem reconstruir o índice.
- Recrie o índice, aumentando o valor de
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.