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:
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:
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, unddeletecountzeigen 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
distributionzeigt 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
distributionpercentileist eine Vektorindexverteilung in der Ansichtpg_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 Wertnum_leaveserstellt, der bei der Indexerstellung definiert wurde. - Wenn Sie einen
alloydb_scann-Index für die ursprüngliche Gruppe von Zeilen erstellen, indem Sienum_leavesfestlegen, 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öglicherweiseREINDEXerforderlich, je nachdem, wie stark sich dies auf die Rate von Abfragen pro Sekunde und den Recall auswirkt.
- Die Varianz der Anzahl der Vektoren ist gering. Die Varianz kann so berechnet werden:
- 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.
REINDEXist erforderlich, wenn die Anzahl der Vektoren in jeder Partition zum Zeitpunkt derindex_creation_timegröß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.
- 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.