Auf dieser Seite wird beschrieben, wie Sie den Arbeitsspeicher für Vektorindexe konfigurieren und Vektorindexe erstellen, optimieren, überwachen und löschen.
Hinweise
Bevor Sie einen Vektorindex erstellen, müssen Sie Daten mit Vektor-Embedding-Werten in die Basistabelle laden. Die Basistabelle muss mindestens 1.000 Zeilen enthalten. Je mehr Datenpunkte verfügbar sind, desto besser können Indexpartitionierung und -training erfolgen.
Arbeitsspeicherzuweisung für Vektorindexe konfigurieren
Mit dem Datenbank-Flag cloudsql_vector_max_mem_size
wird festgelegt, wie viel Arbeitsspeicher Ihrer Cloud SQL-Instanz für Vektorindexe reserviert wird. Dies ist ein statisches Flag, für das die Instanz neu gestartet werden muss. Dieser Speicher dient zwei Hauptzwecken:
Vektorindexstruktur speichern:Der nicht untergeordnete Teil des Vektorindexes (
TREE_MEMORY
) befindet sich in diesem Speicher. Die ungefähre Größe dieses Baums hängt von der Anzahl der Blätterknoten (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 hat beispielsweise eine ungefähre
TREE_MEMORY
von 1.000 × 768 × 4 × 2 = 6.144.000 Byte. Sie können den tatsächlichenTREE_MEMORY
auch in der Tabelleinformation_schema.innodb_vector_indexes
prüfen. Cloud SQL verwaltet diesen Arbeitsspeicher. Sie müssen nicht gleichzeitig Speicherplatz für alle Vektorindexe zuweisen, da inaktive Indexe ausgelagert werden, um Platz für andere Anfragen zu schaffen.Speicher für die Indexerstellung (Trainingsdaten): Beim Erstellen des Vektorindexes ist Arbeitsspeicher erforderlich, um eine Stichprobe der Daten aus der Basistabelle zu verarbeiten und den Index zu erstellen. Dieser Arbeitsspeicher wird nur während des Indexerstellungsprozesses verwendet und danach wieder freigegeben. Die ungefähre Größe des für das Training erforderlichen Arbeitsspeichers beträgt:
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ürde
training_memory
beispielsweise 1.000.000 * 0,1 * 768 * 4 = 307.200.000 Byte betragen. Für die Berechnung der Centroide für den Baum werden nur 10% der Daten der Basistabelle abgetastet.Wenn Sie das Flag
cloudsql_vector
aktivieren, wird in Cloud SQL automatisch eine Standard-cloudsql_vector_max_mem_size
basierend auf der Größe Ihrer VM festgelegt. Diese Standardeinstellung ist in der Regel für typische Arbeitslasten ausreichend. Cloud SQL reduziert dasinnodb_buffer_pool_size
-Flag, um diesen Arbeitsspeicher zuzuweisen. Der Standardmaximalwert fürcloudsql_vector_max_mem_size
ist 16 GB. Wenn Sie die Größe des Arbeitsspeichers optimieren möchten, können Siecloudsql_vector_max_mem_size
dynamisch anhand der Nutzung des Vektorindexes anpassen.Wichtig: Wenn Sie
cloudsql_vector_max_mem_size
erhöhen, müssen Sieinnodb_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 |
Über 256 GB | 16 GB |
Der Bereich des zugewiesenen Vektorindexspeichers ist:
- Mindestens 128 MB
- 10% des Pufferpools
- Maximal 16 GB
Sie können den Arbeitsspeicher später nach Bedarf anpassen. Weitere Informationen finden Sie unter Datenbank-Flag für Vektor-Ebenen aktivieren.
Informationen zum Überwachen der Größe Ihres Vektorindexes finden Sie unter Vektorindexe überwachen.
Verwenden Sie den folgenden Befehl, um den für Vektorindizes 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 Arbeitsspeicherzuweisung in Byte für Ihre Vektorindexe.
Diese Änderung tritt sofort nach einem Datenbankneustart in Kraft.
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-KlauselerweiterungADD VECTOR INDEX
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 wird. In diesem Parameter muss dieselbe Entfernungseinheit festgelegt werden wie in den Suchoptionen fürapprox_distance
. 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 mit der ANN-Suche und Ihrem Datenpool 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 DMLs 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 optimieren
In diesem Abschnitt finden Sie weitere Informationen zu den Parametern, mit denen Sie den Vektorindex erstellen. Verwenden Sie diese Informationen, um den Build-Prozess zu optimieren.
Parameter | Beschreibung | Default | Bereich | Auswirkungen |
cloudsql_vector_max_mem_size |
Arbeitsspeicher, der für das Indextraining zugewiesen ist. | Variabel | Instanz | Unzureichender Arbeitsspeicher kann zu Build-Fehlern führen. Weitere Informationen finden Sie unter Arbeitsspeicherzuweisung für Vektorindexe konfigurieren. |
innodb_ddl_threads |
Grad der Parallelität für das Indextraining und den Indexaufbau. | 4 | Session | Höhere Werte verkürzen die Buildzeit, erhöhen aber die CPU-Auslastung. Legen Sie diesen Wert auf die Anzahl der CPUs fest, die Sie freigeben können, ohne die Datenbankvorgänge zu beeinträchtigen. |
Prüfen Sie, ob cloudsql_vector_max_mem_size
für das Training richtig konfiguriert ist.
Passen Sie innodb_ddl_threads
an, um die Buildzeit und die CPU-Auslastung auszubalancieren. Berücksichtigen Sie dabei die Auswirkungen auf gleichzeitige Datenbankvorgänge. Beobachten Sie die CPU-Auslastung während des Builds.
Vektorindex löschen
Wenn Sie einen Vektorindex löschen möchten, verwenden Sie die SQL-Anweisungen DROP INDEX
oder ALTER TABLE
mit dem Namen des Index, den Sie löschen möchten, wie unten gezeigt:
DROP INDEX index_name ON books;
ALTER TABLE table_name
DROP INDEX index_name;
Vektorindexe beobachten
Cloud SQL stellt die folgenden Tabellen des Informationsschemas mit Echtzeitinformationen zu Vektorindexen bereit, die in den Arbeitsspeicher geladen werden:
information_schema.innodb_vector_indexes
listet alle Vektorindexe auf, die nach dem Neustart im Arbeitsspeicher 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 Gesamtspeichernutzung 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
- Übersicht über die Vektorsuche in Cloud SQL
- Informationen zum Aktivieren und Deaktivieren von Vektoreinbettungen in Ihrer Instanz
- Weitere Informationen zum Generieren von Vektoreinbettungen
- Weitere Informationen zum Suchen in Vektoreinbettungen