Métriques d'index vectoriel

Sélectionnez une version de la documentation :

Cette page liste les métriques liées aux index vectoriels que vous générez dans AlloyDB Omni. Vous pouvez afficher ces métriques à l'aide de la vue pg_stat_ann_indexes, disponible lorsque vous installez l'extension alloydb_scann.

Pour en savoir plus sur l'affichage des métriques, consultez Afficher les métriques d'index vectoriel.

Métriques d'utilisabilité

Les métriques d'utilisabilité incluent des métriques qui vous aident à comprendre l'état d'utilisation de l'index, telles que la configuration de l'index et le nombre d'analyses d'index.

Nom de la métrique Type de données Description
relid OID Identifiant unique de la table contenant l'index vectoriel
indexrelid OID Identifiant unique de l'index vectoriel
schemaname NAME Nom du schéma propriétaire de l'index
relname NAME Nom de la table contenant l'index
indexrelname NAME Nom de l'index
indextype NAME Type d'index. Cette valeur est toujours définie sur scann.
indexconfig TEXT[] Configuration, telle que le nombre de feuilles et le quantificateur, définie pour l'index lors de sa création
indexsize TEXT Taille de l'index
indexscan BIGINT Nombre d'analyses d'index lancées sur l'index

Métriques de réglage

Les métriques de réglage fournissent des insights sur l'optimisation actuelle de votre index, ce qui vous permet d'appliquer des recommandations pour améliorer les performances des requêtes.

Nom de la métrique Type de données Description
insertcount BIGINT Nombre d'opérations d'insertion sur l'index. Cette métrique inclut également le nombre de lignes qui existaient avant la création de l'index.
updatecount BIGINT Nombre d'opérations de mise à jour sur l'index. Cette métrique ne tient pas compte des mises à jour HOT.
deletecount BIGINT Nombre d'opérations de suppression sur l'index.
distribution JSONB Distributions vectorielles sur toutes les partitions de l'index.

Les champs suivants affichent la distribution :
  • maximum (INT8) : nombre maximal de vecteurs sur toutes les partitions.
  • minimum (INT8) : nombre minimal de vecteurs sur toutes les partitions.
  • average (FLOAT) : nombre moyen de vecteurs sur toutes les partitions.
  • outliers (INT8[]) : valeurs aberrantes les plus élevées sur toutes les partitions. Cette valeur affiche les 20 valeurs aberrantes les plus élevées.

Remarque : En raison des caractéristiques inhérentes à l'algorithme de clustering k-moyennes, il y aura toujours un certain degré de variance dans la distribution des vecteurs entre les partitions, même lorsque l'index est créé initialement.
distributionpercentile JSONB La distribution d'index vectoriel vous aide à comprendre la distribution des vecteurs entre les partitions de votre index ScaNN. Les partitions sont créées en fonction de la valeur num_leaves définie lors de la création de l'index.

La distribution d'index vectoriel contient des buckets pour les 10e, 25e, 50e, 75e, 90e, 95e, 99e et 100e centiles. Chaque bucket contient les valeurs suivantes :
  • Nombre de vecteurs présents dans la partition au centile spécifié.
  • Nombre de partitions contenant des vecteurs dans la plage définie par les centiles actuel et précédent.

Remarque : En raison des caractéristiques inhérentes à l'algorithme de clustering k-moyennes, il existe toujours un certain degré de variance dans la distribution des vecteurs entre les partitions, même lorsque l'index est créé initialement.

Recommandation de réglage basée sur les métriques

