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:
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ächlichenTREE_MEMORY
auch in der Tabelleinformation_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.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ürcloudsql_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 Flaginnodb_buffer_pool_size
, um diesen Arbeitsspeicher zuzuweisen. Der Standardhöchstwert fürcloudsql_vector_max_mem_size
beträgt 16 GB. Wenn Sie die Größe des Speichers anpassen müssen, können Siecloudsql_vector_max_mem_size
dynamisch an die Nutzung Ihres Vektorindex 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 |
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 derADD 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 denapprox_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
- Übersicht über die Vektorsuche in Cloud SQL
- Informationen zum Aktivieren und Deaktivieren von Vektoreinbettungen in Ihrer Instanz
- Vektoreinbettungen generieren
- Informationen zum Suchen nach Vektoreinbettungen