Vektorindexe verwalten

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 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 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 die vector-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: l2

    • Skalarprodukt: dot_product

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

    • MANUAL: ScaNN-Index manuell verwalten und optimieren. Der Standardwert für auto_maintenance ist off, wenn mode auf MANUAL gesetzt 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 zwischen 3 und 1048576 fest. Weitere Informationen dazu, wie Sie diesen Wert festlegen, finden Sie unter ScaNN-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 auf on, um sie zu aktivieren. Zum Deaktivieren legen Sie den Wert auf off fest.

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.

Nächste Schritte