Damit sich Ihre Vektorindexe an Änderungen anpassen, die sich auf die Genauigkeit Ihrer Suchergebnisse auswirken können, müssen Sie sie verwalten.
Hinweis
Bevor Sie die Indexwartung verwalten, installieren oder aktualisieren Sie die Erweiterungen vector und alloydb_scann:
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 und aktualisiert AlloyDB die Zentroide und teilt große Ausreißerpartitionen auf. Dadurch werden die Abfragen pro Sekunde (Queries per Second, QPS) und die Qualität der Suchergebnisse automatisch verbessert. Alle automatischen Aktualisierungen sind bis zur nächsten Wartung dauerhaft.
AlloyDB aktiviert die automatische Indexwartung standardmäßig für automatisch optimierte ScaNN-Indexe. Wenn Sie automatisch optimierte ScaNN-Indexe erstellen, aber die automatische Wartung deaktivieren möchten, lesen Sie Automatische Wartung für automatische Indexe deaktivieren.
Informationen zum Aktivieren der automatischen Wartung für manuell erstellte Indexe finden Sie unter Automatische Wartung während der Indexerstellung 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. Ein Beispiel finden Sie im folgenden Befehl, 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: Tabelle, der Sie den Index hinzufügen möchten.EMBEDDING_COLUMN_NAME: Spalte, in der dievector-Daten gespeichert sind, 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: Modus, in dem der ScaNN-Index erstellt werden soll. Die verfügbaren Werte sind:AUTO: AlloyDB verwaltet und optimiert die Struktur des Index automatisch. Der Standardwert fürauto_maintenanceiston, wennmodeaufAUTOgesetzt ist.MANUAL: Sie verwalten und optimieren Ihren ScaNN-Index manuell. Der Standardwert fürauto_maintenanceistoff, wennmodeaufMANUALgesetzt ist.
Weitere Informationen zum zu verwendenden Indexmodus finden Sie unter ScaNN-Index erstellen.
NUM_PARTITIONS: Anzahl der Partitionen, die auf diesen Index angewendet werden sollen. Setzen Sie diesen Wert auf einen beliebigen Wert zwischen3und1048576. Weitere Informationen zum Festlegen dieses Werts finden Sie unter IndexScaNNoptimieren.
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: Aktivieren oder deaktivieren Sie die automatische Wartung. Setzen Sie den Wert aufon, um die automatische Wartung zu aktivieren. Setzen Sie den Wert aufoff, um die automatische Wartung zu deaktivieren.
Durchsatz der automatischen Wartung erhöhen
Konfigurieren Sie das
scann.max_background_workers
Datenbank-Flag, um den Durchsatz der automatischen Wartung zu erhöhen. 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
max_worker_processes
Wert sein, der für Ihren Datenbankcluster festgelegt ist.
Weitere Informationen zum Konfigurieren von Datenbank-Flags finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
Verzögerung der automatischen Wartung erhöhen
Konfigurieren Sie das
scann.maintenance_background_naptime_s
Datenbank-Flag, um die Verzögerung zwischen den automatischen Wartungsläufen zu erhöhen.
Weitere Informationen zum Konfigurieren von Datenbank-Flags finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
Prozentsatz der Partitionen durchsuchen
Da die Anzahl der Partitionen steigt, wenn AlloyDB große Ausreißerpartitionen automatisch aufteilt, empfehlen wir, die Anzahl der zu durchsuchenden Blätter anzupassen, um eine optimale Leistung zu erzielen. Konfigurieren Sie den Parameter scann.pct_leaves_to_search, um diese Anzahl automatisch zu verwalten.
scann.pct_leaves_to_search gibt den Prozentsatz der aktuellen Partitionen an, die durchsucht werden sollen. Sie können diesen Parameter auf einen beliebigen Wert zwischen 0 und 100 setzen. Der
Standardwert ist 0. Dadurch wird dieser Parameter deaktiviert und stattdessen der in
scann.num_leaves_to_search
festgelegte Wert verwendet. Wenn scann.num_leaves_to_search ebenfalls auf 0 gesetzt ist, verwendet AlloyDB standardmäßig 1% der Blätter.
Wenn Sie davon ausgehen, dass Ihr Dataset erheblich wächst, setzen Sie den Anfangswert auf 1.
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 automatische Indexe deaktivieren
Wenn Sie die automatische Wartung für automatisch optimierte ScaNN-Indexe deaktivieren möchten, setzen Sie den Parameter auto_maintenance während der Indexerstellung auf OFF. Ein Beispiel finden Sie im folgenden Befehl, 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 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, Ihren ScaNN-Index regelmäßig neu zu erstellen, um die Genauigkeit des Recall zu verbessern. Weitere Informationen zum Anzeigen von Änderungen an Vektorverteilungen oder -mutationen seit der Erstellung des Index finden Sie unter Messwerte für Vektorindexe ansehen.
Führen Sie den folgenden Befehl aus, um Ihren Index mit den ursprünglichen Konfigurationen manuell 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.