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 indice vectoriel, vous devez charger des données dans la table de base avec des valeurs d'encapsulation vectorielle. Votre table de base doit contenir au moins 1 000 lignes. Si vous avez davantage de points de données disponibles, vous pouvez obtenir un meilleur partitionnement et un meilleur 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 un redémarrage de votre instance. Cette mémoire a deux fonctions principales:
Stockage de la structure de l'index vectoriel:la partie non feuille de l'index vectoriel (
TREE_MEMORY
) se trouve dans cette mémoire. La taille approximative de cet arbre dépend du nombre de nœuds de feuille (num_leaves
) et des dimensions de vos vecteurs:Approximate TREE_MEMORY = num_leaves * vector dimensions * 4 * 2
Par exemple, un indice 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 l'TREE_MEMORY
réelle à l'aide du tableauinformation_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 libérer de l'espace pour d'autres requêtes.Mémoire pour la création d'index (données d'entraînement) : lors de la création d'un indice 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 à l'entraînement est la suivante:
approximate_training_memory = num_rows in base table * 0.1 * 4 * vector dimensions
Par exemple, avec une table de 1 000 000 lignes et 768 dimensions,
training_memory
sera de 1 000 000 * 0,1 * 768 * 4, soit 307 200 000 octets. Seuls 10% des données de la table de base sont échantillonnés pour calculer les centroïdes de l'arborescence.Lorsque vous activez l'indicateur
cloudsql_vector
, Cloud SQL définit automatiquement uncloudsql_vector_max_mem_size
par défaut en fonction de la taille de votre VM. Cette valeur par défaut est généralement suffisante pour les charges de travail standards. 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 ajuster 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 réduireinnodb_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 la section Activer l'indicateur de base de données pour les embeddings vectoriels.
Pour en savoir plus sur la surveillance de la taille de votre index vectoriel, consultez la page 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 indice vectoriel:
- Instruction
CREATE VECTOR INDEX
, une extension Cloud SQL de la syntaxe MySQL standard. - Instruction
ALTER TABLE
avec l'extension de la clauseADD VECTOR INDEX
de Cloud SQL. Vous ne pouvez pas exécuter cette instruction simultanément avec d'autres instructions LDD sur la table.
Pour créer un indice vectoriel à l'aide de CREATE VECTOR INDEX
, utilisez la syntaxe suivante:
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'indexation:
USING SCANN
: facultatif. Indique le type d'index à utiliser. SCANN est la seule valeur acceptée.QUANTIZER
: facultatif. Mappe un vecteur à haute 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
. Voici les littéraux acceptés :L2_SQUARED
COSINE
DOT_PRODUCT
NUM_LEAVES
: facultatif. Spécifie le nombre de partitions (feuilles) à créer. Ne modifiez ce paramètre que si vous avez une bonne compréhension de la recherche ANN et de votre ensemble de données. Le nombre spécifié ne peut pas être supérieur au nombre d'embeddings dans la table de base.
Par exemple, pour créer un indice 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 indice 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 de vecteur. 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 pour l'entraînement de l'index. | Variable | Instance | Une mémoire insuffisante peut entraîner des échecs de compilation. Consultez la section 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 économiser sans nuire aux opérations de la 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 indice 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 dans la mémoire après le redémarrage.information_schema.innodb_all_vector_indexes
liste tous les index de vecteurs qui existent sur l'instance (même s'ils ne sont pas encore ouverts dans la 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 les informations de la table 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
Étape suivante
- Consultez la présentation de la recherche vectorielle dans 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 des embeddings vectoriels.