Vektorindexe verwalten

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 vector und alloydb_scann nicht installiert sind, installieren Sie sie.

    CREATE EXTENSION IF NOT EXISTS vector;
    CREATE EXTENSION IF NOT EXISTS alloydb_scann;
    
  • Wenn die Erweiterungen vector und alloydb_scann bereits 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 die vector-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: l2

    • Skalarprodukt: dot_product

    • Kosinus-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ür auto_maintenance ist on, wenn mode auf AUTO gesetzt ist.

    • MANUAL: Sie verwalten und optimieren Ihren ScaNN-Index manuell. Der Standardwert für auto_maintenance ist off, wenn mode auf MANUAL gesetzt 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 zwischen 3 und 1048576. Weitere Informationen zum Festlegen dieses Werts finden Sie unter Index ScaNN optimieren.

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 auf on, um die automatische Wartung zu aktivieren. Setzen Sie den Wert auf off, 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.

Nächste Schritte