Présentation de la pré-extraction d'index

AlloyDB pour PostgreSQL utilise la prélecture d'index pour accélérer les requêtes qui lisent une plage de lignes via un index d'arbre B. La prélecture d'index est activée par défaut sur les instances AlloyDB et AlloyDB Omni qui exécutent PostgreSQL 17 et versions ultérieures. Vous n'avez pas besoin de définir d'options, de recompiler des index, ni de modifier votre application ou vos requêtes SQL pour en bénéficier.

Fonctionnement du préchargement d'index

Lorsqu'une requête analyse une plage de valeurs via un index (par exemple, un prédicat BETWEEN ou une clause ORDER BY ... LIMIT sur une colonne indexée), l'analyse lit les pages d'index et les pages de table vers lesquelles pointent les entrées d'index. Ces pages de table sont souvent dispersées dans l'espace de stockage. Dans PostgreSQL standard, l'analyse lit ces pages une par une. Par conséquent, lorsque les pages ne sont pas déjà en mémoire, la requête passe la majeure partie de son temps à attendre les E/S de stockage.

Avec le préchargement d'index, AlloyDB anticipe l'analyse en cours sur l'index et la table, et lit en parallèle les pages dont l'analyse aura besoin. AlloyDB prépare les pages pré-récupérées dans le cache SSD local de l'instance. Ainsi, lorsque l'analyse demande une page, celle-ci est diffusée à partir d'un stockage local rapide plutôt que d'un stockage distant. Les pages préchargées sont stockées en dehors des tampons partagés PostgreSQL. Le préchargement ne réduit donc pas le cache de tampon disponible pour les autres sessions.

La prélecture d'index inclut les mesures de protection suivantes afin de ne pas ajouter de surcharge aux requêtes qui ne peuvent pas en bénéficier :

  • La prélecture s'arrête à la limite d'une clause LIMIT. L'analyse ne lit donc pas les pages au-delà des lignes renvoyées par la requête.
  • Pour les analyses d'index uniquement sur les index de couverture, AlloyDB ne précharge que les pages d'index et ne lit pas les pages de table.
  • Les requêtes qui renvoient une seule ligne, telles que les recherches de clé primaire, ne déclenchent pas de préchargement.

Avantages pour les charges de travail

La prélecture d'index est particulièrement utile lorsque votre ensemble de travail est plus volumineux que la mémoire de l'instance et que vos requêtes lisent de nombreuses lignes via un index B-tree. Voici des exemples de requêtes qui en bénéficient :

  • Requêtes de plage sur des colonnes de code temporel, de date ou numériques indexées, telles que des rapports sur une période donnée.
  • Requêtes qui renvoient de nombreuses lignes pour une clé, comme l'historique des commandes d'un client.
  • Jointures où le côté interne est une analyse d'index qui renvoie de nombreuses lignes.
  • Requêtes analytiques qui lisent de grandes plages de tables orientées lignes.

Les requêtes dont les données se trouvent déjà dans des tampons partagés et les recherches sur une seule ligne s'exécutent de la même manière avec ou sans préchargement.

Prérécupération dans les plans d'exécution

Pour voir l'effet de la prélecture d'index sur une requête, exécutez la requête avec EXPLAIN (ANALYZE, BUFFERS). Les pages que la prélecture charge dans le cache SSD local apparaissent sous forme de nombres ultra fast cache hit sur les nœuds d'analyse d'index du plan. Pour en savoir plus sur la lecture de ces compteurs, consultez Obtenir et analyser des plans d'exécution.

Étapes suivantes