Cette page explique comment configurer la mémoire pour les index vectoriels, et comment créer, ajuster, surveiller et supprimer des index vectoriels.
Avant de commencer
Avant de créer un index vectoriel, vous devez charger des données dans la table de base avec des valeurs d'embedding vectoriel. Votre table de base doit contenir au moins 1 000 lignes. Si vous avez davantage de points de données disponibles, vous pouvez améliorer le partitionnement et l'entraînement de l'index.
Configurer l'allocation de mémoire pour les index vectoriels
L'indicateur de base de données cloudsql_vector_max_mem_size
contrôle la quantité de mémoire que votre instance Cloud SQL consacre aux index vectoriels. Il s'agit d'un indicateur statique qui nécessite le redémarrage de votre instance. Ce souvenir a deux objectifs principaux :
Stockage de la structure d'index vectoriel : la partie non feuille de l'index vectoriel (
TREE_MEMORY
) réside dans cette mémoire. La taille approximative de cet arbre dépend du nombre de nœuds feuilles (num_leaves
) et des dimensions de vos vecteurs :Approximate TREE_MEMORY = num_leaves * vector dimensions * 4 * 2
Par exemple, un index avec 1 000 feuilles et 768 dimensions aurait une valeur
TREE_MEMORY
approximative de 1 000 x 768 x 4 x 2, soit 6 144 000 octets. Vous pouvez également vérifier leTREE_MEMORY
réel à l'aide de la tableinformation_schema.innodb_vector_indexes
. Cloud SQL gère cette mémoire. Vous n'avez pas besoin d'allouer de l'espace pour tous les index vectoriels simultanément, car les index inactifs sont déchargés pour faire de la place aux autres requêtes.Mémoire pour la création d'index (données d'entraînement) : lors de la création d'un index vectoriel, de la mémoire est nécessaire pour traiter un échantillon des données de votre table de base afin de créer l'index. Cette mémoire n'est utilisée que pendant le processus de création de l'index et est libérée par la suite. La taille approximative de la mémoire nécessaire pour l'entraînement est la suivante :
approximate_training_memory = num_rows in base table * 0.1 * 4 * vector dimensions
Par exemple, avec un tableau de 1 000 000 de lignes et 768 dimensions, le
training_memory
serait de 1 000 000 * 0,1 * 768 * 4, soit 307 200 000 octets. Seules 10 % des données de la table de base sont échantillonnées pour calculer les centroïdes de l'arbre.Lorsque vous activez l'indicateur
cloudsql_vector
, Cloud SQL définit automatiquement une valeurcloudsql_vector_max_mem_size
par défaut en fonction de la taille de votre VM. Cette valeur par défaut suffit généralement pour les charges de travail classiques. Cloud SQL réduit l'indicateurinnodb_buffer_pool_size
pour allouer cette mémoire. La valeur maximale par défaut pourcloudsql_vector_max_mem_size
est de 16 Go. Si vous devez ajuster la taille de votre mémoire, vous pouvez modifier dynamiquementcloudsql_vector_max_mem_size
en fonction de votre utilisation de l'index vectoriel.Important : Si vous augmentez
cloudsql_vector_max_mem_size
, vous devez diminuerinnodb_buffer_pool_size
en conséquence pour éviter les problèmes de mémoire.
cloudsql_vector_max_mem_size
valeurs
Taille de la VM | cloudsql_vector_max_mem_size |
4GB | 194 Mo |
8 Go | 515 Mo |
16 Go | 1,2 Go |
32 Go | 2,56 Go |
64 Go | 5,12 Go |
128 Go | 10,24 Go |
256 Go ou plus | 16 Go |
La plage de mémoire allouée à l'index vectoriel est la suivante :
- 128 Mo minimum
- 10 % du pool de mémoire tampon
- 16 Go maximum
Vous pourrez ajuster la mémoire plus tard, si nécessaire. Pour en savoir plus, consultez Activer l'option de base de données pour les embeddings vectoriels.
Pour en savoir plus sur la surveillance de la taille de votre index vectoriel, consultez Surveiller les index vectoriels.
Pour mettre à jour la mémoire allouée aux index vectoriels sur l'instance, utilisez la commande suivante :
gcloud sql instances patch INSTANCE_NAME \
--database-flags= cloudsql_vector_max_mem_size=NEW_MEMORY_VALUE;
Remplacez les éléments suivants :
- INSTANCE_NAME : nom de l'instance sur laquelle vous modifiez l'allocation de mémoire.
- NEW_MEMORY_VALUE : allocation de mémoire mise à jour, en octets, pour vos index vectoriels.
Cette modification prend effet immédiatement après le redémarrage de la base de données.
Créer un index vectoriel
Il existe deux façons de créer un index vectoriel :
CREATE VECTOR INDEX
statement, une extension Cloud SQL de la syntaxe MySQL standard.- Instruction
ALTER TABLE
avec l'extension de clauseADD VECTOR INDEX
Cloud SQL. Vous ne pouvez pas exécuter cette instruction simultanément avec d'autres instructions LDD sur la table.
Utilisez la syntaxe suivante pour créer un index vectoriel à l'aide de 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>' }}];
Voici les options d'index :
USING SCANN
: facultatif. Indique le type d'index à utiliser. SCANN est la seule valeur acceptée.QUANTIZER
: facultatif. Mappe un vecteur de grande dimension à une représentation compressée. SQ8 est la seule valeur acceptée.DISTANCE_MEASURE
: obligatoire. Spécifie une formule mathématique à utiliser pour calculer la similarité de deux vecteurs. Vous devez définir la même mesure de distance dans ce paramètre que celle que vous avez définie dans les options de rechercheapprox_distance
. Les littéraux acceptés sont les suivants :L2_SQUARED
COSINE
DOT_PRODUCT
NUM_LEAVES
: facultatif. Indique le nombre de partitions (feuilles) à créer. Ne modifiez ce paramètre par défaut que si vous comprenez bien la recherche ANN et votre ensemble de données. Le nombre spécifié ne peut pas être supérieur au nombre d'intégrations dans la table de base.
Par exemple, pour créer un index vectoriel, exécutez la commande suivante :
CREATE
VECTOR INDEX vectorIndex
ON dbname.books(embeddings) DISTANCE_MEASURE = L2_SQUARED;
Pendant l'exécution de l'instruction CREATE
, la table de base est mise en mode lecture seule et aucune opération LMD n'est autorisée sur la table de base.
Vous pouvez utiliser la syntaxe suivante pour créer un index sur une table existante :
ALTER TABLE tbl_name
ADD VECTOR INDEX index_name(key_part)[index_option];
Par exemple, pour créer un index sur une table existante :
ALTER TABLE t1 ADD VECTOR INDEX index1(j)
USING SCANN QUANTIZER = SQ8 DISTANCE_MEASURE = l2_squared NUM_LEAVES = 10;
Régler l'index vectoriel
Cette section fournit des informations supplémentaires sur les paramètres que vous utilisez pour créer l'index vectoriel. Pour ajuster l'index vectoriel, utilisez ces informations pour déterminer comment influencer le processus de compilation.
Paramètre | Description | Par défaut | Scope (Portée) | Impact |
cloudsql_vector_max_mem_size |
Mémoire allouée à l'entraînement de l'index. | Variable | Instance | Une mémoire insuffisante peut entraîner des échecs de compilation. Consultez Configurer l'allocation de mémoire pour les index vectoriels. |
innodb_ddl_threads |
Degré de parallélisme pour l'entraînement et la création d'index. | 4 | Session | Des valeurs plus élevées réduisent le temps de compilation, mais augmentent la charge du processeur. Définissez cette valeur sur le nombre de processeurs que vous pouvez épargner sans affecter négativement les opérations de base de données. |
Assurez-vous que cloudsql_vector_max_mem_size
est correctement configuré pour l'entraînement.
Ajustez innodb_ddl_threads
pour équilibrer le temps de compilation et la charge du processeur, en tenant compte de l'impact sur les opérations de base de données simultanées. Surveillez l'utilisation du processeur pendant la compilation.
Supprimer un index vectoriel
Pour supprimer un index vectoriel, utilisez les instructions SQL DROP INDEX
ou ALTER TABLE
avec le nom de l'index que vous souhaitez supprimer, comme indiqué ci-dessous :
DROP INDEX index_name ON books;
ALTER TABLE table_name
DROP INDEX index_name;
Surveiller les index vectoriels
Cloud SQL fournit les tables de schéma d'informations suivantes avec des informations en temps réel sur les index vectoriels chargés dans sa mémoire :
information_schema.innodb_vector_indexes
liste tous les index vectoriels ouverts en mémoire après le redémarrage.information_schema.innodb_all_vector_indexes
liste tous les index vectoriels qui existent sur l'instance (même s'ils ne sont pas encore ouverts en mémoire).information_schema.innodb_vector_indexes_memory
fournit des informations sur l'utilisation globale de la mémoire des index vectoriels dans l'instance.
Pour en savoir plus, consultez le schéma d'informations.
Pour afficher des informations dans le tableau innodb_vector_indexes
, exécutez la commande suivante :
SELECT * FROM information_schema.innodb_vector_indexes \ G;
La sortie ressemble à ceci :
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
Étapes suivantes
- Consultez la présentation de la recherche vectorielle sur Cloud SQL.
- Découvrez comment activer et désactiver les embeddings vectoriels sur votre instance.
- Découvrez comment générer des embeddings vectoriels.
- Découvrez comment effectuer des recherches sur les embeddings.