Messwerte für Vektorindex

Wählen Sie eine Dokumentenversion aus:

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

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

Messwerte zur Verwendbarkeit

Die Messwerte zur Verwendbarkeit 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, das Inhaber des Index ist
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 Quantifizierer, die für den Index bei seiner Erstellung definiert wurden
indexsize TEXT Größe des Index
indexscan BIGINT Anzahl der Indexscans, die für den Index initiiert wurden

Abstimmungsmesswerte

Abstimmungsmesswerte liefern Einblicke in die aktuelle Indexoptimierung, sodass Sie Empfehlungen für eine schnellere Abfrageleistung anwenden können.

Messwertname Datentyp Beschreibung
insertcount BIGINT Anzahl der Einfügevorgänge für den 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-Aktualisierungen berücksichtigt.
deletecount BIGINT Anzahl der Löschvorgänge für den Index.
distribution JSONB Vektorverteilungen über alle Partitionen für den Index.

Die folgenden Felder zeigen die Verteilung:
  • maximum (INT8): Maximale Anzahl von Vektoren über alle Partitionen hinweg.
  • minimum (INT8): Minimale Anzahl von Vektoren über alle Partitionen hinweg.
  • average (FLOAT) : Durchschnittliche Anzahl von Vektoren über alle Partitionen hinweg.
  • outliers (INT8[]): Top-Ausreißer über alle Partitionen hinweg. 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 der Vektoren auf die Partitionen, auch wenn der Index ursprünglich erstellt wird.
distributionpercentile JSONB Die Vektorindexverteilung hilft Ihnen, die Verteilung der Vektoren zwischen den Partitionen Ihres ScaNN-Index zu verstehen. Die Partitionen werden basierend auf dem Wert num_leaves erstellt, der bei der Indexerstellung definiert wurde.

Die Vektorindexverteilung 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, die in der Partition beim angegebenen Perzentil vorhanden sind.
  • Anzahl der Partitionen, die Vektoren im Bereich zwischen dem aktuellen und dem vorherigen Perzentil haben.

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

Abstimmungsempfehlung basierend auf den Messwerten

Mutation
Die Messwerte insertcount, updatecount, und deletecount zeigen zusammen die Änderungen oder Mutationen im Vektor für den Index.
Der Index wird mit einer bestimmten Anzahl von Vektoren und Partitionen erstellt. Wenn Vorgänge wie Einfügen, Aktualisieren oder Löschen für den Vektorindex ausgeführt werden, wirkt sich dies 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 Rate von Abfragen pro Sekunde oder beides auswirkt.
Wenn im Laufe der Zeit Probleme mit der Geschwindigkeit oder Accuracy auftreten, z. B. eine niedrige Rate von Abfragen pro Sekunde oder ein schlechter 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 über alle Partitionen hinweg.
Wenn Sie einen Index erstellen, wird er mit einer bestimmten Anzahl von Vektoren und festen Partitionen erstellt. Der Partitionierungsprozess und die anschließende Verteilung erfolgen auf dieser Grundlage. Wenn zusätzliche Vektoren hinzugefügt werden, werden sie auf die vorhandenen Partitionen verteilt, was zu einer anderen Verteilung führt 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 Rate von Abfragen pro Sekunde oder beides auswirken.
Wenn Sie einen allmählichen Rückgang der Leistung Ihrer ANN-Suchanfragen feststellen, z. B. langsamere Antwortzeiten oder eine geringere Accuracy der Ergebnisse (gemessen an Abfragen pro Sekunde oder dem Recall), sollten Sie diesen Messwert überprüfen und den Index neu erstellen.
Verteilungsperzentil
Der Messwert distributionpercentile ist eine Vektorindexverteilung in der Ansicht pg_stat_ann_indexes, mit der Sie die Verteilung der Vektoren zwischen den Partitionen Ihres ScaNN-Index nachvollziehen können. Die Partitionen werden basierend auf dem Wert num_leaves erstellt, der bei der Indexerstellung definiert wurde.
Wenn Sie einen alloydb_scann-Index für die ursprüngliche Gruppe von Zeilen erstellen, indem Sie num_leaves festlegen, kann der Index die Verteilung der Vektoren auf die Partitionen aufgrund von Datenvorgängen (Skew-Mutationen) ändern oder die Anzahl der Vektoren kann erheblich zunehmen. Diese Änderungen können zu einer Verschlechterung der Rate von Abfragen pro Sekunde, des Recalls oder beider führen. Die Vektorindexverteilung kann Ihnen signalisieren, ob die Mutation eine Änderung der Indexverteilung verursacht. Anhand dieser Informationen können Sie feststellen, ob eine Neuindexierung erforderlich ist oder ob eine Änderung der Konfigurationen für die Suchzeit 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 Ungleichmäßigkeit ist oft zu erwarten und bedeutet nicht, dass Sie den Index neu erstellen müssen. Eine ungleichmäßige Verteilung hat die folgenden Eigenschaften:
  • 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 Vektorindexverteilung ist.
  • Die Anzahl der Vektoren bei 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 dies auf die Rate von Abfragen pro Sekunde und den Recall auswirkt.
Die folgenden Szenarien sind zwar weniger häufig als eine ungleichmäßige Verteilung, können aber auftreten:
  • Annähernd gleichmäßiger 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 annähernd gleichmäßigen Index. REINDEX ist erforderlich, wenn die Anzahl der Vektoren in jeder Partition zum Zeitpunkt der index_creation_time größer als das 8-fache des durchschnittlichen Vektors ist.
  • Sparse Index:Ein Sparse Index tritt auch auf, wenn mehr als 50% der Partitionen leer sind. Ein sparsamer Index wird beispielsweise erstellt, wenn mehrere Löschvorgänge in einer Tabelle ausgeführt werden. In diesem Szenario sind die Vektoren in einer kleinen Anzahl von Partitionen konzentriert, was die Anzahl der Vektoren in jeder Partition erhöht. In diesem Fall sollten Sie den Index löschen und neu erstellen.