Vektorindexe erstellen und verwalten

Auf dieser Seite wird beschrieben, wie Sie den Speicher für Vektorindexe konfigurieren und Vektorindexe erstellen, optimieren, überwachen und löschen.

Hinweise

Bevor Sie einen Vektorindex erstellen, müssen Sie Daten mit Vektoreinbettungswerten in die Basistabelle laden. Ihre Basistabelle muss mindestens 1.000 Zeilen enthalten. Wenn Sie mehr Datenpunkte zur Verfügung haben, können Sie den Index besser partitionieren und trainieren.

Speicherzuweisung für Vektorindexe konfigurieren

Mit dem Datenbank-Flag cloudsql_vector_max_mem_size wird gesteuert, wie viel Arbeitsspeicher Ihre Cloud SQL-Instanz für Vektorindexe reserviert. Dies ist ein statisches Flag, für das ein Neustart der Instanz erforderlich ist. Dieser Speicher dient zwei Hauptzwecken:

  1. Speichern der Vektorindexstruktur:Der Nicht-Blatt-Teil des Vektorindex (der TREE_MEMORY) befindet sich in diesem Speicher. Die ungefähre Größe dieses Baums hängt von der Anzahl der Blattknoten (num_leaves) und den Dimensionen Ihrer Vektoren ab:

     Approximate TREE_MEMORY = num_leaves * vector dimensions * 4 * 2
    

    Ein Index mit 1.000 Blättern und 768 Dimensionen hätte beispielsweise eine ungefähre TREE_MEMORY von 1.000 × 768 × 4 × 2 oder 6.144.000 Byte. Sie können die tatsächlichen TREE_MEMORY auch in der Tabelle information_schema.innodb_vector_indexes prüfen. Cloud SQL verwaltet diesen Speicher. Sie müssen nicht gleichzeitig Speicherplatz für alle Vektorindexe zuweisen, da inaktive Indexe entladen werden, um Platz für andere Anfragen zu schaffen.

  2. Arbeitsspeicher für die Indexerstellung (Trainingsdaten): Während der Erstellung des Vektorindex ist Arbeitsspeicher erforderlich, um eine Stichprobe der Daten aus Ihrer Basistabelle zu verarbeiten und den Index zu erstellen. Dieser Speicher wird nur während der Indexerstellung verwendet und danach freigegeben. Die ungefähre Größe des für das Training benötigten Arbeitsspeichers ist:

     approximate_training_memory = num_rows in base table * 0.1 * 4 * vector dimensions
    

    Bei einer Tabelle mit 1.000.000 Zeilen und 768 Dimensionen wäre die training_memory beispielsweise 1.000.000 × 0,1 × 768 × 4 oder 307.200.000 Byte. Für die Berechnung der Zentroiden für den Baum werden nur 10% der Daten der Basistabelle verwendet.

    Wenn Sie das Flag cloudsql_vector aktivieren, legt Cloud SQL automatisch einen Standardwert für cloudsql_vector_max_mem_size basierend auf der Größe Ihrer VM fest. Diese Standardeinstellung reicht in der Regel für typische Arbeitslasten aus. Cloud SQL reduziert das Flag innodb_buffer_pool_size, um diesen Arbeitsspeicher zuzuweisen. Der Standardhöchstwert für cloudsql_vector_max_mem_size beträgt 16 GB. Wenn Sie die Größe des Speichers anpassen müssen, können Sie cloudsql_vector_max_mem_size dynamisch an die Nutzung Ihres Vektorindex anpassen.

    Wichtig: Wenn Sie cloudsql_vector_max_mem_size erhöhen, müssen Sie innodb_buffer_pool_size entsprechend verringern, um Speicherprobleme zu vermeiden.

cloudsql_vector_max_mem_size values

VM-Größe cloudsql_vector_max_mem_size
4 GB 194 MB
8 GB 515 MB
16 GB 1,2 GB
32 GB 2,56 GB
64 GB 5,12 GB
128 GB 10,24 GB
256 GB oder mehr 16 GB

Der Bereich des zugewiesenen Vektorindexspeichers ist:

  • Mindestens 128 MB
  • 10% des Pufferpools
  • Maximal 16 GB

Sie können das Gedächtnis später nach Bedarf anpassen. Weitere Informationen finden Sie unter Datenbank-Flag für Vektoreinbettungen aktivieren.

Informationen zum Monitoring der Größe Ihres Vektorindex finden Sie unter Vektorindexe überwachen.

Verwenden Sie den folgenden Befehl, um den für Vektorindexe auf der Instanz zugewiesenen Arbeitsspeicher zu aktualisieren:

gcloud sql instances patch INSTANCE_NAME \
 --database-flags= cloudsql_vector_max_mem_size=NEW_MEMORY_VALUE;

Ersetzen Sie Folgendes:

  • INSTANCE_NAME: der Name der Instanz, für die Sie die Speicherzuweisung ändern.
  • NEW_MEMORY_VALUE: die aktualisierte Speicherzuweisung in Byte für Ihre Vektorindexe.

Diese Änderung wird sofort nach einem Datenbankneustart wirksam.

Vektorindex erstellen

Es gibt zwei Möglichkeiten, einen Vektorindex zu erstellen:

  • CREATE VECTOR INDEX-Anweisung, eine Cloud SQL-Erweiterung der Standard-MySQL-Syntax.
  • ALTER TABLE-Anweisung mit der Cloud SQL-Erweiterung der ADD VECTOR INDEX-Klausel. Sie können diese Anweisung nicht gleichzeitig mit anderen DDL-Anweisungen für die Tabelle ausführen.

