Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Chapitre 40. Pr�sentation des m�canismes internes de PostgreSQL | Avance rapide | Suivant |
L'ex�cuteur prend le plan envoy� par le planificateur/optimiseur et l'ex�cute r�cursivement pour extraire l'ensemble requis de lignes. Il s'agit principalement d'un m�canisme de pipeline en demande-envoi. Chaque fois qu'un nœud du plan est appel�, il doit apporter une ligne suppl�mentaire ou indiquer qu'il a fini d'envoyer des lignes.
Pour donner un exemple concret, supposons que le nœud sup�rieur soit un nœud MergeJoin. Avant de pouvoir faire une fusion, deux lignes doivent �tre r�cup�r�es (une pour chaque sous-plan). L'ex�cuteur s'appelle donc r�cursivement pour ex�cuter les sous-plans (en commen�ant par le sous-plan attach� � l'arbre gauche). Le nouveau nœud sup�rieur (le nœud sup�rieur du sous-plan gauche) est, disons, un nœud Sort (NdT : Tri) et un appel r�cursif est une nouvelle fois n�cessaire pour obtenir une ligne en entr�e. Le nœud fils de Sort pourrait �tre un nœud SeqScan, repr�sentant la lecture r�elle d'une table. L'ex�cution de ce nœud fait que l'ex�cuteur r�cup�re une ligne � partir de la table et la renvoie au nœud appelant. Le nœud Sort appellera de fa�on r�p�t�e son fils pour obtenir toutes les lignes � trier. Quand l'entr�e est termin�e (indiqu� par le nœud fils renvoyant un NULL au lieu d'une ligne), le code de Sort est enfin capable de renvoyer sa premi�re ligne en sortie, c'est-�-dire le premier suivant l'ordre de tri. Il conserve les lignes restantes en m�moire de fa�on � les renvoyer dans le bon ordre en r�ponse � des demandes ult�rieures.
Le nœud MergeJoin demande de la m�me fa�on la premi�re ligne � partir du sous-plan droit. Ensuite, il compare les deux lignes pour savoir si elles peuvent �tre jointes ; si c'est le cas, il renvoie la ligne de jointure � son appelant. Au prochain appel, ou imm�diatement s'il ne peut pas joindre la paire actuelle d'entr�es, il avance sur la prochaine ligne d'une des deux tables (suivant le r�sultat de la comparaison), et v�rifie de nouveau la correspondance. Finalement, un sous-plan est termin� et le nœud MergeJoin renvoie NULL pour indiquer qu'il n'y a plus de lignes jointes � former.
Les requ�tes complexes peuvent n�cessiter un grand nombre de niveaux de nœuds pour les plans, mais l'approche g�n�rale est la m�me : chaque nœud est ex�cut� et renvoie sa prochaine ligne en sortie � chaque fois qu'il est appel�. Chaque nœud est responsable aussi de l'application de toute expression de s�lection ou de projection qui lui ont �t� confi�es par le planificateur.
Le m�canisme de l'ex�cuteur est utilis� pour �valuer les quatre types de requ�tes de base en SQL : SELECT, INSERT, UPDATE et DELETE. Pour SELECT, le code de l'ex�cuteur de plus haut niveau a seulement besoin d'envoyer chaque ligne retourn�e par l'arbre plan de la requ�te vers le client. Pour INSERT, chaque ligne renvoy�e est ins�r�e dans la table cible sp�cifi�e par le INSERT. (Une simple commande INSERT ... VALUES cr�e un arbre plan trivial consistant en un seul nœud, Result, calculant une seule ligne de r�sultat. Mais INSERT ... SELECT peut demander la pleine puissance du m�canisme de l'ex�cuteur.) Pour UPDATE, le planificateur s'arrange pour que chaque ligne calcul�e inclue toutes les valeurs mises � jour des colonnes, plus le TID (tuple ID ou l'identifiant de la ligne) de la ligne de la cible originale ; l'ex�cuteur de plus haut niveau utilise cette information pour cr�er une nouvelle ligne mise � jour et pour marquer la suppression de l'ancienne ligne. Pour DELETE, la seule colonne renvoy�e par le plan est le TID, et l'ex�cuteur de plus haut niveau utilise simplement le TID pour visiter chaque ligne cible et la marquer comme supprim�e.
Pr�c�dent | Sommaire | Suivant |
Planificateur/Optimiseur | Niveau sup�rieur | Catalogues syst�me |