Chapitre 42. Présentation des mécanismes internes de PostgreSQL

Table des matières
42.1. Chemin d'une requête
42.2. Moyens pour établir des connexions
42.3. Étape d'analyse
42.3.1. Analyseur
42.3.2. Processus de transformation
42.4. Système de règles de PostgreSQL
42.5. Planificateur/Optimiseur
42.6. Exécuteur

Auteur : Ce chapitre vient originellement de Enhancement of the ANSI SQL Implementation of PostgreSQL, la thèse de Stefan Simkovics préparée à l'université de technologie de Vienne sous la direction du Dr. Georg Gottlob et de son assistante Katrin Seyr.

Ce chapitre présente la structure interne du serveur PostgreSQL. Après avoir lu les sections suivantes, vous devriez avoir une idée sur la façon dont une requête est exécutée. Ce chapitre n'a pas pour but de donner une description détaillée des opérations internes de PostgreSQL car un tel document serait énorme. À la place, ce chapitre a pour but d'aider le lecteur à comprendre la suite générale des opérations arrivant au niveau serveur à partir du moment où une requête est reçue jusqu'au moment où les résultats sont renvoyés au client.

42.1. Chemin d'une requête

Ici, nous allons donner un rapide aperçu des étapes qu'une requête doit franchir pour obtenir un résultat.

  1. Une connexion doit être établie à partir d'une application au serveur PostgreSQL. L'application transmet une requête au serveur et attend de recevoir les résultats renvoyés par le serveur.

  2. L'étape de l'analyse vérifie la requête transmise par l'application au niveau de la syntaxe et crée un arbre représentant la requête.

  3. Le système de réécriture prend l'arbre représentant la requête et cherche les règles (stockées dans les catalogues système) à appliquer à l'arbre de la requête. Il exécute les transformations données dans les corps des règles. Une application du système de réécriture est la réalisation des vues.

    À chaque fois qu'une requête comprenant une vue (c'est-à-dire une table virtuelle) est exécutée, le système de réécriture modifie la requête de l'utilisateur par la définition de la vue, c'est-à-dire une requête qui accède aux tables de base.

  4. Le planificateur/optimiseur prend l'arbre (réécrit) de la requête et crée un plan d'exécution qui sera l'entrée de l'exécuteur.

    Il le fait tout d'abord en créant tous les chemins possibles menant au même résultat. Par exemple, s'il existe un index sur une relation à parcourir, il existe deux chemins pour le parcours. Une possibilité est un parcours simple séquentiel et l'autre possibilité est d'utiliser l'index. Ensuite, le coût pour l'exécution de chaque plan est estimé et le plan le moins coûteux est choisi et renvoyé.

  5. L'exécuteur passe récursivement dans l'arbre constitué par le plan et retrouve les lignes suivant la façon représentée par le plan. L'exécuteur fait usage du système de stockage lors du parcours des relations, exécute les tris et jointures, évalue les qualifications et finalement renvoie les lignes en question.

Dans les sections suivantes, nous allons parler de chacun des éléments discutés ci-dessus avec plus de détails pour donner une meilleure compréhension des structures de données et de contrôle internes de PostgreSQL.