Vektorindexe verwalten

Auf dieser Seite werden Optionen zum Verwalten von Vektorindexen beschrieben. Durch die Pflege von Indexen wird sichergestellt, dass sie sich an Datenänderungen anpassen, die sich auf die Genauigkeit Ihrer Suchergebnisse auswirken können. Mit den Strategien auf dieser Seite können Sie verhindern, dass die Abfrageleistung mit zunehmender Größe Ihres Datasets nachlässt.

Hinweise

  • Installieren oder aktualisieren Sie die Erweiterungen vector und alloydb_scann.

    1. Wenn die Erweiterungen vector und alloydb_scann nicht installiert sind, installieren Sie die neuesten Versionen.

      CREATE EXTENSION IF NOT EXISTS vector;
      CREATE EXTENSION IF NOT EXISTS alloydb_scann;
      
    2. Wenn die Erweiterungen vector und alloydb_scann bereits installiert sind, führen Sie ein Upgrade auf die neueste Version durch.

      ALTER EXTENSION vector UPDATE;
      ALTER EXTENSION alloydb_scann UPDATE;
      

Messwerte für Vektorindexe ansehen

Wenn Ihre Tabelle häufig aktualisiert oder neue Zeilen eingefügt werden, empfehlen wir, den vorhandenen ScaNN-Index regelmäßig neu zu indexieren, um die Recall-Genauigkeit zu verbessern. Sie können Indexmesswerte beobachten, um Änderungen an Vektorverteilungen oder Vektormutationen seit der Erstellung des Index zu sehen, und den Index dann entsprechend neu indexieren.

Weitere Informationen zu Messwerten finden Sie unter Messwerte für Vektorindex ansehen.

Indexe automatisch verwalten

Mit der automatischen Indexwartung kann AlloyDB den Index inkrementell verwalten. Wenn Ihr Dataset wächst, analysiert und aktualisiert AlloyDB kontinuierlich die Schwerpunkte und teilt große Ausreißerpartitionen auf. So können wir den Index für vergleichbare Abfragen pro Sekunde (QPS) und die Qualität der Suchergebnisse aufrechterhalten. Alle durch die automatische Wartung vorgenommenen Änderungen sind bis zur nächsten Wartung dauerhaft.

Sie können das Datenbankflag (GUC) scann.enable_preview_features zusammen mit dem Parameter auto_maintenance auf Indexebene verwenden, wenn Sie einen ScaNN-Index erstellen, um die automatische Indexwartung von ScaNN-Indizes zu aktivieren.

Die automatische Indexwartung ist standardmäßig für automatisch optimierte ScaNN-Indizes aktiviert. Bei manuell erstellten Indexen können Sie nach dem Aktivieren des Flags scann.enable_preview_features den Parameter auto_maintenance bei der Indexerstellung festlegen oder die Funktion scann_index_maintenance verwenden, um die automatische Indexwartung bei Bedarf auszulösen.

Wenn Sie möchten, dass AlloyDB einen Index automatisch verwaltet, aktivieren Sie das Flag scann.enable_preview_features:

gcloud alloydb instances update INSTANCE_ID \
     --database-flags scann.enable_preview_features=on \
     --region=REGION_ID \
     --cluster=CLUSTER_ID \
     --project=PROJECT_ID

Ersetzen Sie Folgendes:

  • INSTANCE_ID: Die ID der Instanz.
  • REGION_ID: Die Region, in der sich die Instanz befindet, z. B. us-central1.
  • CLUSTER_ID: Die ID des Clusters, in dem sich die Instanz befindet.
  • PROJECT_ID: Die ID des Projekts, in dem sich der Cluster befindet.

Alle Aktualisierungen, die aufgrund der automatischen Wartung am Index vorgenommen werden, sind dauerhaft, bis AlloyDB den Index wieder aktualisiert.

Automatische Wartung während der Indexerstellung aktivieren

Führen Sie den folgenden Beispielbefehl aus, um einen manuellen ScaNN-Index mit aktivierter automatischer Indexwartung zu erstellen:

CREATE INDEX INDEX_NAME ON TABLE \
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION) \
WITH (mode=MANUAL, num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);