Mutation
Les insertcount, updatecount, et deletecount métriques indiquent ensemble les modifications ou les mutations dans le vecteur de l'index.
L'index est créé avec un nombre spécifique de vecteurs et de partitions. Lorsque des opérations telles que l'insertion, la mise à jour ou la suppression sont effectuées sur l'index vectoriel, elles n'affectent que l'ensemble initial de partitions dans lesquelles résident les vecteurs. Par conséquent, le nombre de vecteurs dans chaque partition fluctue au fil du temps, ce qui peut avoir un impact sur le rappel, le RPS ou les deux.
Si vous rencontrez des problèmes de lenteur ou de précision, tels qu'un faible RPS ou un rappel médiocre, dans vos requêtes de recherche ANN au fil du temps, envisagez de consulter ces métriques. Un nombre élevé de mutations par rapport au nombre total de vecteurs peut indiquer qu'une réindexation est nécessaire.
Distribution
La métrique distribution affiche les distributions vectorielles sur toutes les partitions.
Lorsque vous créez un index, il est créé avec un nombre spécifique de vecteurs et de partitions fixes. Le processus de partitionnement et la distribution ultérieure se produisent en fonction de cette considération. Si des vecteurs supplémentaires sont ajoutés, ils sont partitionnés entre les partitions existantes, ce qui entraîne une distribution différente de celle qui existait lors de la création de l'index. Étant donné que la distribution finale ne prend pas en compte tous les vecteurs simultanément, le rappel, le RPS ou les deux peuvent être affectés.
Si vous constatez une baisse progressive des performances de vos requêtes de recherche ANN, par exemple des temps de réponse plus lents ou une précision réduite dans les résultats (mesurée par le RPS ou le rappel), envisagez de vérifier cette métrique et de réindexer.
Centile de distribution
La métrique distributionpercentile est une distribution d'index vectoriel dans la vue pg_stat_ann_indexes qui vous aide à comprendre la distribution des vecteurs entre les partitions de votre index ScaNN. Les partitions sont créées en fonction de la valeur num_leaves définie lors de la création de l'index.
Lorsque vous créez un index alloydb_scann sur l'ensemble initial de lignes en définissant num_leaves, l'index peut modifier la distribution des vecteurs entre les partitions en raison d'opérations sur les données (mutations d'inclinaison), ou le nombre de vecteurs peut augmenter de manière significative. Ces modifications peuvent entraîner une dégradation du RPS, du rappel ou des deux. La distribution d'index vectoriel peut vous indiquer si la mutation entraîne une modification de la distribution d'index. Ces informations peuvent vous aider à déterminer si une réindexation est nécessaire ou si une modification des configurations de temps de recherche peut améliorer les performances des requêtes.
Dans un index vectoriel, la distribution des vecteurs entre les partitions est rarement parfaitement uniforme. Ce déséquilibre est appelé distribution non uniforme. Un certain degré de non-uniformité est souvent attendu et ne signifie pas que vous devez réindexer. Une distribution non uniforme présente les caractéristiques suivantes :
  • La variance du nombre de vecteurs est faible. La variance peut être calculée comme suit :
    $(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
  • Le nombre de partitions avec 0 vecteur est faible et peut être inférieur à 30% des partitions.
  • La variance du nombre de partitions est faible.
    $ variance _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $ où "p" est un bucket de distribution d'index vectoriel.
  • Le nombre de vecteurs à n'importe quel centile est
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    Lorsque ces conditions ne sont pas remplies, REINDEX peut être nécessaire en fonction de l'impact sur le RPS et le rappel.
Les scénarios suivants, bien que moins courants que la distribution non uniforme, peuvent se produire :
  • Index uniforme approximatif : lorsque la plupart des partitions ont le même nombre de vecteurs non nuls et que la variance du nombre de vecteurs est faible, il s'agit d'un index uniforme approximatif. REINDEX est requis si le nombre de vecteurs dans chaque partition est $> 8 * average vector$ à index_creation_time.
  • Index creux : un index creux se produit également lorsque plus de 50% des partitions sont vides. Par exemple, un index creux est créé lorsque plusieurs suppressions se produisent dans une table. Dans ce scénario, les vecteurs sont concentrés dans un petit nombre de partitions, ce qui augmente le nombre de vecteurs dans chaque partition. Dans ce cas, supprimez l'index et recréez-le.