Gérer les index vectoriels

Sélectionnez une version de la documentation :

Pour vous assurer que vos index vectoriels s'adaptent aux changements susceptibles d'avoir un impact sur la précision de vos résultats de recherche, veillez à les tenir à jour.

Avant de commencer

Avant de gérer la maintenance des index, installez ou mettez à jour les extensions vector et alloydb_scann :

  • Si les extensions vector et alloydb_scann ne sont pas installées, installez-les.

    CREATE EXTENSION IF NOT EXISTS vector;
    CREATE EXTENSION IF NOT EXISTS alloydb_scann;
    
  • Si les extensions vector et alloydb_scann sont déjà installées, mettez-les à jour.

    ALTER EXTENSION vector UPDATE;
    ALTER EXTENSION alloydb_scann UPDATE;
    

Gérer les index automatiquement

Vous pouvez laisser AlloyDB Omni gérer automatiquement vos index vectoriels. À mesure que votre ensemble de données s'agrandit, AlloyDB Omni analyse et met à jour les centroïdes, et divise les grandes partitions de valeurs aberrantes. Cela améliore automatiquement le nombre de requêtes par seconde (RPS) et la qualité des résultats de recherche. Toutes les mises à jour automatiques sont permanentes jusqu'à la prochaine opération de maintenance.

AlloyDB Omni permet 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 des 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'index

Pour activer la maintenance automatique lors de la création de l'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ées vector que vous souhaitez indexer.

  • DISTANCE_FUNCTION_NAME : fonction de distance à utiliser avec cet index. Choisissez l'une des options suivantes :

    • Distance L2 : l2

    • Produit scalaire : dot_product

    • Distance de cosinus : cosine

  • INDEX_MODE : mode de création de l'index ScaNN. Les valeurs disponibles sont les suivantes :

    • AUTO : AlloyDB Omni gère et ajuste automatiquement la structure de l'index. La valeur auto_maintenance par défaut, lorsque mode est défini sur AUTO, est on.

    • MANUAL : gérez et ajustez manuellement votre index ScaNN. La valeur par défaut de auto_maintenance, lorsque mode est défini sur MANUAL, est off.

    Pour savoir quel mode d'index utiliser, consultez Créer un index ScaNN.

  • NUM_PARTITIONS : nombre de partitions à appliquer à cet index. Définissez une valeur comprise entre 3 et 1048576. Pour savoir comment déterminer cette valeur, consultez Régler un index ScaNN.

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 : active ou désactive la maintenance automatique. Pour l'activer, définissez la valeur sur on. Pour le désactiver, définissez la valeur sur off.

Augmenter le débit de la maintenance automatique

Pour augmenter le débit de la maintenance automatique, configurez l'indicateur de base de données scann.max_background_workers. Augmenter le nombre de nœuds de calcul en arrière-plan permet d'accroître 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 valeur max_worker_processes définie pour votre cluster de bases de données.

Pour en savoir plus sur la configuration des options de base de données, consultez Configurer des paramètres de base de données.

Augmenter le délai de maintenance automatique

Pour augmenter le délai entre les exécutions de maintenance automatiques, configurez l'indicateur de base de données scann.maintenance_background_naptime_s.

Pour en savoir plus sur la configuration des options de base de données, consultez Configurer des paramètres de base de données.

Pourcentage de partitions de recherche

Étant donné que le nombre de partitions augmente à mesure qu'AlloyDB Omni divise automatiquement les grandes partitions aberrantes, 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, qui désactive ce paramètre et utilise la valeur définie dans scann.num_leaves_to_search à la place. Si scann.num_leaves_to_search est également défini sur 0, AlloyDB Omni utilise par défaut 1% feuilles.

Si vous pensez que votre ensemble de données va croître de manière significative, 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 de l'index

Si vous souhaitez appeler manuellement la maintenance sur un index particulier, exécutez la commande suivante :

SELECT scann_index_maintenance('INDEX_NAME');

Remplacez INDEX_NAME par le nom de l'index sur 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 des 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 existant réglé automatiquement, 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 reconstruire régulièrement votre index ScaNN pour améliorer la précision du rappel. Pour savoir comment afficher les modifications apportées aux distributions ou aux mutations de vecteurs depuis la création de votre index, consultez Afficher les métriques d'index vectoriel.

Pour reconstruire 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 recréer. Exemple :my_scann_index

Pour en savoir plus sur la réindexation dans PostgreSQL, consultez REINDEX.

Étapes suivantes