Messwerte für Vektorindexe

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite sind die Messwerte für die Vektorindexe aufgeführt, die Sie in AlloyDB Omni generieren. Sie können diese Messwerte in der pg_stat_ann_indexes-Ansicht aufrufen, die bei der Installation der alloydb_scann-Erweiterung verfügbar ist.

Weitere Informationen zum Aufrufen der Messwerte finden Sie unter Messwerte für Vektorindex aufrufen.

Messwerte zur Nutzerfreundlichkeit

Die Messwerte zur Nutzerfreundlichkeit umfassen Messwerte, mit denen Sie den Status der Indexnutzung nachvollziehen können, z. B. die Indexkonfiguration und die Anzahl der Indexscans.

Messwertname Datentyp Beschreibung
relid OID Eindeutige Kennung der Tabelle, die den Vektorindex enthält
indexrelid OID Eindeutige Kennung des Vektorindex
schemaname NAME Name des Schemas, zu dem der Index gehört
relname NAME Name der Tabelle, die den Index enthält
indexrelname NAME Name des Index
indextype NAME Typ des Index. Dieser Wert ist immer auf scann festgelegt.
indexconfig TEXT[] Konfiguration, z. B. Anzahl der Blätter und Quantisierer, die für den Index bei seiner Erstellung definiert wurden
indexsize TEXT Größe des Index
indexscan BIGINT Anzahl der für den Index initiierten Indexscans

Messwerte für die Abstimmung

Mit Tuning-Messwerten erhalten Sie Einblicke in die aktuelle Indexoptimierung. So können Sie Empfehlungen für eine schnellere Abfrageleistung anwenden.

Messwertname Datentyp Beschreibung
insertcount BIGINT Anzahl der Einfügevorgänge im Index. Dieser Messwert umfasst auch die Anzahl der Zeilen, die vor der Erstellung des Index vorhanden waren.
updatecount BIGINT Anzahl der Aktualisierungsvorgänge für den Index. Bei diesem Messwert werden keine HOT-Updates berücksichtigt.
deletecount BIGINT Anzahl der Löschvorgänge für den Index.
distribution JSONB Vektorverteilungen für alle Partitionen für den Index.

In den folgenden Feldern wird die Verteilung angezeigt:
  • maximum (INT8): Maximale Anzahl von Vektoren über alle Partitionen hinweg.
  • minimum (INT8): Mindestanzahl von Vektoren in allen Partitionen.
  • average (FLOAT) : Durchschnittliche Anzahl von Vektoren in allen Partitionen.
  • outliers (INT8[]): Die wichtigsten Ausreißer in allen Partitionen. Dieser Wert zeigt die 20 größten Ausreißer.

Hinweis:Aufgrund der inhärenten Eigenschaften des K-Means-Clustering-Algorithmus gibt es immer eine gewisse Varianz in der Verteilung von Vektoren auf Partitionen, auch wenn der Index ursprünglich erstellt wird.
distributionpercentile JSONB Mit der Verteilung des Vektorindex können Sie die Verteilung von Vektoren zwischen Partitionen Ihres ScaNN-Index nachvollziehen. Die Partitionen werden basierend auf dem num_leaves-Wert erstellt, der beim Erstellen des Index definiert wurde.

Die Verteilung des Vektorindex enthält Buckets für das 10., 25., 50., 75., 90., 95., 99. und 100. Perzentil. Jeder Bucket enthält die folgenden Werte:
  • Anzahl der Vektoren in der Partition am angegebenen Perzentil.
  • Anzahl der Partitionen mit Vektoren im Bereich, der durch das aktuelle und das vorherige Perzentil definiert wird.

Hinweis:Aufgrund der inhärenten Eigenschaften des K-Means-Clustering-Algorithmus gibt es immer eine gewisse Varianz in der Verteilung von Vektoren auf Partitionen, auch wenn der Index ursprünglich erstellt wird.

Empfehlung zur Optimierung basierend auf den Messwerten

