Vektorindexe verwalten

Auf dieser Seite werden Optionen zum Verwalten Ihrer Vektorindexe beschrieben. Durch die Indexpflege wird sichergestellt, dass die Indexe an Datenänderungen angepasst werden, 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 Datenmenge abnimmt.

Messwerte für Vektorindexe ansehen

Wenn Ihre Tabelle häufig aktualisiert oder Daten eingefügt werden, empfehlen wir, den vorhandenen ScaNN-Index regelmäßig neu zu indexieren, um die Abrufgenauigkeit für den Index zu verbessern. Sie können Indexmesswerte beobachten, um Änderungen an Vektorverteilungen oder Vektormutationen seit dem Erstellen des Index zu sehen und dann entsprechend neu indexieren.

Weitere Informationen zu Messwerten finden Sie unter Messwerte für Vektorindexe aufrufen.

Indexe automatisch verwalten

Sie können das scann.enable_index_maintenance-Flag für die GUC-Datenbank (Grand Unified Configuration) zusammen mit dem Parameter auto_maintenance auf Indexebene verwenden, wenn Sie einen ScaNN-Index erstellen. Wenn Sie diese Einstellungen kombinieren, kann AlloyDB den Index schrittweise verwalten und große Abweichungspartitionen aufteilen, wenn Ihr Datensatz wächst. Durch das Aufteilen von Partitionen versucht AlloyDB, mehr Abfragen pro Sekunde (Queries per Second, QPS) und bessere Suchergebnisse zu erzielen.

Indexupdates bei der automatischen Wartung bleiben erhalten, bis AlloyDB den Index noch einmal aktualisiert.

Wenn Sie möchten, dass AlloyDB einen Index automatisch verwaltet, fügen Sie die Erweiterung alloydb_scann dem Parameter shared_preload_libraries hinzu, aktivieren Sie das scann.enable_index_maintenance-Flag für die Datenbank und laden Sie die Erweiterung alloydb_scann durch Neustarten der Datenbank:

  1. Laden Sie die alloydb_scann-Erweiterung in die shared_preload_libraries-Liste hoch:

    sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,alloydb_scann'|" DATA_DIR/postgresql.conf
  2. Prüfen Sie, ob die Konfiguration des Parameters richtig ist:

    grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
  3. Aktivieren Sie das Flag scann.enable_index_maintenance, indem Sie es in der Datei postgresql.conf festlegen:

    scann.enable_index_maintenance = ON
  4. Starten Sie AlloyDB Omni neu, damit die Parameteränderung wirksam wird:

    Docker

     docker container restart CONTAINER_NAME

    Ersetzen Sie CONTAINER_NAME durch den Namen, den Sie dem AlloyDB Omni-Container beim Starten zugewiesen haben.

    Podman

     podman container restart CONTAINER_NAME

    Ersetzen Sie CONTAINER_NAME durch den Namen, den Sie dem AlloyDB Omni-Container beim Starten zugewiesen haben.

Nachdem Sie das Flag scann.enable_index_maintenance aktiviert haben, können Sie die automatische Wartung für Indexe aktivieren oder die Funktion scann_index_maintenance aktivieren, um die Wartung manuell aufzurufen.

Automatische Wartung während der Indexerstellung aktivieren

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

CREATE INDEX INDEX_NAME ON TABLE
  USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
  WITH (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 werden in der gesamten Datenbank verwendet. 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: Spalte, in der vector-Daten gespeichert werden.

  • DISTANCE_FUNCTION: die Entfernungsfunktion, die mit diesem 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. Legen Sie einen Wert zwischen 1 und 1048576 fest. Weitere Informationen dazu, wie Sie diesen Wert festlegen, finden Sie unter ScaNN-Index optimieren.

Wartung manuell auslösen

Wenn Sie die Wartung für einen bestimmten Index auf Abruf ausführen möchten, führen Sie den folgenden Befehl aus:

SELECT AS scann_index_maintenance('INDEX_NAME');

Blätter verwalten, um automatisch nach aufgeteilten Partitionen zu suchen

Wenn Sie die automatische Indexwartung aktiviert haben, teilt AlloyDB Partitionen automatisch auf, wenn der Grenzwert von num_leaves erreicht wird. Wenn die Anzahl der Partitionen aufgrund dieser Aufteilungen zunimmt, sollten Sie die Anzahl der zu durchsuchenden Blätter anpassen, um die optimale Leistung beizubehalten.

Mit pct_leaves_to_search können Sie die Anzahl der Blätter verwalten, die automatisch durchsucht werden sollen. Mit diesem Parameter können Sie einen Prozentsatz der Anzahl der zu durchsuchenden Partitionen angeben. Wenn Sie davon ausgehen, dass Ihr Datenbestand erheblich wachsen wird, legen Sie zuerst den Wert für pct_leaves_to_search auf „1“ fest. Der Parameter ist standardmäßig deaktiviert.

Legen Sie diesen Wert als Prozentsatz der aktuellen Anzahl von Partitionen fest. Wenn Sie beispielsweise 1% der aktuellen Anzahl der 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. Dadurch wird dieser 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 pct_leaves_to_search-Flag 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 der num_leaves, nach dem gesucht werden soll.

Index manuell neu erstellen

Sie können den Index manuell neu erstellen, wenn Sie ihn mit den Konfigurationen neu erstellen möchten, die Sie beim Erstellen angegeben haben.

Führen Sie den folgenden Befehl aus, um den 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 werden in der gesamten Datenbank verwendet. Achten Sie darauf, dass jeder Indexname für jede Tabelle in Ihrer Datenbank eindeutig ist.

Weitere Informationen zum Neuindexieren in PostgreSQL finden Sie unter REINDEX.

Nächste Schritte