CHAPITRE III ARCHITECTURE D'UN SGBD RELATIONNEL [GARD01] Chapitre II.4 et 5. [MARC93] 47
ARCHITECTURE D'UN SGBD RELATIONNEL - Architecture générale 1. ARCHITECTURE GENERALE Rappel Noyau BD SQL Applications Utilisateurs Architecture fonctionnelle en couches Le noyau assure les fonctionnalités de base : Persistance Fiabilité Concurrence Performance Lors de l'acquisition d'un SGBD (serveur), c'est un logiciel correspondant à la partie grisée qui est livrée. Caractéristique : Le noyau est entièrement encapsulé dans SQL qui est le seul langage de manipulation de la base. Bases de données B6 48
ARCHITECTURE D'UN SGBD RELATIONNEL - Architecture fonctionnelle 2. ARCHITECTURE FONCTIONNELLE 2.1. Présentation générale Interface utilisateur Analyse des requêtes Optimisation des requêtes Mémoire Dictionnaire de données Couche transactions Buffer SQL Couche verrous Couche exécution Buffer de données (Mémoire cache) Couche Disque Cette architecture est théorique mais représentative des architectures réelles que l'on trouve dans les SGBD du marché : Les 7 couches représentées ci-dessus ne sont pas systématiquement implémentées dans les SGBD du marché : certains peuvent contenir plus de couches, d'autres mois. En particulier, les couches analyse et optimisation de requêtes sont souvent fusionnées. Il est important de retenir que quelque soit le nombre de couches, les fonctionnalités de base (persistance des données, fiabilité, concurrence, performance) doivent être implémentées dans l'architecture. L'architecture fonctionne à l'image de l'architecture normalisée OSI pour les réseaux : chaque couche dialogue et échange des informations avec sa couche supérieure et sa couche inférieure. 49 Bases de données B6
ARCHITECTURE D'UN SGBD RELATIONNEL - Architecture fonctionnelle 2.2. Objectifs de l'architecture Vocation : Construire des requêtes SQL Réfléchir comment les exécuter Les exécuter le plus rapidement possible S'assurer que l'exécution s'est bien passée 3 parties : La tête : Interface Analyse Optimisation Construire, réfléchir Le centre de contrôle : (module transactionnel) Gestion des transactions Gestion des verrous S assurer Les jambes : Exécution Gestion de la Exécuter 2.3. La couche Interface utilisateur Niveau construction de la requête SQL. Plus ou moins évoluée suivant les systèmes : interprèteur de requêtes interface graphique schéma de la base en ligne Fournit des outils de programmation : Générateur de masque de saisie et d'affichage Générateur d'états Stockage et réutilisation des résultats Langage de 4 ième génération (L4G) intégration de requêtes dans les langages de 3 ième génération comme (L3G) Envoi à la couche Analyse des requêtes, de la requête et d'informations annexes (début et fin de transactions, demandes de verrous,...). Reçoit le résultat et le met en forme pour l utilisateur. 2.4. La couche Analyse des requêtes Analyse syntaxique et évaluation de la requête SQL : Utilisation du dictionnaire pour contrôler que les relations et les attributs cités dans la Bases de données B6 50
ARCHITECTURE D'UN SGBD RELATIONNEL - Architecture fonctionnelle requête existent dans le schéma de la base. Décomposition de la requête en un arbre d'opérateurs algébriques. Le dictionnaire de données est lu par toutes les requêtes : Pour des raisons de performance, il doit être résident dans une zone en. Envoi de l'arbre algébrique à la couche Optimisation des requêtes. 2.4. La couche Optimisation des requêtes DEFINITION Recherche de la stratégie la plus rapide pour exécuter la requête : Objectif de performances Les stratégies utilisées : Réorganisation de l'arbre algébrique en utilisant les propriétés des opérateurs relationnels (commutativité, associativité, distributivité,...). Evaluation de la taille des relations et du résultat de chaque opérateurs (statistiques) basée sur l'utilisation du dictionnaire de données. Evaluation du nombre d'i/o. Choix des meilleurs algorithmes pour exécuter les opérateurs relationnels. Choix de l'arbre le plus rapide à exécuter : Notion de plan d exécution Stockage du plan d exécution dans une zone en pour réutilisation ultérieure : Notion de buffer SQL Transmet le plan d'exécution à la couche Transactions. REMARQUE L'optimisation de requêtes sera étudiée en détail dans le chapitre VI. 2.5. La couche Transactions Pilote l exécution des requêtes : Objectif de fiabilité et de concurrence : Gestion des transactions DEFINITION Notion de transaction : 1 ou n requêtes devant être exécutées ensembles (ex : Opération de débit/crédit) Notion applicative : les transactions sont définies dans les programmes par les développeurs. Pilier de la cohérence en cas de mise à jour Reçoit les ordres SQL suivants : début de transaction demande de verrous lecture (requêtes) écriture (requêtes) fin de transaction 51 Bases de données B6
ARCHITECTURE D'UN SGBD RELATIONNEL - Architecture fonctionnelle Fonctionnalités : Affecte un identificateur (appelée souvent estampille) à chaque transaction reçue Ordonnance les transactions les unes par rapport aux autres Transmet les opérateurs relationnels du plan d'exécution à la couche Exécution Donne des ordres de verrouillage/déverrouillage à la couche Verrous Valide ou annule les transactions 2.6. La couche Verrous DEFINITION Notion de verrou : Mécanisme d allocation de données de la base (attribut, n-uplet, relation,...) à une transaction : Permet la gestion de la concurrence Gère les verrous demandés par la couche Transactions. Fonctionnalités : Pose et libère les verrous demandés Maintient des tables de verrous (objets verrouillés, verrous en attente) Autorise ou pas les ordres de lecture ou d écriture en fonction des verrous posés REMARQUE La gestion des transactions et des verrous sera étudiée en détail dans le chapitre V. 2.7. La couche Exécution DEFINITION Exécution des algorithmes des opérateurs relationnels : Opérateurs de mise à jour : insertion, modification, suppression Opérateurs de consultation : sélection, projection, jointure,... Opérateurs divers : tri, agrégats,... Fonctionnalités : Exécute les opérateurs des requêtes. Exécute les ordres de validation et d annulation des transactions. Demande l'adresse des n-uplets en lecture ou en mise à jour à la couche Mémoire, en lui envoyant les adresses de ces n-uplets. Transmet des ordres de mise à jour de données, à la couche Mémoire. Exécute les mécanismes de reprise sur panne (gestion de la fiabilité). Fournit le résultat aux couches supérieures. 2.8. La couche Mémoire DEFINITION Principe de la gestion de la par le SGBD : Pour le SGBD, les s (appelés parfois secondaire) et la (appelée parfois principale) sont considéres comme un seul espace de stockage. Bases de données B6 52
ARCHITECTURE D'UN SGBD RELATIONNEL - Architecture fonctionnelle Pour des raisons de performance, le SGBD manipule les données de la base en : Notion de buffer de données ou cache. REMARQUE S il a besoin d un n-uplet, il le cherche d abord en, puis s'il ne le trouve pas, sur les s : L'unité de transfert entre le et la est, non pas le n-uplet mais la page (nombre fixe d'octets dépendant du système d'exploitation) identifiée par une adresse. Les n-uplets modifiés en centrale sont régulièrement réécrits sur : Objectif de persistance Gère le transfert des n-uplets entre la et les s (et inversement) : Les adresses des pages transférées sont converties en adresses, et réciproquement. Fonctionnalités : Transfert en les n-uplets demandés par la couche Exécution et lui fournit les adresses de ces n-uplets. Met à jour les n-uplets en. Ecrit les n-uplets mis à jour sur. Evénements déclenchant le transfert : Disques Mémoire Evènement : La couche Exécution demande un n-uplet en lecture ou donne un ordre de mise à jour : le n-uplet n est pas en. Mémoire Disques Evènements : saturée (algorithme LRU : Least Recently Used) transaction validée (transfert des pages modifiées) intervalle régulier (check-point) EXPLICATIONS L'algorithme LRU : Cet algorithme est utilisé par la plupart des SGBD pour nettoyer la lorsque celle-ci est saturée. Il consiste à réécrire sur les pages les moins récemment utilisées, c'est à dire les pages qui n'ont pas été lues ou modifiées depuis un certain temps : Conséquence : Des pages contenant des n-uplets modifés par des transactions non validées (non terminées) peuvent être réécrite dans la base sur. Transaction validée : C'est l'événement logique permettant de nettoyer la : les pages contenant des n-uplets modifiés sont réécrites sur lorsque la transaction de mise à jour est validée (terminée). Ces pages ainsi que les pages uniquement lues 53 Bases de données B6
ARCHITECTURE D'UN SGBD RELATIONNEL - Architecture fonctionnelle sont ensuite supprimées de la. Conséquence : A chaque validation de transaction, le SGBD est obligé d'interrompre son activité de lecture et de mise à jour, et d'écrire des pages sur, ce qui génère de un traffic important entre le et la (dans le cas où une page est lue ou mise à jour successivement par plusieurs transactions). Ce n'est donc pas une stratégie optimale. Le check point : Pour pallier aux inconvénients de l'événement précédent, les SGBD nettoient la à intervalles réguliers : toutes les pages modifiées contenues en sont réécrites sur puis supprimées de la, que les transactions qui les ont modifié soient validées ou pas. Conséquence : A chaque check-point, des pages contenant des n- uplets modifés par des transactions non validées (non terminées) sont réécrite dans la base sur. De plus, lorsqu'une transaction est validée, l'écriture sur des pages modifiées par la transaction est différée au prochain check-point. Bases de données B6 54
ARCHITECTURE D'UN SGBD RELATIONNEL - Exemple : Requête de séléction 3. EXEMPLE DE REQUETE DE SELECTION EXEMPLE Schéma de la base : AUDITEUR ( numéro, nom, adresse ) INSCRIPTION ( #code-uv, #numéro, année-universitaire, droits ) Requête de sélection : Quelles sont les inscriptions de l'auditeur PERRIN, triées par année-universitaire? Requête SQL : SELECT code-uv, année-universitaire FROM AUDITEUR, INSCRIPTION WHERE INSCRIPTION.numéro = AUDITEUR.numéro AND nom = PERRIN ORDER BY année-universitaire Simulation (simplifiée) de l'exécution de cette requête : 1. Interface : Saisie ou création de la requête dans un programme 2. Analyse : Vérification que les tables et les attributs cités dans la requête, existent bien dans le dictionnaire. 3. Optimisation : Construction de l arbre algébrique optimisé résultat TRI année-universitaire code-uv, année-universitaire numéro nom = PERRIN INSCRIPTION AUDITEUR 55 Bases de données B6
ARCHITECTURE D'UN SGBD RELATIONNEL - Exemple : Requête de sélection 4. Gestion de la transaction 1. Identification de la transaction : transaction = requête 2. Demande de verrous lecture pour le n-uplet auditeur PERRIN et pour les n-uplets de ses inscriptions. 3. Si les verrous ont pu être obtenus, donne l ordre d exécution de la requête, sinon attente puis retour en 2) Plan d'exécution Résultat 5. Gestion des verrous Verrouillage du n-uplet auditeur PERRIN et des n-uplets de ses inscriptions. ou refus de verrouiller un n-uplet Exécution des opérateurs : 1 sélection,1 jointure,1 projection,1 tri Demande des pages contenant les n-uplets de PERRIN et de ses inscriptions. 6. Exécution de l arbre algébrique Adresses Pages Adresses Recherche des n-uplets de PERRIN et de ses inscriptions en. ou lecture de la page contenant le n-uplet de l'auditeur PERRIN, et/ou des pages contenant les n-uplets de ses inscriptions, et stockage en. Adresses Pages 7. Gestion de la Lecture pages Pages Bases de données B6 56
ARCHITECTURE D'UN SGBD RELATIONNEL - Exemple : Requête de séléction EXPLICATION 1. La couche Transaction créée une transaction correspondant à la requête et lui affecte un identifiant. 2. Elle va ensuite demander l'exécution de l'arbre algébrique tout en verrouillant les n-uplets manipulés : En réalité, les verrous sont posés lors de la lecture des n-uplets ; il y a donc un dialogue permanent entre les couches Transaction, Verrous et Exécution. Pour des raisons de clarté, la gestion des verrous et la lecture des n-uplets sont représentées comme étant séquentielles. 3. Une fois les verrous posés, la couche Transaction donne l'ordre à la couche Exécution d'exécuter les opérateurs (selon l'ordre du plan d'exécution). 4. La couche Exécution exécute la sélection et la jointure : les opérateurs de sélection et de jointure permettent d'obtenir les adresses des n-uplets à manipuler. A partir des adresses obtenues, la couche Exécution demande à la couche Mémoire de lire les n-uplets sur et de les stocker en. 5. La couche Mémoire vérifie que les n-uplets demandés (par leur adresse ) ne sont pas déjà en. Si ce n'est pas le cas, elle va les rechercher sur, les stocker en et établir une correspondance entre les adresses s et les adresses. Dans tous les cas, elle fournit à la couche Exécution, les adresses des n-uplets demandés. 6. La couche Exécution peut donc exécuter les autres opérateurs (projection, tri) sur les n-uplets en et fournir le résultat à la couche Transaction qui le transmettra ellemême aux couches supérieures. 57 Bases de données B6
ARCHITECTURE D'UN SGBD RELATIONNEL - Exemple : Requête de mise à jour 4. EXEMPLE : REQUETE DE MISE A JOUR EXEMPLE Schéma de la base : AUDITEUR ( numéro, nom, adresse, total_inscription ) INSCRIPTION ( #code-uv, #numéro, année-universitaire, droits ) Requête de mise à jour : Enregistrement d une nouvelle inscription pour l'auditeur PERRIN. Programme de mise à jour : BEGIN TRANSACTION début de la transaction INSERT INTO INSCRIPTION values (B1, 120, 97/98, 800) UPDATE AUDITEUR SET total_inscription=total_inscription+800 WHERE numéro=120 COMMIT fin de la transaction Simulation (simplifiée) de l'exécution de cette requête : 1. Interface : Création de la requête dans un programme : Définition de la transaction. 2. Analyse : Vérification que les tables et les attributs cités dans les requêtes, existent bien dans le dictionnaire. 3. Optimisation : Recherche de la stratégie de mise à jour la plus efficace. Bases de données B6 58
ARCHITECTURE D'UN SGBD RELATIONNEL - Exemple : Requête de mise à jour 4. Gestion de la transaction 1. Identification de la transaction : transaction = requêtes de maj 2. Donne l ordre d insertion du n-uplet de l'inscription. 3. Demande d un verrou écriture pour le n-uplet de PERRIN à modifier. 4. Si le verrou a pu être obtenu, donne l ordre de modification, sinon attente puis retour en 3). 5. Donne l'ordre d'écrire les mises à jour sur. La modification se déroule correctement Verrouillage du n-uplet auditeur PERRIN. Exécution des opérateurs : 1 insertion,1 sélection, 1modification Demande de la page où insérer le n-uplet de l'inscription. Insertion du n-uplet de l'inscription en. Demande de la page contenant le n-uplet de PERRIN. Modification du n-uplet PERRIN en. ou refus de verrouiller le n-uplet 5. Gestion des verrous 6. Exécution de l arbre algébrique Adresse page Adresse Adresse page Adresse Recherche de la page où insérer le n-uplet de l'inscription, ou lecture de la page et stockage en. Recherche de la page contenant le n-uplet de PERRIN, ou lecture de la page et stockage en. Ecriture des pages modifiées sur 7. Gestion de la Lecture pages Pages Ecriture pages 59 Bases de données B6
ARCHITECTURE D'UN SGBD RELATIONNEL - Exemple : Requête de mise à jour EXPLICATION 1. La couche Transaction créée une transaction correspondant à la requête (plan d'exécution) et lui affecte un identifiant. 2. Elle va ensuite donner l'ordre d'insertion du n-uplet de l'inscription à la couche Exécution. 3. A partir de l'adresse où insérer le n-uplet, la couche Exécution demande à la couche Mémoire de charger la page correspondante. 4. La couche Mémoire vérifie que la page demandée (par son adresse ) n'est pas déjà en. Si ce n'est pas le cas, elle va la rechercher sur, la stocker en et établir une correspondance entre l'adresse et l'adresse. Dans tous les cas, elle fournit à la couche Exécution, l'adresse de la page demandée. 5. La couche Exécution va insérer le n-uplet dans la page stockée en. 6. Retour à la couche Transaction qui va demander la pose d'un verrou écriture sur le n-uplet à modifier. 7. Une fois le verrou posé, la couche Transaction donne l'ordre à la couche Exécution d'exécuter les opérateurs de sélection et de modification. 8. La couche Exécution exécute la sélection : l'opérateur de sélection permet d'obtenir l'adresse de la page contenant le n-uplet à modifier. A partir de l'adresse obtenue, la couche Exécution demande à la couche Mémoire de lire le n-uplet à modifier sur et de le stocker en. 9. La couche Mémoire fournit l'adresse de la page contenant le n-uplet à modifier (mode de recherche : voir 4.). 10. La couche Exécution va modifier le n-uplet PERRIN dans la page stockée en. 11. Tout s'étant déroulé normalement, la couche Transaction valide la transaction et donne l'ordre de réécrire les pages modifiées sur. Bases de données B6 60
ARCHITECTURE D'UN SGBD RELATIONNEL - Exemple : Requête de mise à jour 4. Gestion de la transaction 1. Identification de la transaction : transaction = Infos panne requêtes de màj 2. Donne l ordre d insertion du n-uplet de l'inscription. 3. Demande d un verrou écriture pour le n-uplet de PERRIN à modifier. 4. Si le verrou a pu être obtenu, donne l ordre de modification, sinon attente puis retour en 3). 5. Donne l ordre d annuler l insertion du n-uplet de l'inscription. Une panne apparaît pendant la modification Verrouillage du n-uplet auditeur PERRIN. 5. Gestion des verrous Exécution des opérateurs : 1 insertion,1 sélection, 1modification Demande de la page où insérer le n-uplet de l'inscription. Insertion du n-uplet de l'inscription en. Détection d une panne. Prévient qu une panne est apparue. Annulation du n-uplet de l'inscription, en. Adresse page Adresse Panne 6. Exécution de la modification Recherche de la page où insérer le n-uplet de l'inscription, ou lecture de la page et stockage en. 7. Gestion de la Lecture page Page 61 Bases de données B6
ARCHITECTURE D'UN SGBD RELATIONNEL - Exemple : Requête de mise à jour EXPLICATION 1. La couche Transaction créée une transaction correspondant à la requête et lui affecte un identifiant.. 2. Elle va ensuite donner l'ordre d'insertion du n-uplet de l'inscription à la couche Exécution. 3. A partir de l'adresse où insérer, la couche Exécution demande à la couche Mémoire de charger la page correspondante. 4. La couche Mémoire vérifie que la page demandée (par son adresse ) n'est pas déjà en. Si ce n'est pas le cas, elle va la rechercher sur, la stocker en et établir une correspondance entre l'adresse et l'adresse. Dans tous les cas, elle fournit à la couche Exécution, l'adresse de la page demandée. 5. La couche Exécution va insérer le n-uplet dans la page stockée en. 6. Retour à la couche Transaction qui va demander la pose d'un verrou écriture sur le n-uplet à modifier. 7. Une fois le verrou posé, la couche Transaction donne l'ordre à la couche Exécution d'exécuter les opérateurs de sélection et de modification. 8. La couche Exécution exécute la sélection, au cours de laquelle, elle détecte une panne. Elle remonte alors l'information à la couche Transaction. 9. La couche Transaction donne l'ordre à la couche Exécution d'annuler l'insertion du n-uplet de l'inscription. 10. La couche Exécution annule l'insertion du n-uplet dans la page stockée en. Bases de données B6 62