Métricas do índice vetorial

Selecione uma versão da documentação:

Nesta página, listamos as métricas relacionadas aos índices de vetores gerados no AlloyDB Omni. É possível conferir essas métricas usando a visualização pg_stat_ann_indexes disponível ao instalar a extensão alloydb_scann.

Para mais informações sobre como visualizar as métricas, consulte Visualizar métricas de índice vetorial.

Métricas de usabilidade

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

Nome da métrica Tipo de dado Descrição
relid OID Identificador exclusivo da tabela que contém o índice vetorial.
indexrelid OID Identificador exclusivo do índice vetorial
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 do índice. Esse valor é sempre definido como scann
indexconfig TEXT[] Configuração, como contagem de folhas e quantizador, definida para o índice quando ele foi criado
indexsize TEXT Tamanho do índice
indexscan BIGINT Número de verificações de índice iniciadas no índice
partitioncount BIGINT Número de partições (nós folha) na árvore.

Métricas de ajuste

As métricas de ajuste oferecem insights sobre a otimização atual do índice, permitindo que você aplique recomendações para melhorar a performance das consultas.

Nome da métrica Tipo de dado Descrição
insertcount BIGINT Número de operações de inserção no índice. Essa 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. Essa métrica não considera atualizações HOT.
deletecount BIGINT Número de operações de exclusã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[]): outliers principais em todas as partições. Esse valor mostra os 20 outliers principais.

Observação:devido às características inerentes do algoritmo de clusterização K-means, sempre haverá algum grau de variância na distribuição de vetores entre as partições, mesmo quando o índice é criado inicialmente.
distributionpercentile JSONB A distribuição do índice vetorial ajuda a entender a distribuição de vetores entre as partições do índice do ScaNN. As partições são criadas com base no valor num_leaves definido durante a criação do índice.

A distribuição do índice de vetor contém buckets para os percentis 10, 25, 50, 75, 90, 95, 99 e 100. Cada bucket 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 atual e anterior.

Observação:devido às características inerentes do algoritmo de clusterização K-means, sempre há algum grau de variância na distribuição de vetores entre as partições, mesmo quando o índice é criado inicialmente.

Recomendação de ajuste com base nas métricas

Mutação
As métricas insertcount, updatecount e deletecount mostram juntas as mudanças ou mutações no vetor do índice.
O índice é criado com um número específico de vetores e partições. Quando operações como inserção, atualização ou exclusão são realizadas no índice de vetor, elas afetam apenas o conjunto inicial de partições em que os vetores residem. Como resultado, o número de vetores em cada partição varia com o tempo, o que pode afetar o recall, o QPS ou ambos.
Se você encontrar problemas de lentidão ou precisão, como QPS baixo ou recall ruim, nas suas consultas de pesquisa de ANN ao longo do tempo, revise essas métricas. Um número alto de mutações em relação 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 você cria um índice, ele é criado com um número específico de vetores e partições fixas. O processo de particionamento e a distribuição subsequente ocorrem com base nessa consideração. Se outros vetores forem adicionados, eles serão particionados entre as partições atuais, resultando em uma distribuição diferente em comparação com a distribuição quando o índice foi criado. Como a distribuição final não considera todos os vetores simultaneamente, o recall, o QPS ou ambos podem ser afetados.
Se você notar um declínio gradual na performance das suas consultas de pesquisa de rede neural artificial, como tempos de resposta mais lentos ou redução na acurácia dos resultados (medida por QPS ou recall), verifique essa métrica e faça a reindexação.
Percentil de distribuição
A métrica distributionpercentile é uma distribuição de índice vetorial na visualização pg_stat_ann_indexes que ajuda a entender 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 você cria um índice alloydb_scann no conjunto inicial de linhas definindo num_leaves, o índice pode mudar 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. Essas mudanças podem levar à degradação do QPS, do recall ou de ambos. A distribuição do índice de vetor pode fornecer indicadores se a mutação causar uma mudança na distribuição do índice. Essas informações podem ajudar você a determinar se um reindex é necessário ou se uma mudança nas configurações de tempo de pesquisa pode melhorar a performance da consulta.
Em um índice vetorial, a distribuição de vetores entre partições raramente é perfeitamente uniforme. Esse desequilíbrio é chamado de distribuição não uniforme. Um certo grau de não uniformidade é esperado e não significa que você precisa 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})) $ em que "p" é um bucket de distribuição de índice de vetor.
  • O número de vetores em qualquer percentil é
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    Quando essas condições não são atendidas, REINDEX pode ser necessário com base no quanto o QPS e o recall são afetados.
Os cenários a seguir, 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 diferentes de zero e a variância do número de vetores é baixa, é um índice uniforme aproximado. REINDEX é obrigatório se os vetores numéricos em cada partição forem> 8 * vetor médio em index_creation_time.
  • Índice esparso:também ocorre quando mais de 50% das partições estão vazias. Por exemplo, um índice esparso é criado quando várias exclusões ocorrem em uma tabela. Nesse cenário, os vetores se concentram em um pequeno número de partições, o que aumenta a quantidade de vetores em cada uma delas. Quando isso acontecer, solte e recrie o índice.