En esta página se describe cómo configurar la memoria de los índices vectoriales y cómo crear, optimizar, monitorizar y eliminar índices vectoriales.
Antes de empezar
Antes de crear un índice vectorial, debe cargar datos en la tabla base con valores de inserción vectorial. Tu tabla base debe tener al menos 1000 filas. Si tienes más puntos de datos disponibles, puedes conseguir una mejor partición y entrenamiento del índice.
Configurar la asignación de memoria para índices vectoriales
La marca de base de datos cloudsql_vector_max_mem_size
controla la cantidad de memoria que tu instancia de Cloud SQL dedica a los índices vectoriales. Se trata de una marca estática que requiere que reinicies la instancia. Esta memoria tiene dos finalidades principales:
Almacenar la estructura del índice vectorial: la parte no hoja del índice vectorial (el
TREE_MEMORY
) reside en esta memoria. El tamaño aproximado de este árbol depende del número de nodos hoja (num_leaves
) y de las dimensiones de tus vectores:Approximate TREE_MEMORY = num_leaves * vector dimensions * 4 * 2
Por ejemplo, un índice con 1000 hojas y 768 dimensiones tendría un
TREE_MEMORY
aproximado de 1000 × 768 × 4 × 2, es decir, 6.144.000 bytes. También puedes consultar elTREE_MEMORY
real en la tablainformation_schema.innodb_vector_indexes
. Cloud SQL gestiona esa memoria. No es necesario asignar espacio para todos los índices vectoriales simultáneamente, ya que los índices inactivos se descargan para dejar espacio a otras solicitudes.Memoria para la creación del índice (datos de entrenamiento): durante la creación del índice vectorial, se necesita memoria para procesar una muestra de los datos de la tabla base y crear el índice. Esta memoria solo se usa durante el proceso de creación del índice y se libera después. El tamaño aproximado de la memoria necesaria para el entrenamiento es:
approximate_training_memory = num_rows in base table * 0.1 * 4 * vector dimensions
Por ejemplo, en una tabla con 1.000.000 de filas y 768 dimensiones, el valor de
training_memory
sería 1.000.000 × 0,1 × 768 × 4, es decir, 307.200.000 bytes. Solo se muestrea el 10% de los datos de la tabla base para calcular los centroides del árbol.Cuando habilitas la marca
cloudsql_vector
, Cloud SQL asigna automáticamente un valorcloudsql_vector_max_mem_size
predeterminado en función del tamaño de tu VM. Este valor predeterminado suele ser suficiente para las cargas de trabajo habituales. Cloud SQL reduce la marcainnodb_buffer_pool_size
para asignar esta memoria. El valor máximo predeterminado decloudsql_vector_max_mem_size
es de 16 GB. Si necesitas ajustar el tamaño de la memoria, puedes modificar dinámicamentecloudsql_vector_max_mem_size
en función del uso del índice de vectores.Importante: Si aumentas
cloudsql_vector_max_mem_size
, debes reducirinnodb_buffer_pool_size
en la misma proporción para evitar problemas de memoria.
cloudsql_vector_max_mem_size
valores
Tamaño de la VM | 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 o más | 16 GB |
El intervalo de memoria asignada al índice de vectores es el siguiente:
- 128 MB como mínimo
- 10% del grupo de búferes
- 16 GB como máximo
Puedes ajustar la memoria más adelante, según sea necesario. Para obtener más información, consulta Habilitar la marca de base de datos para las inserciones de vectores.
Para obtener información sobre cómo monitorizar el tamaño de tu índice vectorial, consulta Monitorizar índices vectoriales.
Para actualizar la memoria asignada a los índices vectoriales de la instancia, usa el siguiente comando:
gcloud sql instances patch INSTANCE_NAME \
--database-flags= cloudsql_vector_max_mem_size=NEW_MEMORY_VALUE;
Haz los cambios siguientes:
- INSTANCE_NAME: el nombre de la instancia en la que vas a cambiar la asignación de memoria.
- NEW_MEMORY_VALUE: la asignación de memoria actualizada, en bytes, de tus índices vectoriales.
Este cambio se aplicará de inmediato después de reiniciar la base de datos.
Crear un índice vectorial
Hay dos formas de crear un índice vectorial:
CREATE VECTOR INDEX
statement, una extensión de Cloud SQL de la sintaxis estándar de MySQL.ALTER TABLE
con la extensión de la cláusulaADD VECTOR INDEX
de Cloud SQL. No puedes ejecutar esta instrucción simultáneamente con otras instrucciones DDL en la tabla.
Usa la siguiente sintaxis para crear un índice vectorial con CREATE VECTOR INDEX
:
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>' }}];
Estas son las opciones de índice:
USING SCANN
: opcional. Indica el tipo de índice que se va a usar. SCANN es el único valor admitido.QUANTIZER
: opcional. Asigna un vector de alta dimensión a una representación comprimida. SQ8 es el único valor admitido.DISTANCE_MEASURE
: obligatorio. Especifica una fórmula matemática que se usará para calcular la similitud de dos vectores. En este parámetro, debe definir la misma unidad de medida de distancia que en lasapprox_distance
opciones de búsqueda. Los literales admitidos son los siguientes:L2_SQUARED
COSINE
DOT_PRODUCT
NUM_LEAVES
: opcional. Especifica cuántas particiones (hojas) se van a crear. Solo debes cambiar este ajuste de su valor predeterminado si conoces bien la búsqueda de ANN y tu conjunto de datos. El número especificado no puede ser mayor que el número de inserciones de la tabla base.
Por ejemplo, para crear un índice vectorial, ejecuta lo siguiente:
CREATE
VECTOR INDEX vectorIndex
ON dbname.books(embeddings) DISTANCE_MEASURE = L2_SQUARED;
Mientras se ejecuta la instrucción CREATE
, la tabla base se pone en modo de solo lectura y no se permiten DMLs en la tabla base.
Puede usar la siguiente sintaxis para crear un índice en una tabla:
ALTER TABLE tbl_name
ADD VECTOR INDEX index_name(key_part)[index_option];
Por ejemplo, para crear un índice en una tabla, haz lo siguiente:
ALTER TABLE t1 ADD VECTOR INDEX index1(j)
USING SCANN QUANTIZER = SQ8 DISTANCE_MEASURE = l2_squared NUM_LEAVES = 10;
Ajustar el índice vectorial
En esta sección se ofrece más información sobre los parámetros que se usan para crear el índice vectorial. Para ajustar el índice vectorial, usa esta información para determinar cómo influir en el proceso de compilación.
Parámetro | Descripción | Predeterminado | Ámbito | Impacto |
cloudsql_vector_max_mem_size |
Memoria asignada para el entrenamiento de índices. | Varía | Instancia | Si no hay suficiente memoria, se pueden producir fallos en la compilación. Consulta Configurar la asignación de memoria para índices vectoriales. |
innodb_ddl_threads |
Grado de paralelismo para el entrenamiento y la compilación de índices. | 4 | Sesión | Cuanto más altos sean los valores, menos tiempo se tardará en compilar, pero aumentará la carga de la CPU. Asigna a este valor el número de CPUs que puedas dedicar sin que afecte negativamente a las operaciones de la base de datos. |
Asegúrate de que cloudsql_vector_max_mem_size
esté configurado correctamente para el entrenamiento.
Ajusta innodb_ddl_threads
para equilibrar el tiempo de compilación y la carga de la CPU, teniendo en cuenta el impacto en las operaciones de bases de datos simultáneas. Monitoriza el uso de la CPU durante la compilación.
Eliminar un índice vectorial
Para eliminar un índice vectorial, usa las instrucciones SQL DROP INDEX
o ALTER TABLE
con el nombre del índice que quieras eliminar, como se muestra a continuación:
DROP INDEX index_name ON books;
ALTER TABLE table_name
DROP INDEX index_name;
Monitorizar índices vectoriales
Cloud SQL proporciona las siguientes tablas de esquema de información con información en tiempo real sobre los índices vectoriales que se cargan en su memoria:
information_schema.innodb_vector_indexes
muestra todos los índices vectoriales que se abren en la memoria después de reiniciar.information_schema.innodb_all_vector_indexes
muestra todos los índices vectoriales que hay en la instancia (aunque aún no se hayan abierto en la memoria).information_schema.innodb_vector_indexes_memory
proporciona información sobre el uso general de la memoria de los índices vectoriales de la instancia.
Para obtener información más detallada, consulta el esquema de información.
Para ver la información de la tabla innodb_vector_indexes
, ejecuta el siguiente comando:
SELECT * FROM information_schema.innodb_vector_indexes \ G;
El resultado es similar al siguiente:
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
Siguientes pasos
- Consulta el resumen sobre la búsqueda de vectores en Cloud SQL.
- Consulta cómo habilitar e inhabilitar las inserciones vectoriales en tu instancia.
- Consulta cómo generar incrustaciones vectoriales.
- Consulta cómo realizar búsquedas en incrustaciones de vectores.