Pour vous assurer que vos index vectoriels s'adaptent aux modifications susceptibles d'avoir un impact sur la précision de vos résultats de recherche, entretenez-les.
Avant de commencer
Avant de gérer la maintenance des index, installez ou mettez à jour les extensions vector et alloydb_scann :
Si les extensions
vectoretalloydb_scannne sont pas installées, installez-les.CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS alloydb_scann;Si les extensions
vectoretalloydb_scannsont déjà installées, mettez-les à jour.ALTER EXTENSION vector UPDATE; ALTER EXTENSION alloydb_scann UPDATE;
Entretenir les index automatiquement
Vous pouvez laisser AlloyDB gérer automatiquement vos index vectoriels. À mesure que votre ensemble de données s'agrandit, AlloyDB analyse et met à jour les centroïdes, et divise les grandes partitions aberrantes. Cela améliore automatiquement les requêtes par seconde (RPS) et la qualité des résultats de recherche. Toutes les mises à jour automatiques sont permanentes jusqu'à la prochaine exécution de la maintenance.
AlloyDB active la maintenance automatique des index par défaut pour les index ScaNN réglés automatiquement. Si vous souhaitez créer des index ScaNN réglés automatiquement, mais désactiver la maintenance automatique, consultez Désactiver la maintenance automatique pour les index automatiques.
Pour activer la maintenance automatique pour les index créés manuellement, consultez Activer la maintenance automatique lors de la création d'un index.
Activer la maintenance automatique lors de la création d'un index
Pour activer la maintenance automatique lors de la création d'un index, définissez le paramètre auto_maintenance sur on. Par exemple, consultez la commande suivante qui crée un index vectoriel ScaNN.
CREATE INDEX INDEX_NAME ON TABLE_NAME \
USING scann (EMBEDDING_COLUMN_NAME DISTANCE_FUNCTION_NAME) \
WITH (mode='INDEX_MODE', num_leaves=NUM_PARTITIONS, auto_maintenance=on);
Remplacez les variables suivantes :
INDEX_NAME: nom de l'index que vous souhaitez créer. 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.TABLE_NAME: table à laquelle vous souhaitez ajouter l'index.EMBEDDING_COLUMN_NAME: colonne qui stocke les donnéesvectorque vous souhaitez indexer.DISTANCE_FUNCTION_NAME: fonction de distance à utiliser avec cet index. Choisissez l'une des options suivantes :Distance L2 :
l2Produit scalaire :
dot_productDistance de cosinus :
cosine
INDEX_MODE: mode de création de l'index ScaNN. Les valeurs disponibles sont les suivantes :AUTO: AlloyDB gère et règle automatiquement la structure de l'index. La valeurauto_maintenancepar défaut, lorsquemodeest défini surAUTO, eston.MANUAL: gérez et réglez manuellement votre index ScaNN. La valeurauto_maintenancepar défaut, lorsquemodeest défini surMANUAL, estoff.
Pour en savoir plus sur le mode d'index à utiliser, consultez Créer un index ScaNN.
NUM_PARTITIONS: nombre de partitions à appliquer à cet index. Définissez une valeur comprise entre3et1048576. Pour en savoir plus sur la façon de déterminer cette valeur, consultez Régler unScaNNindex.
Configurer la maintenance automatique pour les index existants
Pour configurer la maintenance automatique pour les index manuels existants, exécutez la commande suivante :
ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);
Remplacez les variables suivantes :
INDEX_NAME: nom de l'index que vous souhaitez modifier. Exemple :my_scann_index.AUTOMATIC_MAINTENANCE: activez ou désactivez la maintenance automatique. Pour activer, définissez la valeur suron. Pour désactiver, définissez la valeur suroff.
Augmenter le débit de la maintenance automatique
Pour augmenter le débit de la maintenance automatique, configurez l'
scann.max_background_workers
option de base de données. L'augmentation du nombre de nœuds de calcul en arrière-plan augmente le nombre d'index traités par unité de temps. Cela ne réduit pas le temps de traitement des index individuels. Cette valeur doit être inférieure à la
max_worker_processes
valeur définie pour votre cluster de base de données.
Pour en savoir plus sur la configuration des options de base de données, consultez Configurer les options de base de données d'une instance.
Augmenter le délai de maintenance automatique
Pour augmenter le délai entre les exécutions de maintenance automatique, configurez l'
scann.maintenance_background_naptime_s
option de base de données.
Pour en savoir plus sur la configuration des options de base de données, consultez Configurer les options de base de données d'une instance.
Pourcentage de recherche des partitions
À mesure que le nombre de partitions augmente en raison de la division automatique des grandes partitions aberrantes par AlloyDB, nous vous recommandons d'ajuster le nombre de feuilles que vous recherchez pour maintenir des performances optimales. Pour gérer automatiquement ce nombre, configurez le paramètre scann.pct_leaves_to_search.
scann.pct_leaves_to_search représente le pourcentage de partitions actuelles à rechercher. 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 à la place la valeur définie dans
scann.num_leaves_to_search. Si scann.num_leaves_to_search est également défini sur 0, AlloyDB utilise par défaut 1% des feuilles.
Si vous prévoyez une croissance importante de votre ensemble de données, définissez la valeur initiale sur 1.
Pour définir scann.pct_leaves_to_search, exécutez la commande suivante :
ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;
Remplacez les variables suivantes :
DB_NAME: nom de votre base de données.PERCENTAGE_PARTITIONS_TO_SEARCH: pourcentage de partitions à rechercher.
Appeler manuellement la maintenance des index
Si vous souhaitez appeler manuellement la maintenance d'un index particulier, exécutez la commande suivante :
SELECT scann_index_maintenance('INDEX_NAME');
Remplacez INDEX_NAME par le nom de l'index pour lequel vous souhaitez appeler la maintenance. Exemple : my_scann_index.
Désactiver la maintenance automatique pour les index automatiques
Pour désactiver la maintenance automatique pour les index ScaNN réglés automatiquement, définissez le paramètre auto_maintenance sur OFF lors de la création de l'index. Par exemple, consultez la commande suivante qui crée un index ScaNN réglé automatiquement :
CREATE INDEX similarity_index ON products
USING scann (description_embedding cosine)
WITH (MODE = 'AUTOMATIC', auto_maintenance = 'OFF');
Si vous souhaitez désactiver la maintenance automatique sur un index ScaNN réglé automatiquement existant, consultez Configurer la maintenance automatique pour les index existants.
Recompiler manuellement votre index
Si votre table est sujette à des mises à jour ou des insertions fréquentes, nous vous recommandons de recompiler régulièrement votre index ScaNN pour améliorer sa précision de rappel. Pour en savoir plus sur l'affichage des modifications apportées aux distributions ou mutations vectorielles depuis la création de votre index, consultez Afficher les métriques d'index vectoriel.
Pour recompiler manuellement votre index à l'aide de ses configurations d'origine, exécutez la commande suivante :
REINDEX INDEX CONCURRENTLY INDEX_NAME;
Remplacez INDEX_NAME par le nom de l'index que vous souhaitez recompiler. Exemple : my_scann_index.
Pour en savoir plus sur la réindexation dans PostgreSQL, consultez REINDEX.
Étape suivante
- Créer un index ScaNN
- Métriques d'index vectoriel
- Optimiser les performances des requêtes vectorielles pour ScaNN