Métricas do índice de vetores

Selecione uma versão da documentação:

Esta página apresenta as métricas relacionadas com os índices vetoriais que gera no AlloyDB Omni. Pode ver estas métricas através da vista pg_stat_ann_indexes disponível quando instala a alloydb_scann extensão.

Para mais informações sobre como ver as métricas, consulte o artigo Veja as métricas do índice vetorial.

Métricas de usabilidade

As métricas de usabilidade incluem métricas que ajudam a compreender o estado de utilização do índice com métricas, como a configuração do índice e o número de verificações do índice.

Nome da métrica Tipo de dados Descrição
relid OID Identificador exclusivo da tabela que contém o índice vetorial
indexrelid OID Identificador exclusivo do índice de vetores
schemaname NAME Nome do esquema proprietário do índice
relname NAME Nome da tabela que contém o índice
indexrelname NAME Nome do índice
indextype NAME Tipo de índice. Este valor está sempre definido como scann
indexconfig TEXT[] Configuração, como a contagem de folhas e o quantizador, definida para o índice quando foi criado
indexsize TEXT Tamanho do índice
indexscan BIGINT Número de análises de índice iniciadas no índice
partitioncount BIGINT Número de partições (nós folha) na árvore.

Métricas de aperfeiçoamento

As métricas de ajuste fornecem estatísticas sobre a otimização do índice atual, o que lhe permite aplicar recomendações para um desempenho de consulta mais rápido.

Nome da métrica Tipo de dados Descrição
insertcount BIGINT Número de operações de inserção no índice. Esta métrica também inclui o número de linhas que existiam antes da criação do índice.
updatecount BIGINT Número de operações de atualização no índice. Esta métrica não tem em conta as atualizações HOT.
deletecount BIGINT Número de operações de eliminação no índice.
distribution JSONB Distribuições de vetores em todas as partições do índice.

Os seguintes campos mostram a distribuição:
  • maximum (INT8): número máximo de vetores em todas as partições.
  • minimum (INT8): número mínimo de vetores em todas as partições.
  • average (FLOAT) : número médio de vetores em todas as partições.
  • outliers (INT8[]): valores atípicos principais em todas as partições. Este valor mostra os 20 valores atípicos principais.

Nota: devido às caraterísticas inerentes do algoritmo de agrupamento K-means, haverá sempre algum grau de variação na distribuição de vetores entre partições, mesmo quando o índice é criado inicialmente.
distributionpercentile JSONB A distribuição do índice de vetores ajuda a compreender a distribuição de vetores entre as partições do seu índice ScaNN. As partições são criadas com base no num_leavesvalor definido durante a criação do índice.

A distribuição do índice de vetores contém grupos para os percentis 10, 25, 50, 75, 90, 95, 99 e 100. Cada grupo contém os seguintes valores:
  • Número de vetores presentes na partição no percentil especificado.
  • Número de partições que têm vetores dentro do intervalo definido pelos percentis atuais e anteriores.

Nota: devido às caraterísticas inerentes do algoritmo de clustering K-means, existe sempre algum grau de variação na distribuição de vetores entre partições, mesmo quando o índice é criado inicialmente.

Ajuste da recomendação com base nas métricas

Mutação
As métricas insertcount, updatecount> e deletecount mostram em conjunto as alterações ou as mutações no vetor do índice.
O índice é criado com um número específico de vetores e partições. Quando são realizadas operações como inserir, atualizar ou eliminar no índice vetorial, estas afetam apenas o conjunto inicial de partições onde os vetores residem. Consequentemente, o número de vetores em cada partição flutua ao longo do tempo, o que pode afetar a capacidade de memorização, o QPS ou ambos.
Se encontrar problemas de lentidão ou precisão, como um baixo QPS ou uma má capacidade de memorização, nas suas consultas de pesquisa de RNA ao longo do tempo, considere rever estas métricas. Um número elevado de mutações relativamente ao número total de vetores pode indicar a necessidade de reindexação.
Distribuição
A métrica distribution mostra as distribuições de vetores em todas as partições.
Quando cria um índice, este é criado com um número específico de vetores e partições fixas. O processo de partição e a distribuição subsequente ocorrem com base nesta consideração. Se forem adicionados vetores adicionais, estes são divididos entre as partições existentes, o que resulta numa distribuição diferente em comparação com a distribuição quando o índice foi criado. Uma vez que a distribuição final não considera todos os vetores em simultâneo, a capacidade de memorização, as QPS ou ambas podem ser afetadas.
Se observar uma diminuição gradual no desempenho das suas consultas de pesquisa de ANN, como tempos de resposta mais lentos ou uma precisão reduzida nos resultados (medida por QPS ou recall), considere verificar esta métrica e reindexar.
Percentil de distribuição
A métrica distributionpercentile é uma distribuição do índice de vetores na vista pg_stat_ann_indexes que ajuda a compreender a distribuição de vetores entre partições do seu índice ScaNN. As partições são criadas com base no valor num_leaves definido durante a criação do índice.
Quando cria um índice alloydb_scann no conjunto inicial de linhas definindo num_leaves, o índice pode alterar a distribuição de vetores nas partições devido a operações de dados (mutações de distorção) ou o número de vetores pode aumentar significativamente. Estas alterações podem levar à degradação do QPS, da capacidade de memorização ou de ambos. A distribuição do índice vetorial pode dar-lhe sinais se a mutação causar uma alteração na distribuição do índice. Estas informações podem ajudar a determinar se é necessária uma reindexação ou se uma alteração nas configurações de tempo de pesquisa pode ajudar a melhorar o desempenho das consultas.
Num índice de vetores, a distribuição de vetores pelas partições raramente é perfeitamente uniforme. Este desequilíbrio é denominado distribuição não uniforme. Geralmente, espera-se um certo grau de não uniformidade e isso não significa que tenha de reindexar. Uma distribuição não uniforme tem as seguintes características:
  • A variância do número de vetores é baixa. A variância pode ser calculada como
    $(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
  • O número de partições com 0 vetores é baixo e pode ser inferior a 30% das partições.
  • A variância do número de partições é baixa.
    $ variance _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $ where "p" is a vector index distribution bucket.
  • O número de vetores em qualquer percentil é
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    Quando estas condições não são satisfeitas, pode ser necessário REINDEX com base no número de consultas por segundo e na capacidade de memorização afetados.
Os seguintes cenários, embora menos comuns do que a distribuição não uniforme, podem ocorrer:
  • Índice uniforme aproximado: quando a maioria das partições tem o mesmo número de vetores não nulos e a variância do número de vetores é baixa, trata-se de um índice uniforme aproximado. REINDEX é obrigatório se o número de vetores em cada partição for $> 8 * vetor médio$ em index_creation_time.
  • Índice esparso: um índice esparso também ocorre quando > 50% das partições estão vazias. Por exemplo, o índice esparso é criado quando ocorrem várias eliminações numa tabela. Este cenário faz com que os vetores se concentrem num pequeno número de partições, o que aumenta o número de vetores em cada partição. Quando isto acontece, elimine o índice e recrie-o.