Verwenden Sie die folgende Syntax, um einen Vektorindex mit CREATE VECTOR INDEX zu erstellen:

CREATE
  VECTOR INDEX INDEX_NAME
ON TABLE_NAME(COLUMN_NAME)
USING
  SCANN[QUANTIZER = SQ8]
    DISTANCE_MEASURE
  = L2_SQUARED | COSINE | DOT_PRODUCT[NUM_LEAVES = INT_VALUE { '</var>' }}];

Folgende Indexoptionen sind verfügbar:

  • USING SCANN: Optional. Gibt den zu verwendenden Indextyp an. SCANN ist der einzige unterstützte Wert.
  • QUANTIZER: Optional. Ordnet einen hochdimensionalen Vektor einer komprimierten Darstellung zu. SQ8 ist der einzige unterstützte Wert.
  • DISTANCE_MEASURE: erforderlich. Gibt eine mathematische Formel an, mit der die Ähnlichkeit zweier Vektoren berechnet werden soll. In diesem Parameter muss dieselbe Distanzeinheit festgelegt werden wie in den approx_distance-Suchoptionen. Folgende Literale werden unterstützt:
    • L2_SQUARED
    • COSINE
    • DOT_PRODUCT
  • NUM_LEAVES: Optional. Gibt an, wie viele Partitionen (Blätter) erstellt werden sollen. Ändern Sie diese Einstellung nur, wenn Sie sich gut mit der ANN-Suche und Ihrem Dataset auskennen. Die angegebene Zahl darf nicht größer sein als die Anzahl der Einbettungen in der Basistabelle.

Führen Sie beispielsweise den folgenden Befehl aus, um einen Vektorindex zu erstellen:

CREATE
  VECTOR INDEX vectorIndex
ON dbname.books(embeddings) DISTANCE_MEASURE = L2_SQUARED;

Während die CREATE-Anweisung ausgeführt wird, wird die Basistabelle in den schreibgeschützten Modus versetzt und es sind keine DML-Anweisungen für die Basistabelle zulässig.

Mit der folgenden Syntax können Sie einen Index für eine vorhandene Tabelle erstellen:

ALTER TABLE tbl_name
  ADD VECTOR INDEX index_name(key_part)[index_option];

So erstellen Sie beispielsweise einen Index für eine vorhandene Tabelle:

ALTER TABLE t1 ADD VECTOR INDEX index1(j)
USING SCANN QUANTIZER = SQ8 DISTANCE_MEASURE = l2_squared NUM_LEAVES = 10;

Vektorindex abstimmen

In diesem Abschnitt finden Sie weitere Informationen zu den Parametern, die Sie zum Erstellen des Vektorindex verwenden. Anhand dieser Informationen können Sie den Vektorindex optimieren und den Build-Prozess beeinflussen.

Parameter Beschreibung Default Bereich Auswirkungen
cloudsql_vector_max_mem_size Für das Index-Training zugewiesener Arbeitsspeicher. Variabel Instanz Unzureichender Arbeitsspeicher kann zu Build-Fehlern führen. Weitere Informationen finden Sie unter Speicherzuweisung für Vektorindexe konfigurieren.
innodb_ddl_threads Grad der Parallelität für das Index-Training und den Index-Build. 4 Session Höhere Werte verkürzen die Build-Zeit, erhöhen aber die CPU-Auslastung. Legen Sie diesen Wert auf die Anzahl der CPUs fest, die Sie entbehren können, ohne die Datenbankvorgänge zu beeinträchtigen.

Achten Sie darauf, dass cloudsql_vector_max_mem_size für das Training richtig konfiguriert ist. Passen Sie innodb_ddl_threads an, um die Build-Zeit und die CPU-Last auszugleichen. Berücksichtigen Sie dabei die Auswirkungen auf gleichzeitige Datenbankvorgänge. CPU-Auslastung während des Builds überwachen.

Vektorindex löschen

Verwenden Sie die SQL-Anweisungen DROP INDEX oder ALTER TABLE mit dem Namen des Index, den Sie löschen möchten, wie im Folgenden gezeigt:

DROP INDEX index_name ON books;

ALTER TABLE table_name
DROP INDEX index_name;

Vektorindexe überwachen

Cloud SQL bietet die folgenden Information Schema-Tabellen mit Echtzeitinformationen zu Vektorindexen, die in den Arbeitsspeicher geladen werden:

  • information_schema.innodb_vector_indexes listet alle Vektorindexe auf, die nach dem Neustart im Speicher geöffnet werden.
  • information_schema.innodb_all_vector_indexes listet alle Vektorindexe auf, die in der Instanz vorhanden sind (auch wenn sie noch nicht im Arbeitsspeicher geöffnet sind).
  • information_schema.innodb_vector_indexes_memory enthält Informationen zur gesamten Arbeitsspeichernutzung von Vektorindexen in der Instanz.

Weitere Informationen finden Sie im Informationsschema.

Führen Sie den folgenden Befehl aus, um Informationen in der Tabelle innodb_vector_indexes aufzurufen:

SELECT * FROM information_schema.innodb_vector_indexes \ G;

Die Ausgabe sieht dann ungefähr so aus:

 INDEX_NAME: t1_vec_index
 TABLE_NAME: test.t1
 INDEX_TYPE: TREE_SQ
 DIMENSION: 3
 DIST_MEASURE: COSINE
 STATUS: Ready
 STATE: INDEX_READY_TO_USE
 NUM_LEAVES: 10
 NUM_LEAVES_TO_SEARCH: 10
 QUERIES: 1
 MUTATIONS: 1
 TREE_MEMORY: 443

Nächste Schritte