Ersetzen Sie Folgendes:

  • INDEX_NAME: Der Name des Index, den Sie erstellen möchten, z. B. my-scann-index. Die Indexnamen sind in Ihrer Datenbank freigegeben. Achten Sie darauf, dass jeder Indexname für jede Tabelle in Ihrer Datenbank eindeutig ist.

  • TABLE: Die Tabelle, der der Index hinzugefügt werden soll.

  • EMBEDDING_COLUMN: eine Spalte, in der vector-Daten gespeichert werden.

  • DISTANCE_FUNCTION: Die 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

  • NUM_LEAVES_VALUE: Die Anzahl der Partitionen, die auf diesen Index angewendet werden sollen. Kann auf einen beliebigen Wert zwischen 1 und 1.048.576 festgelegt werden. Weitere Informationen dazu, wie Sie diesen Wert festlegen, finden Sie unter ScaNN-Index optimieren.

Sie können den Durchsatz der automatischen Indexwartung für mehrere Indexe erhöhen, indem Sie das Datenbankflag scann.max_background_workers konfigurieren. Wenn Sie die Anzahl der Worker erhöhen, steigt die Anzahl der Indexe, die in einer Zeiteinheit verarbeitet werden. Die Verarbeitungszeit für einen einzelnen Index wird dadurch nicht verkürzt. Optional können Sie auch das Datenbankflag scann.maintenance_background_naptime_s festlegen, um die Mindestverzögerung zwischen automatischen Indexwartungsläufen zu steuern.

pct_leaves_to_search für die automatische Indexwartung konfigurieren

Wenn Sie die automatische Indexwartung aktiviert haben, teilt AlloyDB Partitionen automatisch anhand von Heuristiken auf, z. B. große Ausreißerpartitionen, die eine bestimmte Größe überschreiten. Da die Anzahl der Partitionen aufgrund dieser Aufteilungen zunimmt, sollten Sie die Anzahl der zu durchsuchenden Blätter anpassen, um eine optimale Leistung beizubehalten.

Mit pct_leaves_to_search können Sie die Anzahl der automatisch zu durchsuchenden Blätter verwalten. Mit diesem Parameter können Sie einen Prozentsatz der Anzahl der zu durchsuchenden Partitionen angeben. Wenn Sie davon ausgehen, dass Ihr Dataset erheblich wachsen wird, beginnen Sie, indem Sie den Wert pct_leaves_to_search auf 1 setzen. Der Parameter ist standardmäßig deaktiviert.

Legen Sie diesen Wert auf den Prozentsatz der aktuellen Anzahl von Partitionen fest. Wenn Sie beispielsweise 1 % der aktuellen Anzahl von Partitionen durchsuchen möchten, legen Sie diesen Wert auf 1 fest.

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 die Anzahl der zu durchsuchenden Blätter wird anhand von scann.num_leaves_to_search berechnet.

Führen Sie den folgenden Befehl aus, um das Flag pct_leaves_to_search für Ihre Datenbank festzulegen:

ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;

Ersetzen Sie Folgendes:

  • DATABASE_NAME: Der Name der Datenbank.
  • PERCENTAGE_LEAVES_TO_SEARCH: Der Prozentsatz von num_leaves, der durchsucht werden soll.

Indexwartung manuell aufrufen

Wenn Sie die Wartung für einen bestimmten Index auf Abruf ausführen möchten, führen Sie den folgenden Befehl aus. Diese Funktion ist in alloydb_scann-Version 0.1.2 oder höher verfügbar.

Wenn Sie diese Funktion verwenden möchten, müssen Sie zuerst das Flag scann.enable_preview_features aktivieren, wie unter Indexe automatisch verwalten beschrieben.

SELECT scann_index_maintenance('INDEX_NAME');

Index manuell neu erstellen

Sie können Ihren Index manuell neu erstellen, wenn Sie ihn mit den Konfigurationen neu erstellen möchten, die Sie bei der Erstellung angegeben haben.

Führen Sie den folgenden Befehl aus, um Ihren Index manuell neu zu erstellen:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Ersetzen Sie INDEX_NAME durch den Namen des Index, den Sie neu erstellen möchten, z. B. my-scann-index. Die Indexnamen sind in Ihrer Datenbank freigegeben. Achten Sie darauf, dass jeder Indexname für jede Tabelle in Ihrer Datenbank eindeutig ist.

Weitere Informationen zum Reindexieren in PostgreSQL finden Sie unter REINDEX.

Nächste Schritte