Damit sich Ihre Vektorindexe an Änderungen anpassen, die sich auf die Genauigkeit Ihrer Suchergebnisse auswirken könnten, sollten Sie Ihre Vektorindexe pflegen.
Hinweis
Bevor Sie die Indexwartung verwalten können, müssen Sie die Erweiterungen vector und alloydb_scann installieren oder aktualisieren:
Wenn die Erweiterungen
vectorundalloydb_scannnicht installiert sind, installieren Sie sie.CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS alloydb_scann;Wenn die Erweiterungen
vectorundalloydb_scannbereits installiert sind, aktualisieren Sie sie.ALTER EXTENSION vector UPDATE; ALTER EXTENSION alloydb_scann UPDATE;
Indexe automatisch verwalten
Sie können AlloyDB Ihre Vektorindexe automatisch verwalten lassen. Wenn Ihr Dataset wächst, analysiert AlloyDB die Schwerpunkte und aktualisiert sie. Außerdem werden große Ausreißerpartitionen aufgeteilt. Dadurch werden automatisch die Abfragen pro Sekunde (QPS) und die Qualität der Suchergebnisse verbessert. Alle automatischen Aktualisierungen sind bis zum nächsten Wartungslauf dauerhaft.
In AlloyDB ist die automatische Indexwartung standardmäßig für automatisch optimierte ScaNN-Indexe aktiviert. Wenn Sie automatisch optimierte ScaNN-Indizes erstellen, aber die automatische Wartung deaktivieren möchten, lesen Sie den Abschnitt Automatische Wartung für automatische Indizes deaktivieren.
Informationen zum Aktivieren der automatischen Wartung für manuell erstellte Indexe finden Sie unter Automatische Wartung beim Erstellen von Indexen aktivieren.
Automatische Wartung während der Indexerstellung aktivieren
Wenn Sie die automatische Wartung während der Indexerstellung aktivieren möchten, setzen Sie den Parameter auto_maintenance auf on. Sehen Sie sich beispielsweise den folgenden Befehl an, mit dem ein ScaNN-Vektorindex erstellt wird.
CREATE INDEX INDEX_NAME ON TABLE_NAME \
USING scann (EMBEDDING_COLUMN_NAME DISTANCE_FUNCTION_NAME) \
WITH (mode='INDEX_MODE', num_leaves=NUM_PARTITIONS, auto_maintenance=on);
Ersetzen Sie die folgenden Variablen:
INDEX_NAME: Name des Index, den Sie erstellen möchten. Beispiel:my_scann_index. Indexnamen sind in Ihrer Datenbank freigegeben. Achten Sie darauf, dass jeder Indexname für jede Tabelle in Ihrer Datenbank eindeutig ist.TABLE_NAME: Die Tabelle, der der Index hinzugefügt werden soll.EMBEDDING_COLUMN_NAME: Spalte, in der dievector-Daten gespeichert werden, die Sie indexieren möchten.DISTANCE_FUNCTION_NAME: Distanzfunktion, die für diesen Index verwendet werden soll. Wählen Sie eine der folgenden Optionen aus:L2-Distanz:
l2Skalarprodukt:
dot_productKosinus-Distanz:
cosine
INDEX_MODE: Der Modus, in dem der ScaNN-Index erstellt werden soll. Folgende Werte sind verfügbar:AUTO: AlloyDB verwaltet und optimiert die Struktur des Index automatisch. Der Standardwert fürauto_maintenanceiston, wennmodeaufAUTOgesetzt ist.MANUAL: ScaNN-Index manuell verwalten und optimieren. Der Standardwert fürauto_maintenanceistoff, wennmodeaufMANUALgesetzt ist.
Weitere Informationen dazu, welcher Indexmodus verwendet werden sollte, finden Sie unter ScaNN-Index erstellen.
NUM_PARTITIONS: Anzahl der Partitionen, die auf diesen Index angewendet werden sollen. Legen Sie einen beliebigen Wert zwischen3und1048576fest. Weitere Informationen dazu, wie Sie diesen Wert festlegen, finden Sie unterScaNN-Index abstimmen.
Automatische Wartung für vorhandene Indexe konfigurieren
Führen Sie den folgenden Befehl aus, um die automatische Wartung für vorhandene manuelle Indexe zu konfigurieren:
ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);
Ersetzen Sie die folgenden Variablen:
INDEX_NAME: Name des Index, den Sie ändern möchten. Beispiel:my_scann_index.AUTOMATIC_MAINTENANCE: Automatische Wartung aktivieren oder deaktivieren. Setzen Sie den Wert aufon, um sie zu aktivieren. Zum Deaktivieren legen Sie den Wert aufofffest.
Durchsatz der automatischen Wartung erhöhen
Wenn Sie den Durchsatz der automatischen Wartung erhöhen möchten, konfigurieren Sie das Datenbank-Flag scann.max_background_workers. Wenn Sie die Anzahl der Hintergrund-Worker erhöhen, steigt die Anzahl der Indexe, die pro Zeiteinheit verarbeitet werden. Die Verarbeitungszeit für einzelne Indexe wird dadurch nicht verkürzt. Dieser Wert muss kleiner als der für Ihren Datenbankcluster festgelegte Wert max_worker_processes sein.
Weitere Informationen zum Konfigurieren von Datenbank-Flags finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
Verzögerung der automatischen Wartung erhöhen
Wenn Sie die Verzögerung zwischen automatischen Wartungsläufen verlängern möchten, konfigurieren Sie das Datenbankflag scann.maintenance_background_naptime_s.
Weitere Informationen zum Konfigurieren von Datenbank-Flags finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
Prozentsatz der Partitionen im Suchnetzwerk
Da die Anzahl der Partitionen wächst, weil AlloyDB große Ausreißerpartitionen automatisch aufteilt, empfehlen wir, die Anzahl der zu durchsuchenden Blätter anzupassen, um eine optimale Leistung zu erzielen. Wenn Sie diese Nummer automatisch verwalten möchten, konfigurieren Sie den Parameter scann.pct_leaves_to_search.
scann.pct_leaves_to_search steht für den Prozentsatz der aktuellen Partitionen, die durchsucht werden sollen. Sie können diesen Parameter auf einen beliebigen Wert zwischen 0 und 100 festlegen. Der Standardwert ist 0. In diesem Fall wird der Parameter deaktiviert und stattdessen der in scann.num_leaves_to_search festgelegte Wert verwendet. Wenn scann.num_leaves_to_search auch auf 0 gesetzt ist, verwendet AlloyDB standardmäßig 1% Blätter.
Wenn Sie davon ausgehen, dass Ihr Dataset erheblich wachsen wird, legen Sie den Anfangswert auf 1 fest.
Führen Sie den folgenden Befehl aus, um scann.pct_leaves_to_search festzulegen:
ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;
Ersetzen Sie die folgenden Variablen:
DB_NAME: Name Ihrer Datenbank.PERCENTAGE_PARTITIONS_TO_SEARCH: Prozentsatz der zu durchsuchenden Partitionen.
Indexwartung manuell aufrufen
Wenn Sie die Wartung für einen bestimmten Index manuell aufrufen möchten, führen Sie den folgenden Befehl aus:
SELECT scann_index_maintenance('INDEX_NAME');
Ersetzen Sie INDEX_NAME durch den Namen des Index, für den Sie die Wartung aufrufen möchten. Beispiel: my_scann_index
Automatische Wartung für Auto-Indexe deaktivieren
Wenn Sie die automatische Wartung für automatisch optimierte ScaNN-Indizes deaktivieren möchten, setzen Sie den Parameter auto_maintenance beim Erstellen des Index auf OFF. Sehen Sie sich beispielsweise den folgenden Befehl an, mit dem ein automatisch optimierter ScaNN-Index erstellt wird:
CREATE INDEX similarity_index ON products
USING scann (description_embedding cosine)
WITH (MODE = 'AUTOMATIC', auto_maintenance = 'OFF');
Wenn Sie die automatische Wartung für einen vorhandenen automatisch optimierten ScaNN-Index deaktivieren möchten, lesen Sie den Abschnitt Automatische Wartung für vorhandene Indexe konfigurieren.
Index manuell neu erstellen
Wenn Ihre Tabelle häufig aktualisiert wird oder neue Zeilen eingefügt werden, empfehlen wir, den ScaNN-Index regelmäßig neu zu erstellen, um die Genauigkeit des Recall zu verbessern. Weitere Informationen zum Beobachten von Änderungen an Vektorverteilungen oder Mutationen seit der Erstellung des Index finden Sie unter Messwerte für Vektorindex ansehen.
Führen Sie den folgenden Befehl aus, um den Index manuell mit den ursprünglichen Konfigurationen neu zu erstellen:
REINDEX INDEX CONCURRENTLY INDEX_NAME;
Ersetzen Sie INDEX_NAME durch den Namen des Index, den Sie neu erstellen möchten. Beispiel: my_scann_index.
Weitere Informationen zum Neuindexieren in PostgreSQL finden Sie unter REINDEX.