Cette page décrit les options permettant de gérer les index vectoriels. La maintenance des index permet de s'assurer qu'ils s'adaptent aux modifications de données susceptibles d'avoir un impact sur la précision de vos résultats de recherche. Utilisez les stratégies de cette page pour éviter la dégradation des performances des requêtes à mesure que votre ensemble de données augmente.
Avant de commencer
Installez ou mettez à jour les extensions
vector
etalloydb_scann
.Si les extensions
vector
etalloydb_scann
ne sont pas installées, installez les dernières versions des extensions.CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS alloydb_scann;
Si les extensions
vector
etalloydb_scann
sont déjà installées, mettez-les à niveau vers la dernière version.ALTER EXTENSION vector UPDATE; ALTER EXTENSION alloydb_scann UPDATE;
Afficher les métriques d'index vectoriel
Si votre table est sujette à des mises à jour ou des insertions fréquentes, nous vous recommandons de réindexer périodiquement l'index ScaNN existant afin d'améliorer la précision du rappel pour votre index. Vous pouvez surveiller les métriques d'index pour afficher les modifications apportées aux distributions ou aux mutations de vecteurs depuis la création de l'index, puis le réindexer en conséquence.
Pour en savoir plus sur les métriques, consultez Afficher les métriques d'index vectoriel.
Gérer les index automatiquement
La fonctionnalité de maintenance automatique des index permet à AlloyDB de gérer les index de manière incrémentielle. Ainsi, à mesure que votre ensemble de données augmente, AlloyDB analyse et met à jour en continu les centroïdes et divise les grandes partitions de valeurs aberrantes. Cela permet de maintenir l'index pour des requêtes par seconde (RPS) comparables et la qualité des résultats de recherche. Toutes les modifications apportées par la maintenance automatique sont permanentes jusqu'à la prochaine exécution de la maintenance.
Vous pouvez utiliser l'indicateur de base de données scann.enable_preview_features
(GUC) avec le paramètre auto_maintenance
au niveau de l'index lorsque vous créez un index ScaNN pour activer la maintenance automatique des index ScaNN.
La fonctionnalité de maintenance automatique des index est activée par défaut pour les index ScaNN à réglage automatique. Pour les index créés manuellement, après avoir activé l'indicateur scann.enable_preview_features
, vous pouvez définir le paramètre auto_maintenance
lors de la création de l'index ou utiliser la fonction scann_index_maintenance
pour déclencher la maintenance automatique de l'index à la demande.
Pour permettre à AlloyDB de gérer automatiquement un index, activez l'indicateur scann.enable_preview_features
:
gcloud alloydb instances update INSTANCE_ID \
--database-flags scann.enable_preview_features=on \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID
Remplacez les éléments suivants :
INSTANCE_ID
: ID de l'instanceREGION_ID
: région où se trouve l'instance (par exemple,us-central1
).CLUSTER_ID
: ID du cluster dans lequel l'instance est placée.PROJECT_ID
: ID du projet dans lequel le cluster est placé.
Toutes les modifications apportées à l'index à la suite de la maintenance automatique sont permanentes jusqu'à ce qu'AlloyDB mette à jour l'index à nouveau.
Activer la maintenance automatique lors de la création d'un index
Pour créer un index ScaNN manuel avec la maintenance automatique des index activée, exécutez l'exemple de commande suivant :
CREATE INDEX INDEX_NAME ON TABLE \
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION) \
WITH (mode=MANUAL, num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);
Remplacez les éléments suivants :
INDEX_NAME
: nom de l'index que vous souhaitez créer, par exemplemy-scann-index
. Les noms d'index sont partagés dans toute votre base de données. Assurez-vous que chaque nom d'index est unique pour chaque table de votre base de données.TABLE
: table à laquelle ajouter l'index.EMBEDDING_COLUMN
: colonne qui stocke les donnéesvector
.DISTANCE_FUNCTION
: fonction de distance à utiliser avec cet index. Choisissez l'une des options suivantes :Distance L2 :
l2
Produit scalaire :
dot_product
Distance de cosinus :
cosine
NUM_LEAVES_VALUE
: nombre de partitions à appliquer à cet index. Définissez une valeur comprise entre 1 et 1 048 576. Pour savoir comment déterminer cette valeur, consultez Régler un indexScaNN
.
Vous pouvez augmenter le débit de la maintenance automatique des index sur plusieurs index en configurant l'indicateur de base de données scann.max_background_workers
. Augmenter le nombre de nœuds de calcul augmente le nombre d'index traités par unité de temps, mais ne réduit pas le temps de traitement d'un seul index. Vous pouvez également définir l'indicateur de base de données scann.maintenance_background_naptime_s
pour contrôler le délai minimal entre les exécutions de maintenance automatique des index.
Configurer pct_leaves_to_search
pour la maintenance automatique des index
Si vous avez activé la maintenance automatique des index, AlloyDB fractionne automatiquement les partitions en fonction d'heuristiques (par exemple, en fractionnant les grandes partitions aberrantes qui dépassent une certaine taille). À mesure que le nombre de partitions augmente en raison de ces fractionnements, vous devez ajuster le nombre de feuilles à rechercher pour maintenir des performances optimales.
Pour gérer automatiquement le nombre de feuilles à rechercher, utilisez pct_leaves_to_search
. Ce paramètre vous permet de spécifier un pourcentage du nombre de partitions à rechercher. Si vous pensez que votre ensemble de données va croître de manière significative, commencez par définir la valeur pct_leaves_to_search
sur 1. Ce paramètre est désactivé par défaut.
Définissez cette valeur sur le pourcentage du nombre actuel de partitions. Par exemple, pour rechercher 1 % du nombre actuel de partitions, définissez cette valeur sur 1
.
Vous pouvez définir ce paramètre sur n'importe quelle valeur comprise entre 0
et 100
.
La valeur par défaut est 0
, ce qui désactive ce paramètre et utilise scann.num_leaves_to_search
pour calculer le nombre de feuilles à rechercher.
Pour définir l'indicateur pct_leaves_to_search
sur votre base de données, exécutez la commande suivante :
ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;
Remplacez les éléments suivants :
DATABASE_NAME
: nom de la base de données.PERCENTAGE_LEAVES_TO_SEARCH
: pourcentage denum_leaves
à rechercher.
Appeler manuellement la maintenance de l'index
Si vous souhaitez appeler la maintenance d'un index particulier à la demande, exécutez la commande suivante. Cette fonction est disponible dans la version 0.1.2
ou ultérieure de alloydb_scann
.
Pour utiliser cette fonction, vous devez d'abord activer l'indicateur scann.enable_preview_features
, comme décrit dans Gérer les index automatiquement.
SELECT scann_index_maintenance('INDEX_NAME');
Recompiler manuellement votre index
Vous pouvez reconstruire manuellement votre index si vous souhaitez le reconstruire avec les configurations que vous avez spécifiées lors de sa création.
Pour reconstruire manuellement votre index, exécutez la commande suivante :
REINDEX INDEX CONCURRENTLY INDEX_NAME;
Remplacez INDEX_NAME
par le nom de l'index que vous souhaitez recréer (par exemple, my-scann-index
). Les noms d'index sont partagés dans toute votre base de données. Assurez-vous que chaque nom d'index est unique pour chaque table de votre base de données.
Pour en savoir plus sur la réindexation dans PostgreSQL, consultez REINDEX.