Gérer les index vectoriels

Cette page décrit les options permettant de gérer vos index vectoriels. La maintenance des index permet de s'assurer qu'ils s'adaptent aux modifications de données susceptibles d'affecter la précision de vos résultats de recherche. Utilisez les stratégies décrites sur cette page pour éviter la dégradation des performances des requêtes à mesure que votre ensemble de données augmente.

Afficher les métriques de l'index vectoriel

Si votre table est sujette à des mises à jour ou des insertions fréquentes, nous vous recommandons de réindexer régulièrement l'index ScaNN existant afin d'améliorer la précision de la récupération de votre index. Vous pouvez surveiller les métriques de l'index pour afficher les modifications apportées aux distributions ou aux mutations de vecteurs depuis la création de l'index, puis réindexer en conséquence.

Pour en savoir plus sur les métriques, consultez Afficher les métriques de l'index vectoriel.

Gérer automatiquement les index

Vous pouvez utiliser l'option de base de données scann.enable_index_maintenance Grand Unified Configuration (GUC) avec le paramètre auto_maintenance au niveau de l'index lors de la création d'un index ScaNN. L'utilisation conjointe de ces paramètres permet à AlloyDB de gérer l'index de manière incrémentielle et de diviser de grandes partitions d'écarts au fur et à mesure que votre ensemble de données augmente. En divisant les partitions, AlloyDB tente d'améliorer les requêtes par seconde (RPS) et les résultats de recherche.

Les mises à jour d'index de maintenance automatique persistent jusqu'à ce qu'AlloyDB mette à jour l'index à nouveau.

Pour permettre à AlloyDB de gérer automatiquement un indice, ajoutez l'extension alloydb_scann au paramètre shared_preload_libraries, activez l'indicateur de base de données scann.enable_index_maintenance, puis chargez l'extension alloydb_scann en redémarrant la base de données:

  1. Chargez l'extension alloydb_scann dans la liste shared_preload_libraries:

    sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,alloydb_scann'|" DATA_DIR/postgresql.conf
  2. Vérifiez que la configuration du paramètre est correctement définie:

    grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
  3. Activez l'option scann.enable_index_maintenance dans le fichier postgresql.conf:

    scann.enable_index_maintenance = ON
  4. Redémarrez AlloyDB Omni pour que la modification du paramètre prenne effet:

    Docker

     docker container restart CONTAINER_NAME

    Remplacez CONTAINER_NAME par le nom que vous avez attribué au conteneur AlloyDB Omni lorsque vous l'avez démarré.

    Podman

     podman container restart CONTAINER_NAME

    Remplacez CONTAINER_NAME par le nom que vous avez attribué au conteneur AlloyDB Omni lorsque vous l'avez démarré.

Après avoir activé l'indicateur scann.enable_index_maintenance, vous pouvez activer la maintenance automatique des index ou la fonction scann_index_maintenance pour appeler manuellement la maintenance.

Activer la maintenance automatique lors de la création de l'index

Pour créer un indice ScaNN avec la maintenance automatique activée, exécutez l'exemple de commande suivant:

CREATE INDEX INDEX_NAME ON TABLE
  USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
  WITH (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 exemple, my-scann-index) Les noms d'index sont partagés dans 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ées vector.

  • 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 indice. Définissez cette valeur sur une valeur comprise entre 1 et 1048576. Pour en savoir plus sur la détermination de cette valeur, consultez la section Configurer un indice ScaNN.

Invoquer manuellement la maintenance

Si vous souhaitez appeler la maintenance d'un indice particulier à la demande, exécutez la commande suivante:

SELECT AS scann_index_maintenance('INDEX_NAME');

Gérer les feuilles pour rechercher automatiquement les partitions fractionnées

Si vous avez activé la maintenance automatique des index, AlloyDB divise automatiquement les partitions lorsque le seuil num_leaves est atteint. À mesure que le nombre de partitions augmente en raison de ces divisions, 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 prévoyez que votre ensemble de données va considérablement augmenter, 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 de num_leaves à rechercher.

Recompiler manuellement votre index

Vous pouvez recréer manuellement votre index si vous souhaitez le recréer 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 reconstruire (par exemple, my-scann-index). Les noms d'index sont partagés dans 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 le réindexage dans PostgreSQL, consultez REINDEX.

Étape suivante