Os parâmetros recomendados para o índice ScaNN
variam dependendo se você escolhe 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 para PostgreSQL para um equilíbrio ideal entre recall e QPS.
Criação de índice do 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 seu conjunto de dados, siga estas etapas recomendadas:
- Para criar o índice
ScaNN
otimizado para os casos a seguir, defina o parâmetronum_leaves
com o valor abaixo, em que "rows" é o número de linhas na tabela indexada:- tempo e qualidade de build de índice equilibrados definem
num_leaves
comosqrt(rows)
. - quality define num_leaves como linhas/100.
- tempo e qualidade de build de índice equilibrados definem
- Execute as consultas de teste, aumentando o valor de
scann.num_of_leaves_to_search
, até atingir o intervalo de recall desejado, 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 você a alcançar a meta de recall.
Se você estiver trabalhando com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar o recall, ajuste o valor descann.pre_reordering_num_neighbors
. O valor padrão é definido como500 * K
, em queK
é o limite definido na consulta. - Se o QPS estiver muito baixo depois que as consultas atingirem uma taxa de recall 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 como o dobro da raiz quadrada. Se o valor já for duplo, tente definir como o triplo da 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
e encontre um valor que aumente as QPS e mantenha o recall alto. Teste valores diferentes descann.num_leaves_to_search
sem recriar o índice.
- Recrie o índice, aumentando o valor de
- Repita a etapa 4 até que o QPS e o intervalo de recall atinjam valores aceitáveis.
Índice de árvore de três níveis
Além das recomendações para o índice de árvore de dois níveis ScaNN
, 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:- equilibrar tempo de build e qualidade do índice: defina
max_num_levels
como2
enum_leaves
comopower(rows, ⅔)
. - Otimizar para qualidade: defina
max_num_levels
como2
enum_leaves
comorows/100
.
- equilibrar tempo de build e qualidade do índice: 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 aproximação do conjunto de dados que vai ajudar você a alcançar o recall desejado.
Se você estiver trabalhando com vetores de alta dimensão (500 dimensões ou mais) e quiser melhorar o recall, ajuste o valor de scann.pre_reordering_num_neighbors
. O valor padrão é definido como 500 * K
, em que K
é o limite definido na consulta.
Se a QPS estiver muito baixa depois que as consultas atingirem uma meta de recall, 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 depower(rows, ⅔)
. Por exemplo, se o índice tivernum_leaves
definido comopower(rows, ⅔)
, tente definir como o dobro depower(rows, ⅔)
. Se o valor já for o dobro, tente definir como o triplo depower(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
com 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
e encontre um valor que aumente as QPS e mantenha o recall alto. Teste valores diferentes descann.num_leaves_to_search
sem recriar o índice.
- Recrie o índice, aumentando o valor de
Repita a etapa 4 até que o QPS e o intervalo de recall atinjam valores aceitáveis.
Manutenção de índice
Se a tabela estiver sujeita a atualizações ou inserções frequentes, recomendamos reindexar periodicamente o índice ScaNN
para melhorar a acurácia de recall.
É possível monitorar as métricas de índice para ver mudanças nas distribuições ou mutações de vetores desde que o índice foi criado e, em seguida, reindexar de acordo com isso. Para mais informações sobre métricas, consulte Conferir métricas de índice vetorial.