Mutation
Die Messwerte insertcount, updatecount und deletecount geben zusammen die Änderungen oder Mutationen im Vektor für den Index an.
Der Index wird mit einer bestimmten Anzahl von Vektoren und Partitionen erstellt. Wenn Vorgänge wie „insert“, „update“ oder „delete“ für den Vektorindex ausgeführt werden, wirkt sich das nur auf die ursprüngliche Gruppe von Partitionen aus, in denen sich die Vektoren befinden. Daher schwankt die Anzahl der Vektoren in jeder Partition im Laufe der Zeit, was sich möglicherweise auf den Recall, die QPS oder beides auswirkt.
Wenn Sie im Laufe der Zeit bei Ihren ANN-Suchanfragen auf Probleme mit der Geschwindigkeit oder Genauigkeit stoßen, z. B. eine niedrige QPS oder einen schlechten Recall, sollten Sie diese Messwerte überprüfen. Eine hohe Anzahl von Mutationen im Verhältnis zur Gesamtzahl der Vektoren kann darauf hindeuten, dass eine Neuindexierung erforderlich ist.
Verteilung
Der Messwert distribution zeigt die Vektorverteilungen für alle Partitionen.
Wenn Sie einen Index erstellen, wird er mit einer bestimmten Anzahl von Vektoren und festen Partitionen erstellt. Die Partitionierung und die anschließende Verteilung erfolgen auf Grundlage dieser Überlegung. Wenn zusätzliche Vektoren hinzugefügt werden, werden sie auf die vorhandenen Partitionen aufgeteilt. Das führt zu einer anderen Verteilung als bei der Erstellung des Index. Da bei der endgültigen Verteilung nicht alle Vektoren gleichzeitig berücksichtigt werden, kann sich dies auf den Recall, die Anzahl der Anfragen pro Sekunde oder beides auswirken.
Wenn Sie einen allmählichen Rückgang der Leistung Ihrer ANN-Suchanfragen feststellen, z. B. langsamere Reaktionszeiten oder eine geringere Genauigkeit der Ergebnisse (gemessen an QPS oder Recall), sollten Sie diesen Messwert prüfen und neu indexieren.
Verteilungsperzentil
Der Messwert distributionpercentile ist eine Vektorindexverteilung in der Ansicht pg_stat_ann_indexes, mit der Sie die Verteilung von Vektoren zwischen Partitionen Ihres ScaNN-Index nachvollziehen können. Die Partitionen werden basierend auf dem num_leaves-Wert erstellt, der beim Erstellen des Index definiert wurde.
Wenn Sie einen alloydb_scann-Index für die ursprüngliche Menge von Zeilen erstellen, indem Sie num_leaves festlegen, kann sich die Verteilung der Vektoren auf die Partitionen aufgrund von Datenvorgängen (Skew-Mutationen) ändern oder die Anzahl der Vektoren kann sich erheblich erhöhen. Diese Änderungen können zu einer Verschlechterung von QPS, Recall oder beidem führen. Die Verteilung des Vektorindex kann Aufschluss darüber geben, ob die Mutation eine Änderung der Indexverteilung verursacht. Anhand dieser Informationen können Sie feststellen, ob ein Neuindexieren erforderlich ist oder ob eine Änderung der Suchzeitkonfigurationen die Abfrageleistung verbessern kann.
In einem Vektorindex ist die Verteilung der Vektoren auf die Partitionen selten perfekt gleichmäßig. Ein solches Ungleichgewicht wird als ungleichmäßige Verteilung bezeichnet. Ein gewisses Maß an Nicht-Uniformität ist oft zu erwarten und bedeutet nicht, dass Sie neu indexieren müssen. Eine nicht einheitliche Verteilung hat die folgenden Merkmale:
  • Die Varianz der Anzahl der Vektoren ist gering. Die Varianz kann so berechnet werden:
    $(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
  • Die Anzahl der Partitionen mit 0 Vektoren ist gering und liegt möglicherweise unter 30% der Partitionen.
  • Die Varianz der Anzahl der Partitionen ist gering.
    $ variance _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $ wobei „p“ ein Bucket für die Verteilung des Vektorindex ist.
  • Die Anzahl der Vektoren in einem beliebigen Perzentil ist
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    Wenn diese Bedingungen nicht erfüllt sind, ist möglicherweise REINDEX erforderlich, je nachdem, wie stark sich die Zahl der Abfragen pro Sekunde und der Recall auswirken.
Die folgenden Szenarien sind zwar weniger häufig als eine ungleichmäßige Verteilung, können aber auftreten:
  • Ungefähr einheitlicher Index:Wenn die meisten Partitionen dieselbe Anzahl von Vektoren ungleich null haben und die Varianz der Anzahl der Vektoren gering ist, handelt es sich um einen ungefähr einheitlichen Index. REINDEX ist erforderlich, wenn die Anzahl der Vektoren in jeder Partition bei index_creation_time größer als das Achtfache des durchschnittlichen Vektors ist.
  • Sparse-Index:Ein Sparse-Index wird auch erstellt, wenn mehr als 50% der Partitionen leer sind. Ein Beispiel: Ein spärlicher Index wird erstellt, wenn mehrere Löschvorgänge in einer Tabelle erfolgen. In diesem Szenario sind die Vektoren auf eine kleine Anzahl von Partitionen konzentriert, was die Anzahl der Vektoren in jeder Partition erhöht. Löschen Sie in diesem Fall den Index und erstellen Sie ihn neu.