Architecture des SGBD et modèles de données
Architecture des SGBD et modèles de données
Chapitre 2
Architecture fonctionnelle du logiciel SGBD
Le modèle de données est exploité par un jeu d’opérateurs primitifs capables de réaliser les
manipulations sur les données conformément aux contraintes et aux possibilités imposées par la
structure du modèle. Il est très souvent représenté par un graphe connexe, cʹest-à-dire dont les
éléments sont tous reliés.
Modèles conceptuels de données
Plusieurs modèles (1) sont proposés pour lʹorganisation et la représentation générique des
données. Seuls quelques-uns marqués par un astérisque s’imposent dans la pratique :
Source : [Link]
© André Gamache
Chapitre 2 Architecture fonctionnelle du SGBD
2 1 4
9
6
10
BD
Figure 2.1
Architecture ANSI/SPARC
© A. Gamache 2
Chapitre 2 Architecture fonctionnelle du SGBD
On peut voir les données dʹun point de vue différent selon que lʹon est DBA ou développeur.
Cette vision à trois niveaux favorise une meilleure séparation entre les applications et la
structure physique des données de la base. Lʹarchitecture ANSI/SPARC propose trois niveaux
de modélisation des données :
a) Niveau conceptuel : Description logique de toutes les données selon la réalité perçue par le
concepteur.
b) Niveau externe : Description des données utilisées par une application selon les
caractéristiques imposées par les traitements de chaque application. Il correspond aux vues.
c) Niveau interne : Description des structures physiques nécessaires ou disponibles pour la
représentation des données sur un ou plusieurs disques.
La figure 2.1 illustre le rôle de chaque processeur de schéma et illustre les différentes étapes
dans la transformation des ordres du DML.
Indépendance logique
L’indépendance logique est la possibilité de modifier le schéma conceptuel en perturbant le
moins possible le fonctionnement des applications, c’est-à-dire la vue (ou modèle externe) ou en
d’autres mots, les éléments du modèle utilisés par une application. En cours d’exploitation, elle
favorise la productivité et une continuité des opérations.
Indépendance physique
L’indépendance physique est la possibilité de modifier le schéma interne des données sans
modifier le schéma conceptuel. Par exemple, le gestionnaire de la base de données peut modifier
l’emplacement des données sur les disques ou définir des structures de données plus adéquates
pour les accès à la base de données sans perturber le fonctionnement des applications.
Langage de données
Les niveaux du langage de données correspondent à ceux du modèle exploité, à savoir le
conceptuel, lʹexterne ou lʹinterne. La tendance actuelle est de spécifier ces trois niveaux avec le
même langage de données dont certains ordres sont particuliers à chaque niveau. Les quatre
facettes courantes sont les suivantes :
a) DDL (Data Definition Language ou Langage de Définition de Données): spécification du
schéma conceptuel (MCD) et des vues.
b) VDL (View Definition Language): pour définir les vues ou le modèle externe (similaire au DDL
du modèle conceptuel avec quelques restrictions).
c) SDL (Storage Definition Language): pour spécifier les détails de stockage physique.
d) DML (Data Manipulation Language ou Langage de Manipulation des Données): pour mettre à
jour et supprimer les données de la base en fonction des structures définies au préalable par
le langage de définition de données.
Caractéristiques des langages de données
Chaque SGBD peut avoir son langage de données qui lui est propre et même cohabiter avec un
autre plus universel. Les fonctionnalités d’un langage de données sont caractérisées ainsi :
1. Déclaratoire, c’est-à-dire une requête qui formule quoi rechercher dans la base.
2. Procédural, c’est-à-dire qui formule comment rechercher les données dans la BD.
© A. Gamache 3
Chapitre 2 Architecture fonctionnelle du SGBD
3. Intégré dans un langage hôte : insertion du DML dans une application L3G.
4. Langage de requête : limité souvent à la recherche.
5. Convivial : les interfaces conviviales du langage facilitent la construction des requêtes par
lʹentremise des interfaces graphiques (GUI).
Manipulations des données
Les ordres DML pour l’insertion, la modification et la suppression des données sont disponibles
dans tous les systèmes avec une syntaxe qui n’est pas normalisée. Il en résulte souvent des
formes de DML différentes d’un SGBD à l’autre.
La recherche est formulée par un langage de requête propre au SGBD ou de type SQL.
Exemples de requêtes formulées dans divers langages:
Voici comment peut être formulée dans différents langages, une requête pour trouver les
matricules des employés dont le nom contient les lettres ‘tson’.
Recherche :
a) Oracle : SQL
SELECT nom FROM Employe
WHERE nom LIKE '%tion%';
© A. Gamache 4
Chapitre 2 Architecture fonctionnelle du SGBD
Commande
noCommande*
montant
dateCommande
Aera: region-commande
Commande-Article
LigneArticle
noArticle
qte: (comp)
qteCom;
qteLiv
prix
remarques (mv)
Figure 2.3
record name is LIGNE-ARTICLE
record id is 621
location mode is via commandeArticle set
within regionCommande area
03 noArticle pic x(8),
03 qte
05 qteCom pic 9(7),
05 qteLiv pic 9(7),
03 prix pic 9(4).
03 remarques occurs 0 to 10 times
depending on nb-rem.
Après la compilation, le schéma transformé est rangé dans le dictionnaire. Ce schéma exécutable
contient certaines informations, non pertinentes au niveau conceptuel, lesquelles concernent
l’identification des enregistrements (records), le placement des données et leur mode d’accès.
© A. Gamache 5
Chapitre 2 Architecture fonctionnelle du SGBD
Ce schéma confond dans son langage les trois niveaux en incluant les informations descriptives
du niveau physique avec celles du niveau conceptuel. De plus, l’obligation inutile de fournir la
longueur des champs alourdit les modifications subséquentes au schéma du modèle.
Employe
nom *
adresse
telephone
Departement
Fichier-maître
no-dep*
site
Figure 2.4
.
begin-data-base-generation emplnom = 30
data-base-name= PERSONNEL empltel =10
share-io empladr = 50
ioarea = mas1 end-data
ioarea = mas2 drive = 12, 48, mt32
... total-logical-records = 200
end-io logical record-length = 104
begin-master-data-set logical-records-per-block = 9
data-set-name = Dep end-master-data-set
... ...
data-set-name = empl end-variable-entry-data-set
ioarea = mas1 end-data-base-generation
master-data
emplroot = 8 --8 octets
emplctrl = 6
© A. Gamache 6
Chapitre 2 Architecture fonctionnelle du SGBD
Clients
Produits 001
003
n n
n
1 m
Entrepots Commandes
04 002
n 1 n
n 1 1
ComEntrepot Vendeurs
006 006
Figure 2.5
Cette partie de schéma ADABAS des années 80 est un exemple de langage de description peu
significatif pour les développeurs d’applications. Néanmoins, ce logiciel a l’avantage de gérer
une base de données avec des structures de données directement adaptées aux liens complexes
(n-m) réciproques sans la création de classes logiques supplémentaires. Ce lien complexe est créé
au besoin par une table de couplage (Table Coupling) implémentée par une structure de données
inversée. Cette caractéristique en faisait un logiciel fort adapté aux modèles conceptuels,
puisque le passage au modèle logique demandait moins de transformations.
Modèle de Vax/DBMS
Le schéma d’une base de données réseau gérée par ce système se rapproche de celui
recommandé par CODASYL. Les informations ayant trait au niveau conceptuel sont séparées du
niveau physique voire même de celles régissant les accès aux données (7). Ce système gère les
modèles conceptuel, externe, interne et de sécurité.
© A. Gamache 7
Chapitre 2 Architecture fonctionnelle du SGBD
Faculte
code_fac
nom fac
Compose_de
Departement
code_dep
nom fac
Emploie Inscrit Dispense
© A. Gamache 8
Chapitre 2 Architecture fonctionnelle du SGBD
description demeure au niveau logique des données et ne fait aucune référence aux aspects
physiques. Ces derniers font l’objet d’un schéma interne complètement séparé.
Environnement de traitement centralisé
Cet environnement, fort populaire avant l’avènement des réseaux et encore très utilisé dans les
grandes organisations, est articulé autour d’une seule machine dite centrale, puissante et
partagée avec plusieurs autres logiciels étrangers à la base de données. De plus, cet ordinateur
gère souvent un grand nombre de terminaux au moyen dʹun logiciel de communication de type
moniteur de transactions (TP pour Transaction Processing monitor). Ce dernier permet de fournir
et de recevoir des données en transit vers une application particulière qui tourne sur la machine
centrale. Dans le cas le plus simple, le SGBD ne répond quʹà une seule requête à la fois (single
thread). Les requêtes simultanées qui proviennent de différentes applications sont mises alors en
file dʹattente par le moniteur de transactions. Dans le cas d’une configuration dite
d’entrelacement d’exécution (multithreading), plusieurs requêtes en provenance d’autant
d’applications (terminaux) peuvent être traitées en concurrence. Un tel service exige un OS
multitâche et une gestion fine du partage des données.
Multithreading avec un processeur de transactions sur machine centrale
Chaque écran transmet les données nécessaires pour effectuer une transaction (en mode
autonome) au processeur de transactions (PT) qui les gère en tenant compte des priorités
respectives. Le module de traitement des transactions crée un processus pour chaque requête.
Ce nouveau processus concurrence les autres processus actifs pour les accès à la BD. Le système
de répartition de l’OS se charge de gérer les différentes tâches associées à l’application pour
réaliser ainsi l’entrelacement des traitements. Lorsquʹune tâche fait, par exemple, une lecture sur
disque pour une application, une autre tâche peut alors prendre le contrôle du processeur et
poursuivre son exécution. Pour une meilleure performance, le processus du moniteur TP de la
figure 2.7a une très grande priorité pour l’OS de manière à obtenir fréquemment le contrôle du
CPU. Deux cas sont possibles :
Moniteur Ecran 8
Ecran 1
TP
Application-1
Une seule transaction traitée à BD
la fois et entièrement par SGBD
l’application.
Figure 2.7
© A. Gamache 9
Chapitre 2 Architecture fonctionnelle du SGBD
Le processeur transactionnel de transactions (TP) couplé au moteur SGBD améliore quelque peu
le traitement en partageant le même moteur SGBD avec les terminaux actifs.
Cas 2 : interclassement des transactions en provenance de plusieurs terminaux pour le
traitement de données (multithreading). Ces transactions sont exécutées en concurrence et gérées
par le répartiteur du système dʹexploitation (OS) tel que cela est illustré à la figure 2.8. Chaque
transaction est exécutée par un processus dupliqué pour exécuter le code correspondant à
l’application. Il y a aura donc autant de processus concurrents que d’écrans actifs.
Cette récupération des cycles du CPU par les processus chargés de traiter un ordre DML sera
aussi nécessaire dans une architecture client/serveur où le nombre de processus est susceptible
d’être encore plus important. De plus, chaque application sʹexécute sur la station-client et, seul
lʹordre DML est transmis au serveur. Il est donc capital d’avoir un système d’exploitation
multitâche performant pour la gestion du serveur de bases de données avec une machine
capable de répondre à la charge créée par les clients.
Transaction :
ecran-1 no-transaction id-application valeur-1 valeur-2 valeur-3
Les système OS/2, Unix et Windows NT sont les plus utilisés sur les plates-formes micro, tandis
que les systèmes propriétaires IBM-MVS, IBM-AIX, Sun-Solaris et Sun-OS dominent le matériel
de niveau station de travail ou celui des ordinateurs centraux.
station 1 Moniteur
de TP station 4
Table des
proc-3
applications
proc-2
proc-1
proc-1
proc-3 proc-2
BD
SGBD
© A. Gamache 10
Chapitre 2 Architecture fonctionnelle du SGBD
parallèle pour escompter encore des gains de performance. Toutefois, l’approche client-serveur
est bien adaptée à l’exploitation par réseau. Dans un tel cadre, les applications sont développées
au niveau de chaque station en utilisant les ressources logicielles disponibles localement. L’accès
à la base de données se fait par lʹentremise dʹun ou de plusieurs réseaux hétérogènes qui
véhiculent chaque requête au serveur lequel agit comme une ressource centrale. Plusieurs
auteurs préconisent l’approche fédérée dans l’exploitation des données. Cette approche met
aussi en oeuvre l’architecture client-serveur mais en y ajoutant la possibilité de répartir la base
de données sur plusieurs serveurs hétérogènes. Bien sûr, une telle base de données doit être
gérée de façon à maintenir la cohérence, l’intégrité et la transparence des données quel que soit
le site d’émission de la requête.
Modèle fonctionnel du logiciel
Nous reprendrons le modèle fonctionnel présenté schématiquement au chapitre 1. On peut
décrire un logiciel SGBD sous un angle fonctionnel, car les aspects d’implémentation varient
largement selon la plate-forme, voire même d’une version à lʹautre du même logiciel. En outre,
le développement de nouveaux systèmes d’exploitation offrira sans doute des moyens
d’implantation encore plus puissants. Cette description schématique comprendra :
a) Les fonctions présentes dans un SGBD;
b) La coopération entre les fonctions internes du système pour la gestion efficace et cohérente
des données.
2. 2 Architecture générale dʹun SGBD
Voici l’architecture fonctionnelle vue auparavant :
Analyse syntaxique
Analyseur
Analyse sémantique
Sous-système
dʹaffichage Calcul Contrôle de la concurrence
Atomicité de la transaction
Exécution des opérateurs
Base de
données
Accesseur
Figure 2.9
© A. Gamache 11
Chapitre 2 Architecture fonctionnelle du SGBD
Le SGBD est composé de plusieurs modules agissant en coopération dans l’enchaînement des
opérations pour calculer la réponse. Il comprend deux composants principaux : lʹExécuteur et
lʹAccesseur.
Dans les pages suivantes, nous ferons un rappel des notions de base implémentées dans les
SGBD dont la complexité le classe quasiment dans la famille des systèmes concurrents, près du
système d’exploitation..
Rôle des processus dans les architectures SGBD
Définition du processus
Un processus est une unité (segment de code) d’exécution gérée par le système dʹexploitation; il
est doté dʹun espace mémoire propre (RAM), de son code (segment de texte), d’un espace de
© A. Gamache 12
Chapitre 2 Architecture fonctionnelle du SGBD
données (segment de données), d’une pile d’exécution (segment de pile, le contexte) et d’un
compteur ordinal. Il a aussi sa propre table de descripteurs, sa table des signaux et ses trois
ʺtimersʺ maintenus en son nom par lʹOS. C’est donc un programme en exécution géré par l’OS au
moyen de la table de processus Unix proc[]. Toutefois, plusieurs processus différents peuvent
exécuter le même programme. Le noyau dʹun SGBD met en oeuvre plusieurs processus
coopérants pour stocker et retrouver les données.
États dʹun processus
Un processus peut avoir plusieurs états mutuellement exclusifs :
a) Prêt à l’exécution (ready) : il a toutes les ressources nécessaires sauf celle du processeur; il
attend le feu vert du répartiteur de lʹOS.
b) En attente bloquée (blocked) : attend la fin d’une autre activité pour poursuivre la sienne; il a
déjà démarré son exécution, mais il est suspendu en attente de la libération dʹune ressource.
c) En exécution (running)
Répartition (scheduling) des tâches
Le répartiteur (scheduler) du système dʹexploitation choisit le processus à exécuter parmi ceux
qui sont prêts. Cette répartition tient compte du niveau de priorité spécifié pour chacun des
processus. Dans le contexte dʹun SGBD, les processus qui font lʹobjet dʹune répartition par lʹOS
seront ceux du noyau du SGBD. Le rôle d’un système d’exploitation n’est donc pas neutre dans
le fonctionnement du SGBD.
Alternance de processus (swapping)
Un processus en attente ou prêt peut être évacué au besoin (swapped) pour faciliter l’exécution
d’un autre qui exige de la mémoire RAM supplémentaire. Cette vidange (swapping) est réalisée
par l’OS et les pages sont rangées dans un fichier spécialisé à cette fin sur un disque. Cette
opération suppose l’exécution d’un appel au superviseur accompagné d’une sauvegarde du
contexte du processus courant.
Conséquence négative de l’alternance
La présence de nombreux processus en mémoire accroît l’activité I/O qui affecte directement la
performance du SGBD. L’alternance se manifeste par des temps de réponse variables. La
première stratégie consistait à évacuer toutes les pages d’un processus afin de libérer la mémoire
pour un processus en phase de démarrage. Dans le système SYSTEM V (Unix) une évacuation
graduée, à la page (demand paging), a éliminé l’échange inutile de pages (swapping).
Processus sous-jacents au fonctionnement SGBD
Le fonctionnement du SGBD suppose la mise en oeuvre de plusieurs modules coopérant entre
eux :
1. Un Exécuteur, éventuellement plusieurs, est créé pour le service aux requêtes. Leur nombre
dépendra de celui des clients actifs. La décision de lancer plusieurs Exécuteurs est prise par
le DBA.
2. Plusieurs autres processus pour implanter le noyau du SGBD (entre 1 et 8). Leur taille est
souvent supérieure à 1 Mo. Ils sont la propriété du compte système DBA. Leur rôle consiste
© A. Gamache 13
Chapitre 2 Architecture fonctionnelle du SGBD
Un processus ainsi créé est dit processus enfant et hérite du descripteur du processus parent lui
permettant dʹavoir accès aux mêmes fichiers et aux mêmes sockets qui appartiennent au
premier. Pour un SGBD, lʹutilisation de ce mécanisme exige quʹun premier processus soit lancé
par le compte DBA et quʹensuite, les autres soient créés par la primitive fork(). Cʹest ainsi que le
nombre de processus Exécuteurs pourrait être augmenté lorsque le nombre de clients atteint une
certaine limite.
Thread (compteur ordinal + pile + code)
Un processus peut avoir plusieurs threads pour exécuter en parallèle divers traitements. Le
thread se distingue du processus par le fait quʹil a le même espace dʹadressage que celui du
processus qui lʹa lancé. Il a donc accès aux mêmes données en mémoire et aux mêmes
ressources de fichiers et de sockets que ceux du parent. Cependant, il a une pile propre, son
propre code et son compteur ordinal. Si un même ordre DML est exécuté par plusieurs threads,
la performance sera dʹautant plus grande si chacun est exécuté par un processeur distinct tout en
utilisant une partition différente des données. A terme, la réunion des résultats de chaque thread
fournira la réponse à la requête DML. Ce parallélisme dans le calcul de la réponse à une requête
permet d’avoir des performances sensiblement meilleures avec les bases de grande taille.
Mécanismes de communication interprocessus
La communication avec et entre les processus du noyau (IPC) pour échanger un ordre DML (ex.
SQL) ou dʹautres données de contrôle ou pour retourner les données de la réponse calculée sous-
tend lʹexécution de fonctions de système par lʹOS afin dʹimplanter les diverses fonctionnalités à
savoir le stockage, le recouvrement et la cohérence de la base de données au niveau du serveur.
© A. Gamache 14
Chapitre 2 Architecture fonctionnelle du SGBD
tube 2
OS
Buffer géré par le noyau
OS table
table descripteur
descripteur
Le buffer est créé dans lʹespace géré 0 stdin
0 stdin par lʹOS 1 stdout
1 stdout
C’est un mécanisme simple unidirectionnel qui sʹapparente aux fichiers et qui est applicable
entre processus appartenant au même groupe de processus et ayant le même parent (process
group), car cʹest par lʹhéritage dʹune table de descripteurs dʹun ancêtre commun que les deux
processus vont pouvoir communiquer. La fonction pipe(fd) génère deux descripteurs de fichier
et alloue un buffer interne, lequel est géré par le noyau du système OS . Par exemple, pour
communiquer à un processus 1024 caractères rangés dans un tableau nommé tabA, le
processus2 utilisera la fonction write(fd,tabA,1024).
© A. Gamache 15
Chapitre 2 Architecture fonctionnelle du SGBD
b) les fonctions read et write sont utilisées pour lire et écrire sur un tube comme dans un fichier.
Ces fonctions font un appel SVC (appel au système), donc amorcent une commutation de
contexte avec un effet négatif sur la performance. Lʹécrire de 1024 caractères rangés dans le
tableau tabA au moyen du stdout dont le descripteur est 1, est fait par la fonction suivante :
write ( 1, tabA, 1024); -- écrire 1024 car. dans le tube 1
La lecture de 1024 caractères dans le stdin dont le descripteur est 0, est faite par la fonction
suivante :
read(0, buf , 1024); -- lecture du buffer interne
Le tube a lʹinconvénient dʹimplémenter un échange sur une même machine et dʹavoir un tampon
limité à 4096 octets. Si deux processus doivent échanger des données simultanément dans les
deux sens, ils doivent avoir un parent commun afin de pouvoir établir deux tubes entre les
processus en question. Finalement, le tube est bloquant dans ce sens que si la lecture est moins
rapide que lʹécriture, le processus écrivain sera suspendu.
Mémoire partagée (ZMP)
Ce mécanisme permet à deux processus dʹéchanger des données en partageant lʹaccès à une
même zone de mémoire RAM par la même adresse du début de la dite zone.
Processus 1 Processus 2
Figure 2.11
En créant cette zone de mémoire commune, l’OS assigne une clé d’accès à cette zone figée qui
reste généralement en mémoire principale et qui est accessible sans appel au superviseur (SVC).
Cette clé dʹaccès est rendue accessible aux applications par une fonction système shmat(cle,0,0).
Cette ZMP est logiquement constituée dʹun seul espace, mais selon les OS, elle peut être
constituée de plusieurs segments partagés de mémoire RAM, alloués par le système. La zone de
mémoire partagée est créée par lʹOS qui fournit aussi une clé dʹaccès à cette même zone.
© A. Gamache 16
Chapitre 2 Architecture fonctionnelle du SGBD
La clé reçue, cleZ est la donnée essentielle pour le rattachement à la ZMP. Elle est calculée à
partir de la cléU (un très grand entier) fournie par le processus ou lʹutilisateur au moment de la
création de cette zone.
c) Le processus peut alors accéder à la ZMP comme si cʹétait une mémoire locale, cʹest-à-dire
comme étant une partie de son espace adressable. Dans le contexte dʹun moteur SGBD, cʹest un
module spécialisé qui sera chargé dʹaccéder aux pages de cette zone.
d) Chaque processus doit contrôler lʹaccès à la ZMP et plus particulièrement aux pages par des
sémaphores mis en oeuvre par la fonction système shmctl()ou par la définition dʹun sémaphore
pour chaque page de la ZMP. Il est aussi possible de déléguer à un autre processus la mission
de contrôler les accès aux données des pages en gérant une liste de verrous attribués à chaque
transaction.
Avantage de la zone de mémoire partagée (ZMP)
Par cette technique efficace, un processus accède à la ZMP dont il se doit de connaître la
structure et cela, afin de pouvoir accéder aux données rangées dans cette zone. L’échange de
données est possible sans faire de nombreux appels répétitifs au système (SVC). Lorsqu’un
processus réalise son attachement par un premier SVC, il peut par la suite y accéder directement
sans autre SVC et sans changement de contexte, puisqu’il utilise la même clé d’accès obtenue
lors du premier SVC. Ayant accès à la ZMP, un processus peut accéder aux différentes
structures internes au moyen dʹune structure de répertoire créée au préalable par le processus
qui a créé la ZMP.
La ZMP est généralement paginée au cours de sa création de sorte que le processus qui accède
aux pages en connaît la structure de page et peut accéder à son contenu par lʹentremise dʹun
répertoire créé pour chaque page. S’il devait y avoir une ZMP pour chaque processus
Exécuteur/Accesseur, la ZMP bloquerait une bonne partie de la RAM, avec lʹapparition de
problèmes concernant la synchronisation des accès. Finalement, bien que cette zone puisse être
l’objet d’un échange (swap), il est préférable de la fixer (pin down) pour obtenir une meilleure
performance. Une activité de pagination qui est croissante est un indicateur pour le DBA que la
mémoire RAM est insuffisante et que le SGBD peut manifester des symptômes de sous-
performance.
Queue de messages
Cette technique permet lʹéchange de messages entre deux processus en les plaçant dans une
queue. Chaque message est ensuite repris par un des processus (modèle de la boîte postale). Les
primitives SEND() et RECEIVE() utilisent les appels SVC de lʹOS (System Supervisor Call) pour
lire ou déposer des messages. Il y a donc à chaque écriture, une commutation de contexte. La
queue est gérée par le noyau de l’OS (Unix SYSTEM V).
© A. Gamache 17
Chapitre 2 Architecture fonctionnelle du SGBD
OS Processus 3
Processus -7 (pid = 3)
(pid = 7)
queue 4
Espace OS
sd = 4 sd = 9
Figure 2.12a
© A. Gamache 18
Chapitre 2 Architecture fonctionnelle du SGBD
La particularité de cet IPC est la possibilité d’avoir une communication entre processus d’une
même machine (famille AF_UNIX) ou de différentes machines distantes (famille de protocole
PF_UNIX) pour lʹIPC au moyen dʹune communication basée sur la technologie TCP/IP.
Association des deux extrémités identifiées par le couple (machine, port) mise en œuvre par le
système dʹexploitation ou par un logiciel de communication. Une prise (socket) est créée par un
processus client au moyen de la fonction socket(): un numéro de prise (sd) et deux tampons
internes à lʹOS sont créés pour la lecture et lʹécriture des messages. Le processus émetteur écrit
dans une prise par une primitive write() comme il le fait pour un fichier. Dʹun autre point de vue
du logiciel, la prise ou la socket est en quelque sorte une interface de programmation avec les
fonctions de la librairie système de TCP/IP. Le descripteur dʹune prise est inscrit dans la table
des descripteurs du processus de lʹapplication qui lʹa créée. Du côté serveur, une prise est aussi
créée et lʹassociation technologique entre ces deux prises est établie en utilisant lʹadresse Internet
des machines et le numéro de port.
La prise ou socket peut donc être vue comme un ensemble de primitives - socket(), listen(),
bind(), ... dʹinterface avec lʹOS pour implémenter l’échange les données entre deux machines
distantes en masquant la couche transport qui sera implémentée par le noyau de lʹOS via une
technologie de communication appropriée. La communication distante entre deux processus est
présumée implémentée par une technologie matérielle et se manifeste au niveau des clients et
du serveur par une communication entre deux extrémités logiques appelées extrémités de
connexion où chaque processus a accès à une socket. Le mécanisme de communication
schématisé ci-dessous fait appel à des tampons-systèmes (buffer) créés de chaque côté par les
primitives socket().
Port
Un port est identifié par un numéro et associé à une queue de messages gérée par lʹOS. Par
exemple, une queue de messages connue comme le port 5, un processus en fait la lecture en
référant au port numéro 5. Les fonctions disponibles pour l’implémentation d’une prise par un
appel au système dʹexploitation sont les suivantes (8).
RAM-OS RAM-OS
out socket 6
out port 80 In
In
TCP-IP socket 9
read()
socket 7
write()
Client accept()
Serveur
read()
write()
Figure 2.12b
© A. Gamache 19
Chapitre 2 Architecture fonctionnelle du SGBD
Dans le cas du serveur cʹest une prise dite passive, car il ignore encore lʹadresse IP du prochain
client. Le processus serveur est à lʹaffût de tout message écrit dans une prise associée à un port
particulier que le serveur va surveiller attentivement.
b) Association de l’adresse du descripteur d’une prise, i.e. de point de communication cible (IP,
port).
- Pour le processus client
Lʹadresse IP et le port de la machine cible (soit celle du serveur ciblé) doivent être connus, car ils
sont fournis comme arguments dans lʹappel du connect() lancé par le client:
res_c = connect(fd_sock_c,&sock_c,&sock_s,sizeof(sock_s))
c) Envoi d’un message par le client au moyen de sa socket locale et en utilisant son descripteur
de socket, cʹest-à-dire lʹindice de son entrée dans la table du processus :
sf = fdopen(fd_sock_c, "w"); --ouverture de la socket client
write(sf, tamponout, 1024);
Si le client ferme la socket, il ne pourra pas recevoir de réponse du serveur, mais son message de
sortie sera quand même transmis au point de communication cible, soit le serveur.
© A. Gamache 20
Chapitre 2 Architecture fonctionnelle du SGBD
La fonction Accept() extrait le prochain message de la socket (via son tampon IN) de la
manière suivante : création dʹune nouvelle socket (fd_sock_ns) où lʹOS placera le message
trouvé dans le tampon IN. En ce faisant, le serveur garde en disponibilité la socket initiale pour
recevoir sans délai un autre message éventuellement dʹun client différent. Il pourrait aussi faire
un fork()pour traiter le message reçu.
read() write()
Transmission des données par le
serveur
close() close()
Figure 2.12c
Le serveur logiciel boucle à lʹinfini :
do {
if ((sd = accept()) == -1) exit(0); -- boucle
do
{ ch = getc(sd);
. . .
close (fd_sock_ns);-- socket créée par le serveur pour avoir accès --
au contenu de la socket d'origine
}; . . .
} while (TRUE);
© A. Gamache 21
Chapitre 2 Architecture fonctionnelle du SGBD
La socket fd_sock_ns est fermée. Le serveur continue toujours à recevoir des messages par
lʹentremise de la socket dʹorigine (fd_socket_s) qui est toujours active. Ce mécanisme IPC est
mis en oeuvre dans certaines composantes d’un SGBD, notamment dans le module de gestion
du réseau qui est présent sur chaque station client (module dʹécoute). La prise créée par le client
utilise lʹadresse IP du serveur distant pour établir la connexion. Le serveur connaîtra la
provenance de la communication parce que la trame TCP comprend lʹadresse IP du client ainsi
que le numéro de port du client.
Table des descripteurs
( 1 par processus)
Structure de données dʹune socket
IN
famille : PF_INET
OUT
service: SOCK_STREAM
local IP
remote IP
La connexion nécessaire pour la communication entre deux processus distants est considérée
comme réalisée au plan technologique dès lors que le quintuplet suivant est déterminé et connu
sur chaque site-client et serveur - voulant établir une communication :
© A. Gamache 22
Chapitre 2 Architecture fonctionnelle du SGBD
processus distant comme un appel de procédure standard. Le processus appelant émet le RPC()
et attend le résultat avant de poursuivre son activité au niveau de la station client. Le serveur
reçoit l’appel et les arguments de la procédure, exécute la tâche sous-tendue par cet appel et
retourne les résultats. La gestion de la synchronisation et du rendez-vous est prise en charge par
les procédures du RPC. Cette technique se prête bien à l’exécution de lʹordre DML d’une
application client, car cet ordre doit être exécuté entièrement avant que l’application poursuivre
son traitement local. Le RPC est une couche par dessus la socket et constitue de ce fait une
interface plus conviviale pour le développement des applications.
Application-RPC
...
sqlrpc(ʹselect nas, nom FROM Ouvrierʹ)
Serveur :
(désencapsulage de lʹappel rpc)
exécution de lʹordre
(encapsulage du résultat)
retour des données par le serveur
suite de lʹapplication : au processus appelant)
récupération de la réponse et calcul.
...
Figure 2.12d
Appel dʹune procédure distante dans une architecture client-serveur
Ce mécanisme dʹéchange de données entre deux processus est de plus en plus utilisé. Le schéma
de la figure 2.12d inspiré par celui présenté par Gray et Reuter (9) illustre les étapes dʹexécution
dʹun appel RPC entre deux processus distants.
Lʹencapsulage (packaging) peut être fait par un langage spécialisé comme le IDL (Interface
Description Language) qui, une fois compilé donnera un code que le serveur cible pourra
compiler pour générer un code quʹil pourra exécuter. Chaque RPC est associé à un point de
communication différent (IP, port) de sorte que le retour de lʹappel RPC se fait sans ambiguïté.
Avec tous ces mécanismes pour la communication, chaque appel à une fonction système génère
une commutation de contexte qui nʹest pas neutre en terme de charge sur le CPU. Cʹest souvent
un facteur limitatif pour la performance dʹun SGBD.
Architecture fonctionnelle générale du SGBD
L’architecture générale(10) d’un SGBD a plusieurs variantes entre les deux configurations
extrêmes ci-dessous. Le choix d’une variante dépend entre autres choses des ressources du
serveur, du nombre de clients sur le réseau et de la nature des traitements effectués par les
applications.
Exécuteurs dédiés et un Accesseur
Avec cette configuration, chaque client est associé à un serveur de processus dédié (Exécuteur)
qui est chargé dʹexécuter chaque ordre DML reçu de son client. Si aucun client ne transmet un
ordre, le serveur est en attente dans la RAM.
© A. Gamache 23
Chapitre 2 Architecture fonctionnelle du SGBD
Les processus dʹarrière plan du noyau du SGBD ont le même parent soit le compte DBA. Ils
peuvent communiquer entre eux au moyen de tubes, de sockets et par une mémoire partagée.
La socket a lʹavantage de rendre le noyau portable dans un environnement réparti, tandis que la
mémoire partagée privilégie la performance dans lʹaccès aux données. Avec l’architecture de la
figure 2.13, les ordres qui arrivent d’une même station sont traités par le même serveur de
processus (SP) dédié à ce client. Il pourra y avoir plusieurs Exécuteurs tant que leur nombre ne
dépasse pas celui autorisé par le DBA via le paramètre système approprié.
Réseau
Serveur TCP-IP
BD
Accesseur
Zone Mémoire Partagée
Figure 2.13
Une fois la réponse calculée, les tuples sont retournés à la station client par lʹexécuteur dédié via
le lien TCP/IP entre le serveur Oracle et le client en question. Ce lien reste ouvert tant et aussi
longtemps que lʹapplication ne ferme pas la base par un ordre Close. Cette architecture est
caractérisée par un usager connecté servi par un exécuteur dédié. Si le nombre dʹusagers
dépasse le nombre dʹexécuteurs autorisés, la connexion ne sera pas établie immédiatement.
Cette configuration est pratique lorsque le nombre de clients est raisonnable et que les
ressources informatiques sont largement disponibles. De plus, cette configuration ne comprend
quʹun seul Accesseur chargé des accès aux pages, au service de tous les Exécuteurs.
Avantage
Le serveur de processus est dédié à un client; il est en attente lorsque ce dernier effectue des
calculs locaux. Il est mis en veilleuse après la fermeture de la communication avec le client. Il
demeure inactif tant que le client l’est aussi.
Inconvénients
Le nombre dʹExécuteurs concurrents croît avec celui des usagers. La charge du répartiteur
sʹaccroît dʹautant et cela peut se traduire par une diminution de la performance du SGBD,
© A. Gamache 24
Chapitre 2 Architecture fonctionnelle du SGBD
Réseau
Serveur TCP-IP
module D2 module D1
OUT IN
OUT IN
Exécuteur
Exécuteur
BD
Figure 2.14
Dans ce cas de figure, un seul Accesseur gère le transfert des pages de la ZMP. En effet, le travail
de l’Accesseur est plus léger que celui de l’Exécuteur; il peut donc être partagé avec profit entre
plusieurs Exécuteurs et cela, sans perte significative de performance. Pour isoler le client de
lʹExécuteur, un processus intermédiaire (D) est créé avec la mission de recevoir la requête dʹun
client et dʹagir en son nom au niveau du serveur.
LʹOS doit être multitâche et préemptif. Les Exécuteurs de même priorité obtiennent à tour de
rôle le processeur pour faire progresser leur traitement jusqu’à l’épuisement de leur quantum de
© A. Gamache 25
Chapitre 2 Architecture fonctionnelle du SGBD
temps CPU. À ce moment, le répartiteur de lʹOS passe le contrôle du CPU à un autre processus
Exécuteur qui retire une requête dans une file dʹentrée dʹun client.
Avantages de cette architecture multiexécuteur partagé
Le nombre dʹExécuteurs est plus petit que celui des clients puisquʹils sont partagés. Ceci se
traduit par un encombrement moindre de la RAM et donc une charge de swapping plus faible.
Comme il y a moins de processus actifs, il y a aussi moins de commutations de contexte.
Finalement, cette configuration se prête naturellement à lʹexécution parallèle lorsquʹil y a
plusieurs processeurs partageant la même mémoire RAM. Lʹinconvénient a trait au temps de
réponse avec un système monoprocesseur. En effet, comme le client nʹa pas dʹExécuteur dédié, le
temps de réponse risque dʹêtre parfois plus long si la transaction précédente ou concurrente est
longue.
Ressources du logiciel client
Chaque client doit avoir les ressources en logiciels nécessaires pour établir la communication et
gérer les échanges. Avec plusieurs versions du système Oracle, il y a notamment le module
SQLPlus, le Developer/2000 et le module SQLNET. La gestion des échanges avec le serveur est
faite par le module SQLNET de la station qui gère la communication réseau, notamment les
couches inférieures du modèle OSI. L’exécution dʹun ordre DML est sous la responsabilité du
serveur de processus (Exécuteur) et, pour certains logiciels clients, le caractère procédural peut
être pris en charge par un module du serveur capable dʹexécuter un bloc PL/SQL.
Communication client-SGBD avec Oracle
L’architecture générale du système Oracle, version 7.x comporte plusieurs processus distincts
pour le noyau, un processus de communication et une zone de mémoire partagée pour la
communication interprocessus au sein de la machine serveur. Nous utiliserons celle-co comme
exemple en précisant que d’autres architectures sont possibles.
SQLNET
Serveur de processus (SP)
SGA OUT IN
D3
Serveur
© A. Gamache 26
Chapitre 2 Architecture fonctionnelle du SGBD
Processus de service:
RECO CKPT PMON ARCH LGWR SMON
BD + DD
Journal
Figure 2.16
La communication entre les processus est assurée par les mécanismes IPC connus : zone de
mémoire commune (SGA) et le RPC, soit l’appel de procédure distante. Du côté de l’usager, le
processus client gère les échanges de données avec le noyau du SGBD qui sʹexécute sur le
serveur.
Connexion dʹun client
La procédure générale est la suivante :
a) Le client signale sa présence au Module d’Écoute du Réseau (MER ou Listener de SQLNET)
au moyen de son adresse (IP, no-port). La requête de communication est ensuite transmise par
le client.
b) Du côté du MER, s’il y a un répartiteur (dispatcher) qui reconnaît son adresse IP et place la
requête du client dans la file du serveur. Il y a retour de l’adresse d’écoute (adresse Ethernet) qui
est valide pour la session en cours.
c) Le client transmet la requête SQL au répartiteur qui la met, sʹil y a lieu, en file d’attente avant
son traitement par un serveur de processus (Exécuteur).
d) En mode entrelacement d’exécution (multithreading), la queue est servie par un nombre limité
de serveurs de processus (SP).
S’il n’y a pas de serveur de processus disponible (Exécuteur) et si un autre peut être autorisé par
le DBA, il pourrait y avoir création automatique d’un serveur de processus (SP) pour le client
concerné. Le nombre de SP ne peut cependant pas dépasser une limite fixée par le DBA.
Fonctionnement schématique d’un SGBD
Le fonctionnement général d’un SGBD est représenté à la figure 2.17. Le schéma illustre les
principales fonctions généralement implémentées par un moteur de SGBD qui tourne sur un
serveur dans une approche client/serveur.
© A. Gamache 27
Chapitre 2 Architecture fonctionnelle du SGBD
Analyse lexicographique
Analyse syntaxique et
Dictionnaire
sémantique
de données
Optimiseur
Accesseur BD
Exécution de lʹordre :
gestion de la transaction
Retour de la réponse au
client via le dispatcher de
processus
Journal
Journalisation
externe
Figure 2.17
© A. Gamache 28
Chapitre 2 Architecture fonctionnelle du SGBD
3) L’ordre est ensuite traduit pour construire un arbre d’exécution non optimisé qui est rangé
dans la ZMP afin de pouvoir être réutilisé au besoin par dʹautres clients (cas des requêtes
OLTP). Pour un SGBD relationnel, lʹarbre est constitué avec les opérateurs algébriques et les
relations de base référées au niveau des feuilles seulement.
4) Le module de contrôle des accès vérifie les droits dʹaccès de l’utilisateur pour les données
requises par le calcul de la réponse. Il y a aussi accès au dictionnaire.
5) Chargement dans la ZMP des schémas de relation stockés dans le dictionnaire et de la liste
des droits dʹaccès.
6) Pour une requête d’interrogation : remplacement des attributs de la vue par ceux du schéma
conceptuel et référence au schéma actuel.
7) Lʹarbre de requête est optimisé afin dʹobtenir une requête arborescente équivalente qui
permet un calcul plus rapide de la réponse.
Pour la mise à jour : augmentation de l’arbre par une vérification des contraintes spécifiées dans
le schéma. Les procédures sont chargées par le module de vérification de l’intégrité de la BD.
10) Journalisation interne (redo log buffer) des seules transactions d’écriture et de mise à jour.
11) Lecture ou écriture des pages demandées. L’adresse de la 1re page est obtenue du DD.
12) Au besoin, le recouvrement de la base de données est fait avec le journal des transactions
internes pour reconstituer la base de données dans un état cohérent antérieur.
13) La réponse est placée dans la queue de sortie et lʹouverture dʹune socket permet le transfert
des tuples au client.
A lʹexécution dʹun COMMIT, les écritures de la transaction sont transférées du journal interne
vers le journal externe (log file) créé sur disque dur. Au contraire, avec le ROLLBACK, les
© A. Gamache 29
Chapitre 2 Architecture fonctionnelle du SGBD
modifications et les écritures effectuées sont défaites pour revenir à lʹétat de la base
correspondant à celui du début de la transaction.
Exemple d’un traitement d’un ordre de requête simple
Le MRD de la base utilisée correspond à un MCD fort simple composé dʹune seule relation
appelée aussi une table et qui décrit les attributs des employés. La clé de cette table est le nas
identifiée par un astérisque .
Cette vue Employev définit un mapping entre la table de base et la table virtuelle représentée
par la vue.
Attributs de la table Attributs de la vue
nas ----> matricule (nom différent)
nom ----> (attribut absent)
ville ----> cite (nom différent)
salaire ----> (attribut absent)
noProjet ----> noProjet (idem)
La vue correspond à une projection relationnelle des attributs de Employe sur ceux de la vue.
Cet opérateur sera étudié au chapitre de l’algèbre reltionnelle. Cette vue est associée à
lʹapplication lors de lʹouverture de la base de données.
Approche ensembliste
Le traitement de la requête ci-dessous n’est présenté quʹà titre dʹillustration et ne représente pas
nécessairement lʹimplémentation dʹune telle requête dans les SGBD actuels.
Traduction de la requête par l’intégration d’un appel de procédure dans le langage hôte :
CALL DMLSGBD
(dml, `matricule, cite’,’Employev’,noProjet = 'P9', reponse, codeRetour)
© A. Gamache 30
Chapitre 2 Architecture fonctionnelle du SGBD
Ensuite, il y a génération dʹun arbre de requête par le SGBD intégrant la transposition des
éléments de la vue pour tenir compte du schéma de la base (étape 4).
Employe
Figure 2.18
...
WHILE code_succes = SUCCES
read index Employe avec noProjet = 'P9'— trouve no de page
read page Employe avec l'adresse de la page (no de page)
write [Link], [Link] (+ mapping des noms d’attributs)
Fin while
. . .
8) Exécution du plan : l’accès aux fichiers sur disque est fait par lʹAccesseur.
9) Dans le cas dʹune modification de la table, il y a écriture dans le journal interne et
éventuellement dans le journal externe (à la validation) des données avant et après
modification.
10) La page est placée dans le tampon du moteur SGBD (la Zone de Mémoire Partagée) avec un
verrou approprié demandé par lʹExécuteur. Ce dernier garantit lʹintégrité en refusant ou en
autorisant le partage des données avec les autres utilisateurs.
© A. Gamache 31
Chapitre 2 Architecture fonctionnelle du SGBD
11) Le module de recouvrement demeure inactif, car l’opération est présumée avoir été
complétée correctement.
12) LʹExécuteur accède à la ZMP pour calculer la réponse et retourner les données à l’application
conformément au schéma externe (sʹil y a lieu, transposition des noms dʹattribut).
Remarque : Cette exécution sert seulement d’illustration générale et n’est pas nécessairement
typique ni de l’interface entre une application et le SGBD, ni des techniques d’implémentation
des SGBD qui varient dʹun système à lʹautre.
Gestion et répartition transactionnelle par lʹExécuteur
Le module Calcul est responsable de construire la réponse et comprend, notamment dans les
sous-modules de Gestion Transactionnelle (GT) et de Répartition Transactionnelle (RT) des
actions de lecture et dʹécriture sur le disque. On peut représenter ces deux derniers modules par
le schéma général ci-dessous. Lors du traitement de deux ordres disincts en provenance de deux
applications différentes, lʹExécuteur peut les traiter en concurrence par un métissage du
traitement des deux transactions. Ainsi lʹordre r1 est une lecture de page appartenant à la
transaction T1 et r2 une autre lecture associée à la transaction T2.
c1, r1, e1, r1 c2, r2, e2, r2 Répartiteur c1, r1, c2, r2, e1, r1, e2, r2
Transactionnel
RT
T1 T2 séquence modifiée
Figure 2.18a
Le rôle du module GT est de voir à ce que chaque transaction se termine correctement, sinon la
transaction en cause est défaite entièrement. Il prend note du début de chaque transaction et
lancera au besoin le processus de recouvrement transactionnel (en utilisant le journal interne ou
la trace transactionnelle) qui se traduit par défaire toutes les modifications effectuées par une
transaction sur la BD, sans perturber les autres transactions en cours.
Le rôle du Répartiteur Transactionnel (RT) est plus complexe; il est important pour assurer un
meilleur temps de réponse pour lʹexécution des diverses requêtes. En effet, lʹexécution de
chaque ordre SQL correspond à une séquence dʹécritures et de lectures qui peut être exécutée
intégralement pour fournir un temps de réponse qui pénalise les autres usagers, notamment
lorsque la requête en cours est longue. La figure ci-dessus illustre ce problème avec deux
transactions {r1, e1, r1,} et {r2, e2, r2}. La première correspond à une suite dʹactions sur la base de
données composée d’une lecture r1, suivie dʹune écriture e1 et qui se termine par une simple
lecture r1.
© A. Gamache 32
Chapitre 2 Architecture fonctionnelle du SGBD
remarquer que le SGBD fournit ainsi son propre répartiteur différent de celui de lʹOS. Ce
répartiteur transactionnel (RT) permet dʹavoir une exécution multithreading plus fine des
requêtes. De plus, lʹaccès aux données doit se faire tout en préservant lʹintégrité de la base. Si les
requêtes étaient exécutées de façon séquentielle, aucun verrouillage sur les données ne serait
nécessaire, mais la performance serait médiocre. Par contre, avec lʹaction du RT, il devient
parfois essentiel dʹutiliser les verrous sur les données sous le contrôle exclusif du SGBD. Le
système dʹexploitation hôte nʹintervient pas directement, sinon pour donner le contrôle au SGBD
qui devrait normalement avoir une plus grande priorité que celle des autres processus qui
cohabitent et se concurrencent pour le même CPU.
ZMP
pages importées pages validées journal interne reprise transactionnelle (LRT)
liste LRU
no-trans. 5
fin
MRU m Table des pages
modifiées (TPM)
Figure 2.19
© A. Gamache 33
Chapitre 2 Architecture fonctionnelle du SGBD
b) Les pages où sont rangées les entrées du journal interne comprennent les images avant (AV)
et après (AP), le numéro de transaction, lʹadresse de la donnée (rowid) et le type de transaction.
c) Les pages de métadonnées (dictionnaire) : schéma conceptuel (liste des Entitiés, des
attributs,…), schéma interne et les schémas externes.
d) Les pages de recouvrement (Rollback Segment) formant la liste LRT permettant de ranger la
valeur avant (AV) de chaque donnée modifiée par une même transaction. Ces pages
représentent une information aussi inscrite dans le journal interne (JI). Ces pages LRT
permettent de recouvrer plus rapidement une transaction particulière sur lʹordre ROLLBACK.
Le recouvrement est plus rapide avec le LRT quʹà partir du journal interne et surtout, ne
perturbe pas l’exécution des autres transactions.
e) Un espace PGA pour chaque application en cours de traitement par un processus serveur
(SP). Cet espace contient une référence à lʹordre DML source, une référence à son plan
dʹexécution dans la cache partageable et le ou les premiers tuples de la réponse et une référence
à la queue ou à la liste des tuples de la réponse constituée des tuples calculés par le module
Exécuteur. Cette zone de la ZMP permet de poursuivre lʹexécution du traitement dʹune requête
interrompue.
f) Un espace pour stocker les triggers et les packages dont les pages peuvent être au besoin
clouées dans la ZMP.
g) Un espace partagé pour ranger lʹarbre de requête source et sa version optimisée de manière à
pouvoir le partager ou le réutiliser avec dʹautres transactions.
h) Dans certains cas, les files de sortie et la file dʹentrée des réponses aux requêtes sont
implantées dans la ZMP.
i) Les pages de la table des transactions actives (TA) : avec le no de transaction et la dernière
entrée dans le JI.
Les pages rangées dans la ZMP sont insérées dans diverses listes leur conférant un statut
particulier :
• Page modifiée (m : liste LRU) : Page de la BD lue par lʹAccesseur et éventuellement modifiée
(incluant les ajouts) après leur transfert dans la ZMP. Ces pages modifiées sont validées
lorsque toutes les transactions qui ont effectué des modifications ont exécuté un COMMIT.
Elles sont non validées si au moins un COMMIT reste à faire pour confirmer un ou
plusieurs changements dans la page. Ces pages seront transférées éventuellement dans la
liste DIRTY en cours de recherche.
• Page clouée (c ) : une page de la base de données et qui est en cours dʹaccès en modification
ou en écriture.
• Page libre (∗) : une page de la base de données entièrement validée ou libérée après lecture.
© A. Gamache 34
Chapitre 2 Architecture fonctionnelle du SGBD
En cas de besoin dʹespace dans la ZMP, les pages de la liste Dirty sont en premier transférées sur
le disque. Au besoin, les pages de la liste LRU peuvent aussi être stockées temporairement sur
disque.
Lecture dʹune page de données de la base
a) Lors du calcul dʹune réponse, lʹExécuteur accède aux pages de données pour lire les tuples.
Cette opération comprend les étapes suivantes :
b) Le serveur de processus, i.e. lʹExécuteur, cherche la page en premier dans la liste LRU et
ensuite dans la liste DIRTY de la ZMP.
c) Dès que la page est trouvée, elle est normalement enchaînée vers la partie MRU de la liste
LRU, sauf si le traitement sous-tend un balayage complet dʹune table. Dans ce cas, la page
pourrait être gardée dans sa position courante dans la liste (LRU).
d) Si la page n’est pas trouvée dans la ZMP, l’exécuteur remplace une page de la liste LRU
(partie LRU) par une autre obtenue de lʹAccesseur. Si nécessaire, une page de la liste DIRTY
sera écrite par lʹAccesseur sur disque afin de faire de la place pour ranger de nouvelles
pages. Dans le cas limite correspondant à une liste DIRTY vide et à une liste de pages
entièrement validées tout aussi vide, alors une page de la partie LRU sera placée sur disque
même si elle nʹest pas marquée r de manière à pouvoir importer la page demandée.
Modification dʹune page de données de la base
Cette opération de mise à jour dʹune donnée sous-tend les étapes suivantes :
a) Recherche de la page dans les listes LRU; en cours de recherche, transfert des pages
modifiées antérieurement et validées par toutes les transactions : de la liste LRU vers la liste
des pages DIRTY.
b) Si la page n’est pas trouvée, il y a un défaut de page. Il sʹen suit une lecture de la page
demandée sur le disque, suivie de son placement dans la liste LRU (généralement dans la
partie MRU de la liste).
c) La page importée dans la ZMP en vue dʹune modification est marquée comme étant clouée
(pinned page). Après modification, elle sera marquée modifiée jusquʹau COMMIT. Si elle
nʹest que lue, la page est marquée r pour en permettre le remplacement éventuel.
d) Si la page demandée est trouvée dans la ZMP, elle est marquée clouée en mémoire (pinned
page) et lʹaccès aux données est rendu possible. Par contre, si une page recherchée nʹest pas
trouvée dans la ZMP et que toutes les pages sont marquées clouées, lʹAccesseur évacuera
une page clouée pour la remplacer par la page demandée en provenance du disque. Cette
page exportée demeure clouée. En cas de panne, le module de recouvrement utilisera les
images AV pour défaire les modifications qui nʹont pas été validées par un COMMIT. Ces
pages clouées exportées sur disque seront au besoin importées à nouveau dans la cache, dès
lors quʹun Accesseur y réfère dans le calcul dʹune requête. Pour éviter autant que possible
cette évacuation dʹune page clouée, il faut favoriser les transactions courtes dont la fin est
marquée par lʹexécution dʹun ordre COMMIT.
Écriture de pages modifiées et validées sur disque par lʹAccesseur
Lʹécriture dʹune page de données sur disque est réalisée par lʹAccesseur lorsqu’un des
événements suivants est activé :
© A. Gamache 35
Chapitre 2 Architecture fonctionnelle du SGBD
- Sur demande de lʹExécuteur ou lorsque la longueur de la liste DIRTY a atteint une valeur
critique (lw).
- Sur demande de lʹExécuteur, lorsque lʹespace disponible est insuffisant et introuvable dans
la ZMP.
- Sur un dépassement du temps alloué (time-out), par exemple toutes les 2 secondes, l’écriture
est demandée par l’Accesseur.
- Lors dʹun point de reprise (checkpoint), amorcé par le DBA ou par un changement de journal
externe.
- L’Accesseur peut écrire au besoin un bloc de pages de la liste des pages modifiées (DIRTY)
dans une seule opération I/O. Cette écriture en vrac (pipeline) est plus rapide que celle d’une
suite de pages exigeant une suite d’opérations consécutives. Les pages écrites en bloc doivent
avoir des numéros de page contigus
2.3 Journalisation transactionnelle
Après chaque modification dʹun tuple dans une page de la ZMP, lʹExécuteur (avec Oracle, cʹest
le Serveur de processus (SP)) écrit certaines informations dans le journal interne (JI) : le numéro
de transaction, la nature du DML, lʹadresse de la donnée sous forme dʹun rid (row identifier),
lʹheure, lʹimage avant de la donnée (AV) et lʹimage après (AP) en plus dʹautres informations
nécessaires pour gérer les listes du journal interne, notamment un numéro de séquence, JSN, qui
identifie chaque entrée dans le journal. La structure du journal des transactions est propre à
chaque SGBD. Les entrées du JI peuvent être écrites au besoin dans le JE de manière à libérer de
lʹespace dans le journal JI.
Ex. Entrée type dans le journal interne :
Chaque entrée a son numéro de journal (JSN) et les entrées dʹune même transaction sont chaînées.
Figure 2.19a
Les entrées dʹune même transaction peuvent être chaînées les unes aux autres par un pointeur
arrière, le JSN_précédent. Ce pointeur permet de parcourir rapidement les entrées dʹune
transaction lorsque celle-ci fait une opération rollback transactionnelle. Le journal interne est
organisé en une liste circulaire de sorte que les entrées finissent par être réutilisées par de
nouvelles entrées après lʹatteinte de la fin de la liste. Par conséquent, les entrées du JI nʹont pas
besoin dʹêtre effacées lors dʹun COMMIT ou dʹun CHECKPOINT. A titre indicatif, voici le
contenu partiel et lisible d’un journal interne. En pratique, les entrées font l’objet d’un codage de
sorte à compacter le journal interne.
© A. Gamache 36
Chapitre 2 Architecture fonctionnelle du SGBD
Chaque page modifiée par une transaction est inscrite dans la Table des Pages Modifiées (TPM)
de la figure 2.19b comportant aussi un compteur cpt qui est augmenté après chaque mise à jour.
Lors du commit de la transaction t124, les entrées du JI associées à cette transaction sont copiées
dans le JE et le compteur cpt est décrémenté. Ainsi, lorsque le compteur est à 0, cela signifie que
toutes les modifications de cette page sont validées et que la page pourrait être transférée dans
la liste DIRTY, qui est celle qui fournit en priorité les pages à évacuer en cas de manque dʹespace
dans la ZMP (Défaut de page). La table TPM comprend la première entrée du journal interne
correspondant à la modification de cette page; elle fournit le numéro de cette première
transaction dans le journal interne à partir de laquelle il faudra refaire les mises à jour en cas de
panne de système.
N.B. chaque page peut aussi avoir dans son en-tête une petite liste de numéros uniques de
transaction qui ont modifié les données de la page ou encore la dernière entrée du journal, soit le
dernier_JSN qui a modifié cette page.
Calcul dʹune réponse
LʹExécuteur chargé du calcul de la réponse a souvent à manipuler plusieurs tables de base, et
parfois autant dʹindex, pour obtenir tous les tuples de la réponse (active set ou result set). Ce
calcul peut être fait en mémoire en rangeant les tuples dans des pages temporaires allouées en
dehors de la ZMP ou encore en utilisant des fichiers de travail pour y loger les tuples
intermédiaires.
© A. Gamache 37
Chapitre 2 Architecture fonctionnelle du SGBD
curseur C1 Pages
temporaires
pour les
tuples de la
curseur C2 réponse
Queue de
sortie
1er tuple de
la réponse
Figure 2.20
Le premier tuple est retourné immédiatement à lʹapplication, tandis que les autres sont transmis
seulement par lʹexécution dʹun ordre FETCH inséré dans lʹapplication. La queue de sortie (et
dʹentrée) est implémentée dans la ZMP, elle pourrait être constituée dʹune liste de pages
contenant les tuples de la réponse. En sortie, une entrée dans la queue est constituée dʹun
pointeur, éventuellement en indirection par lʹentremise du PGA, sur la liste des pages contenant
la réponse
Validation dʹune transaction
La validation dʹune transaction T1 est lancée par lʹordre COMMIT. Tous les changements
effectués par T1 deviennent alors visibles aux autres transactions concurrentes qui nʹont pas lu
ces tuples auparavant et qui débuteront après la validation.
b) Les données modifiées deviennent visibles pour les autres transactions qui débutent après le
temps t du Commit. Les modifications restent cependant invisibles aux transactions qui ont
débuté avant le temps du Commit (cohérence de lectures répétitives) et qui ont peut être lu les
mêmes tuples sans voir leurs modification ultérieures. Par contre, si ces mêmes tuples nʹont pas
été lus par dʹautres transactions, ils deviennent alors visibles immédiatement.
c) Le Commit termine une transaction et en débute une autre avec un numéro différent et
toujours unique. Après un Commit, il devient impossible de faire un retour arrière par un
Rollback. Les données validées sont rendues persistantes.
Journalisation et reprise
Une transaction est définie comme une unité logique de traitement sur la BD, définie par le
traitement entre deux validations. Elle doit se réaliser entièrement ou pas du tout lorsque
© A. Gamache 38
Chapitre 2 Architecture fonctionnelle du SGBD
survient une panne ou une erreur en cours d’exécution. La panne peut être un arrêt de
lʹapplication client, la perte de lʹinstance du SGBD ou une défaillance sur un média.
Pour recouvrer un état stable et cohérent de la BD, il faut défaire une ou plusieurs transactions.
Lorsquʹil sʹagit de lʹexécution dʹun Rollback, la reprise transactionnelle n’implique que cette
transaction. Pour une transaction particulière non encore validée, il faut défaire toutes les
modifications quʹelle a effectuées depuis son début. Le rollback dʹune transaction peut être fait à
partir du journal interne, mais il est de préférence fait à partir des segments de rollback (liste
LRT) implémentés dans certains SGBD avec les images AV dʹune transaction. Le journal interne
fournit lʹimage avant (AV) et après (AP) des données modifiées par chaque ordre DML des
transactions. Il est donc possible de revenir en arrière avec les images avant et dʹannuler toutes
les actions effectuées par une ou plusieurs transactions non validées avant que les applications
transactionnelles soient relancées.
Dans cet exemple, il y a lecture et ensuite écriture du tuple avec un champ X modifié pour avoir
50 comme nouvelle valeur. Deux transactions (T1 et T2) sont actives au moment de la panne
générale.
Après la panne du SGBD, la reprise est lancée en défaisant les modifications des deux
transactions jusquʹà leur dernier Commit. Dans lʹexemple de la figure 2.20a toutes les
modifications effectuées par T1 seront annulées, tandis que seule la 2e transaction de T2 sera
annulée. La reprise des applications avec de nouvelles données lues après le Commit permet de
poursuivre les traitements sans perte de données et dʹéviter les incohérences dans la base.
Une autre propriété importante de la transaction est son isolement par rapport aux autres
transactions. Dès quʹune transaction T1 débute, lʹétat de la base de données à cet instant
apparaîtra à T1 comme étant invariant ou isolé par rapport aux actions des autres transactions
concurrentes. En fait, une autre transaction T2 peut lire les données modifiées par T1, mais elle
obtiendra la valeur validée au moment du début T2. En effet, le système peut toujours remettre
© A. Gamache 39
Chapitre 2 Architecture fonctionnelle du SGBD
temporairement une donnée dans son état antérieur stable (par exemple, avec les segments de
rollback transactionnel) et cela, tant que la donnée nʹest pas validée. Après la validation, la
donnée devient visible aux autres transactions. En se comportant ainsi, le SGBD satisfait en cela
lʹisolement transactionnel des transactions.
Lʹexemple de la figure 2.20a du journal interne hypothétique dont les entrées sont celles des
deux transactions T1 et T2. Lorsque T1 effectue la lecture de V, elle obtient la valeur qui était
validée au moment du début de la transaction T1 et non pas la valeur mise à jour par T2.
Lorsque survient une panne dʹinstance suivie de la perte de la ZMP, les seules données
disponibles pour récupérer sont celles du JE. Il faut donc défaire les modifications (UNDO)
effectuées par les transactions non validées au moment de la panne, et faire en sorte, sʹil y a lieu,
que les modifications des transactions validées soient nécessairement toutes reconstituées et
écrites sur disque (REDO). Les opérations dʹinsertion et de suppression sont traitées de façon
similaire.
Procédure générale pour le recouvrement après une panne
Il y a plusieurs phases dans le recouvrement ou reprise après une panne ou un arrêt imprévu du
SGBD :
1- Le module de recouvrement fait une lecture inverse des entrées du JE (qui est généralement
un fichier séquentiel sur disque) pour faire une liste des transactions non validées TNV et une
autre TV des transactions validées. Toutes les entrées du JE sont traitées jusquʹà la première,
i.e. la plus ancienne. Sans une borne dʹarrêt spéciale, le retour sera fait jusquʹau début du
journal externe!
2- Le ROLLBACK: Avec la liste TNV, les entrées du JE sont lues de la plus récente à la plus
ancienne et cela, pour défaire avec lʹimage AV les modifications sur la base de données.
3- Le ROLL FORWARD : Avec la liste TV, le module refait en ordre chronologique les
modifications sur la base de données avec lʹimage AP. Lʹopération REDO débute avec la plus
ancienne entrée du JE.
Cette opération devient longue si le nombre dʹentrées dans le JE est très important. Pour
accélérer les recouvrements, il faudra notamment raccourcir le JE en posant une borne dʹarrêt
par lʹexécution périodique dʹun point de reprise générale (nommé CHECKPOINT) . Ce dernier
consiste à établir à un moment approprié et sur disque un état cohérent de la BD. En ce faisant,
une entrée de point de reprise générale est inscrite dans le JE et joue le rôle dʹun butoir dans le
retour arrière. La procédure de recouvrement traite les entrées du JE jusquʹau point de reprise
générale ou à proximité de celui-ci dépendant de la procédure de checkpoint utilisée. En effet, si
le checkpoint est du type synchronisé avec la ZMP, il pourrait être nécessaire de dépasser le
checkpoint général pour défaire certaines transactions actives au moment où a eu lieu
lʹopération de CHECKPOINT.
Point de sauvegarde (PS)
Il est possible pour une application de contrôler seulement la reprise de ses actions
transactionnelles, particulièrement utile avec une transaction longue, en insérant des points de
sauvegarde dans celle-ci. Un point de sauvegarde transactionnel B est généré par la clause
© A. Gamache 40
Chapitre 2 Architecture fonctionnelle du SGBD
Figure 2.21
Si une transaction doit être défaite, elle pourrait lʹêtre jusquʹà un de ses points de sauvegarde ou
jusquʹau début de sa transaction. et cela, par la commande ROLLBACK TO B. Lors de cette
opération, les modifications défaites sont autant dʹactions sur la BD qui sont aussi inscrites dans
le journal interne, pour éventuellement reprendre les opérations en cas de panne qui
surviendrait durant ce retour arrière (Rollback).
L’annulation des modifications faites par une transaction (figure 2.21) ne perturbe pas le
fonctionnement des autres transactions, puisque celles-ci n’ont pas accès aux données modifiées
par la première en raison de lʹisolement des transactions. Dans plusieurs systèmes, le point de
sauvegarde est inscrit dans le JI et en plus dans une page de la liste LRT de recouvrement
propre à chaque transaction (Rollback Segment de Oracle) . Avec la commande ROLLBACK, les
tuples modifiés avant le point de sauvegarde A sont conservés verrouillés, tandis que ceux
insérés après ce point A sont annulés. Ces dernières données sont aussi déverrouillées et
deviennent dès lors visibles aux autres transactions. Les données modifiées avant le point de
sauvegarde A demeurent encore invisibles aux autres transactions. Elles sont toutefois toujours
disponibles pour la transaction en cours. Si la transaction est relativement courte, le retour en
arrière pourra être fait à partir de la liste LRT (segment de rollback). Cette opération est donc
rapide.
2.4 Procédure de checkpoint
En cas de défaillance, le système doit être capable de recouvrer un état cohérent de la base de
données et cela, après le redémarrage du SGBD. Il existe plusieurs approches de checkpoint,
chacune ayant une procédure particulière de recouvrement qui se manifeste par un arrêt plus ou
moins long des activités transactionnelles sur la BD. Nous en verrons deux : le checkpoint avec
une cohérence au regard du Commit et un autre avec une cohérence par rapport à la ZMP.
© A. Gamache 41
Chapitre 2 Architecture fonctionnelle du SGBD
CHKPT
T1
commit
T2 commit
panne
T3
temps
Figure 2.22
2- Les opérations transactionnelles en cours sur la base de données se poursuivent tant quʹil y a
une transaction non validée par un COMMIT.
3- Lors du checkpoint, les entrées du JI sont copiées dans le JE et toutes les pages de données
(LRU et celles de lʹextrémité MRU) modifiées sont aussi écrites sur disque. A ce moment
toutes les pages ont été validées par un Commit puisque toutes les transactions sont validées.
© A. Gamache 42
Chapitre 2 Architecture fonctionnelle du SGBD
1- Après le début du checkpoint lancé par le DBA, aucune autre nouvelle transaction ne peut
démarrer.
2- Les transactions actives ne sont ni arrêtées, ni en attente, mais elles ne peuvent plus
temporairement effectuer des modifications sur la base. Lʹexécution dʹune transaction est donc
interrompue momentanément.
Checkpoint
Panne
T1
T2
T3
T4
temps
Figure 2.23
3- Les entrées du journal JI sont copiées dans le JE et toutes les pages de données modifiées de la
ZMP sont aussi écrites sur disque pour en assurer la persistance.
4- À la fin du checkpoint, une entrée spéciale est faite dans le JE pour y inclure la liste des
transactions actives (TA) au début de la procédure de checkpoint.
Recouvrement
La procédure de recouvrement débute par un ROLLBACK des transactions actives (TA) suivie
par un ROLL FORWARD des transactions actives non validées. Les entrées du journal
fournissent pour chaque donnée, la valeur avant (AV) et la valeur après (AP) :
1- Le journal est lu dans le lʹordre inverse pour détecter le plus récent checkpoint et obtenir la
liste des transactions actives (TA).
2- Au cours de cette lecture à rebours des entrées du JE, les transactions validées rencontrées
sont notées dans une nouvelle liste temporaire TV.
3- Lorsque la lecture du JE atteint le CHECKPOINT, la liste TA est alors modifiée pour y enlever
les transactions validées.
4- Toutes les transactions sont défaites par un ROLLBACK. Ce retour en arrière peut aller en
amont du checkpoint et sʹarrête avec le début de la plus ancienne transaction parmi celles de
la liste TA.
© A. Gamache 43
Chapitre 2 Architecture fonctionnelle du SGBD
Voici un cas simple illustrant cette procédure de checkpoint avec cohérence des données :
© A. Gamache 44
Chapitre 2 Architecture fonctionnelle du SGBD
Avec lʹune ou lʹautre des deux procédures, une panne dʹinstance ou dʹapplication peut être
traitée sans lʹintervention du DBA. Il en sera autrement pour une panne de média comme un
disque. Dans ce cas, le DBA aura un rôle important dans la procédure de recouvrement pour
identifier la copie de sécurité à réutiliser pour reconstruire la partie de la base qui était sur le
disque en panne.
Avec une approche centralisée, l’augmentation du nombre des terminaux se traduit à partir dʹun
certain point par une baisse de performance qui peut être compensée par le remplacement de la
machine par une autre plus puissante ou par une deuxième machine centrale.
Temps de réponse
architecture
architecture
centralisée
client-serveur
Nombre dʹutilisateurs
Figure 2.24
Une deuxième machine centrale apporte cependant sa propre charge au niveau de la gestion des
processus qui annule en partie les effets escomptés au niveau de la performance générale pour
les clients. Le traitement est cependant toujours effectué au niveau de la machine centrale.
Lʹarchitecture client/serveur permet de maintenir plus facilement le niveau de performance en
dépit de lʹaugmentation de la charge générale parce que les traitements sont transférés vers les
clients. Le protocole de communication entre les machines du réseau est organisé en couches
autonomes.
© A. Gamache 45
Chapitre 2 Architecture fonctionnelle du SGBD
Le modèle OSI favorise l’interopérabilité des systèmes en isolant les caractéristiques des diverses
technologies dans des couches spécifiques et en normalisant les interfaces entre celles-ci. Ce
modèle normalisé par l’ISO (figure 2.25) se généralise chez les constructeurs et facilite
grandement l’intégration des ressources informatiques du monde entier. Il est une des pierres
d’assise des inforoutes qui visent à mailler la planète avec des nœuds de communication
implémentés par des ordinateurs très divers et utilisant des environnements fort variés.
Une configuration en réseau relie les stations par un bus Ethernet utilisant un lien de
communication rapide. Ce lien permet des vitesses de lʹordre de 100 mégabits par seconde. Ce
type de réseau est diffusant (broadcasting) et donc fait référence à une technologie multipoint.
Chaque machine reçoit les messages, mais ne retient que ceux qui la concerne. Ce type de
configuration est conforme au modèle ISO/OSI.
Site 1 Site 2
Protocole de transport
Échange de paquets
Réseau (3) Réseau (3)
Figure 2.25
À titre de rappel, voici les fonctions générales des différentes couches du modèle OSI :
Couche physique (1)
La couche physique transmet des bits sur le canal physique de transmission conformément à un
standard reconnu (Exemples : RS-232C, RS-449). A ce niveau, la technologie utilisée prend à sa
© A. Gamache 46
Chapitre 2 Architecture fonctionnelle du SGBD
Par contre, dans un réseau commuté non connecté et par paquet (ou datagrammes), le chemin
est déterminé pour chaque paquet de données (approche sans connexion). Le circuit virtuel est
refait à chaque transmission dʹun paquet. Cette couche prend donc à sa charge la conversion
dʹadresses et le routage entre réseaux. Dans un réseau de diffusion comme celui de lʹEthernet,
toutes les trames sont diffusées et le rôle de cette couche réseau est plutôt limité.
Couche transport (4)
La couche transport communique des messages (en provenanc de la couche 5) entre deux
nœuds en utilisant, pour les couches inférieures, la technologie propre au réseau sur lequel sont
connectées les machines source et cible. Pour ce faire, le message est divisé en paquets (packets)
qui sont réassemblés à destination par la machine réceptrice pour reconstituer le message
dʹorigine. C’est la couche TCP de ARPANET (Transport Control Protocol). Cette couche est
généralement utilisée en conjonction avec le protocole IP pour obtenir le protocole appelé
TCP/IP. Cette couche prend la relève de lʹécriture des octets dans une socket de lʹOS, pour
générer plusieurs appels de transport sur le réseau. Ces opérations sont effectuées par le logiciel
TCP/IP et sont donc masquées à lʹapplication.
© A. Gamache 47
Chapitre 2 Architecture fonctionnelle du SGBD
message 1
message 2 paquet 1 Suite de bits
paquet 2 trame 1 transformée
…
trame 2 en
message i …
trame 3 impulsions
Transaction paquet j
© A. Gamache 48
Chapitre 2 Architecture fonctionnelle du SGBD
Cette trame est encapsulée conformément au protocole Internet. Le schéma général de la trame
est donné ci-dessous.
Figure 2.25b
La trame technologique est transmise dʹune adresse IP source à une adresse IP cible (la
destination). Chaque adresse IP ( appartenant à une des classes A, B, C) comporte une partie
client (machine) et une partie réseau. Selon la classe de lʹadresse (identifiée par les deux
premiers bits), le nombre de bits alloués pour coder le réseau et la machine varie. Il devient
possible de représenter quelques réseaux et de nombreuses machines jusquʹau cas de figure
composé dʹun grand nombre de réseaux et dʹun petit nombre de machines.
Cette trame de données peut être transmise à travers les réseaux hétérogènes à la condition
quʹun GATEWAY puisse prendre en charge la transposition successive du format de la trame
technologique dʹorigine vers celui des destinations du réseau auquel est connecté le GATEWAY.
Chaque adresse dans une trame comporte deux parties spécifiées sur 32 bits : partie numéro du
réseau et partie numéro de machine. Par contre, si le lien se fait entre deux réseaux de même
nature, un BRIDGE ou un ROUTER (avec plus dʹintelligence) est utilisé pour acheminer les
paquets. Lorsque quʹune trame est destinée à une site au sein dʹun même réseau, la couche IP du
logiciel de télécommunication de la station demande à toutes les machines de ce réseau de faire
connaître leur adresse physique (adresse de liaison). Une fois lʹadresse physique connue et
ʹcachéeʹ par la station émettrice, le message est transmis en utilisant la trame propre au réseau
permettant ainsi de lʹacheminer directement sans autre transposition. Si un message doit être
transmis à une adresse IP hors du réseau dʹorigine, il est alors transmis en premier à sa
passerelle (gateway) qui lʹencapsule avec une trame technologique adéquate avant de lʹacheminer
à la passerelle ou au router suivant, dit de proximité.
segment réseau 1
50 ohms
réseau 2 (autre
répéteur gateway technologie)
transceiver
Router 2
machine 1
machine 2 réseau 3
© A. Gamache 49
Chapitre 2 Architecture fonctionnelle du SGBD
Sur réception de la trame par la passerelle suivante, celle-ci peut détecter si le message est arrivé
au réseau de destination ou sʹil doit être relayé à une autre passerelle. Les passerelles sont de
véritables ordinateurs, donc des nœuds essentiels dans un réseau de communication à grande
vitesse. Leur vitesse est critique, notamment lorsquʹil sʹagit de réseaux ATM ou à bande large.
Présentement, les vitesses de communication courantes sont de lʹordre de 100 mégabits par
seconde. Une nouvelle technologie de Nortel-Canada (OC-192) offre des possibilités encore plus
grande, soit de lʹordre du 10 gigabits par seconde. La technologie des communications se
développe donc avec une vitesse effarante. Il est question de vitesse frôlant les Pétabits par
seconde, soit un quadrillion de bits par seconde. Avec de telles vitesses, la téléphonie et la
télévision Internet deviendront des réalités. Il ne peut pas y avoir plus de 2.5 km entre deux
points de segments différents sans faire intervenir un répétiteur. Le protocole IP est nécessaire
puisque le transfert de la machine 1 à la machine 2 est effectué à travers des réseaux de
technologie différente.
Fonctions générales du client dans lʹexploitation dʹune base de données
La station cliente a une certaine puissance de traitement qui est mise à contribution pour des
opérations locales (13 ):
b) Le client transmet chaque requête (ordre DML) au serveur pour des fins d’analyse et
d’exécution.
c) Les fonctions d’un client sont exécutées sur un ordinateur qui est différent de celui du
serveur et plus adapté aux besoins locaux tout en assurant une meilleure extensibilité de
l’architecture (scalabitlity).
a)La zone des pages de données et des pages temporaires pour loger les résultats intermédiaires.
© A. Gamache 50
Chapitre 2 Architecture fonctionnelle du SGBD
c) La zone contenant les packages et les triggers, sous forme de code exécutable et optimisé. Un
package est chargé lors du premier appel d’une de ses procédures.
d) La zone des pages pour les données privées des applications dites PGA. Par exemple, les
constantes d’un ordre DML sont stockées dans une zone PGA privée qui est associée au curseur,
tandis que l’ordre DML source et son plan dʹexécution sont placés dans un autre espace du SGA
et dont lʹadresse est placée dans le curseur. Le curseur d’un ordre contient le nom de cet espace
dans le SGA.
Coopération entre les processus du SGBD Oracle en mode multithreading ( MTS)
Le système Oracle utilise deux catégories de processus, qualifiés respectivement d’utilisateur et
de système. La première est créée lors d’une connexion établie avec le SGBD et cela à travers un
réseau.
LGWR
Serveur de
station processus
client Dx
réseau (Accesseur)
Serveur de DBWR
Dx : processus créé pour gérer processus
(Accesseur)
les échanges avec le client.
Figure 2.30
Cette connexion est concrétisée, dans le cas dʹune configuration avec des Exécuteurs partagés,
par la création dʹun processus Dx, créé du côté du serveur et particulier à un protocole de réseau
(figure 2.30), dont le rôle est de voir aux échanges avec les clients incluant celui dʹacheminer
l’ordre DML au serveur de processus (SP). Cʹest aussi le processus Dx qui retourne la réponse à
lʹutilisateur. Ces processus Dx jouent en quelque sorte le rôle du client du côté du serveur. Si la
connexion entre le serveur de processus et le client est rompue, alors le module Dx pour ce client
devient orphelin et le module du SGBD chargé de libérer les ressources (PMON) pourra
identifier le processus orphelin et le supprimer. Normalement, la connexion reste ouverte et
active tant que l’application n’exécute pas un CLOSE (bd). Cette façon de faire est différente du
WEB dont la communication est ouverte et fermée pour chaque requête GET ou POST.
La deuxième catégorie comprend plusieurs processus qui coopèrent pour effectuer le calcul de
la réponse de la requête :DBWR, LGWR, CKPT, SMON, PMON, ARCH, Dx et LCKx. Ces
modules sont associés à un même processus Parent, soit celui correspondant au compte SYS.
Nous discuterons brièvement du rôle de chacun.
Serveur de processus (SP)
Ce serveur-logiciel est chargé de la communication avec les utilisateurs représentés au niveau
du serveur par les processus Dxxx. Cʹest essentiellement un serveur multi-threads de requêtes en
provenance des clients. Ce serveur-logiciel spécialisé est chargé de traduire l’ordre DML, de
créer l’espace curseur privé et public pour loger les tuples de la réponse, de demander la lecture
des pages de la BD au DBWR. Il a accès au SGA pour extraire les tuples et construire
© A. Gamache 51
Chapitre 2 Architecture fonctionnelle du SGBD
graduellement la réponse. Le client communique avec le SP via un ordre FETCH pour obtenir
un ou plusieurs tuples placés au préalable dans un curseur. Généralement, la communication est
maintenue jusquʹà la fermeture explicite de la connexion par le client.
Instance du noyau du SGBD Oracle
La notion d’instance Oracle est associée aux processus du logiciel et non à la base de données.
Le couplage entre lʹinstance et la base donne lieu à un système de BD. Au démarrage du SGBD,
un espace SGA est alloué et les processus dʹarrière-plan sont lancés.
Figure 2.31
Cette combinaison espace mémoire et processus, appelée instance, est identifiée par un suffixe
fourni par la variable système SID ou par le nom de la base de données rangé dans le fichier de
paramètres [Link]. Dans un environnement réparti, chaque instance doit avoir un
identificateur unique.
LGWR
ARCH
Fichier Journal
archive externe no 2
Figure 2.33
Une même base de données peut être rendue accessible à plusieurs instances, mais une instance
n’a accès qu’à une seule base de données à la fois. Les techniques d’implémentation peuvent
© A. Gamache 52
Chapitre 2 Architecture fonctionnelle du SGBD
changer selon les versions afin de tirer profit des nouvelles architectures matérielles disponibles.
Récemment, la commercialisation des serveurs multiprocesseurs a permis de mieux exploiter
lʹarchitecture multiserveur du SGBD, qui peuvent utiliser le parallélisme dans le calcul des
requêtes et offrir de meilleures performances.
Les processus du SGBD Oracle exécutés en arrière-plan constituent lʹinstance du SGBD :
DBWR (Database Writer) Ce processus effectue la lecture et lʹécriture des pages dans le SGA. Lors
dʹune recherche amorcée par le serveur de processus (SP), un premier accès au dictionnaire
fournit lʹadresse de la première page de chaque table et de chaque index disponible pour le
calcul.
A partir de ces index, lʹaccès aux pages de données est possible par la fonction INPUT(no-page).
La recherche dʹun emplacement pour lʹinsertion dʹune page de données dans le SGA par
lʹAccesseur débute par le parcours de la liste LRU sur une certaine longueur (lw) après quoi, le
DBWR évacue les pages DIRTY pour obtenir lʹespace nécessaire. La longueur de la liste à
parcourir est déterminée par un paramètre système initialisé dans le fichier [Link].
L’écriture dʹune page modifiée sur disque peut être nécessaire lorsque l’espace manque dans le
SGA. Lʹopération peut se dérouler selon une politique LRU de remplacement des pages.
Après la validation d’une transaction (par lʹordre COMMIT) les pages modifiées ne sont pas
écrites immédiatement sur disque, tandis que les entrées du journal de la transaction validée
sont transférées obligatoirement sur disque externe par le module LGWR. Lors de la création
dʹune table il est possible de spécifier que chaque page lue de la table soit plutôt placée dans la
partie LRU de la liste des pages (option CACHE de lʹordre CREATE TABLE). Ce placement
favorise les balayages séquentiels successifs dʹune même table.
Lʹécriture des pages sur disque par le DBWR est lancée sur les événements suivants :
2- Le processus de journalisation, le LGWR (Log Writer) voit à transférer les entrées du journal
interne appartement à une transaction sur le disque renfermant le journal externe (JE). Cette
écriture est faite lors de la validation d’une transaction ou si l’espace du SGA alloué au journal
interne vient à manquer. Lors dʹune validation transactionnelle, seules les entrées de celle-ci sont
écrites sur le journal externe.
3- CKPT (Checkpoint) À des intervalles réguliers ou lors de la saturation dʹun journal externe ou
lors de la bascule vers le deuxième journal externe, le contenu du SGA est écrit sur disque, ce
qui assure que les pages les plus actives (MRU) finissent par y être placées. En effet, avec une
politique LRU, ces pages MRU pourraient demeurer indéfiniment dans le SGA. Pour éviter cette
© A. Gamache 53
Chapitre 2 Architecture fonctionnelle du SGBD
situation, le module CKPT signale au DBWR de vidanger périodiquement la liste LRU du SGA.
Lors de cette opération, une estampille est écrite dans le journal externe et dans lʹen-tête des
fichiers modifiés suite à lʹécriture des pages transférées. Le module de checkpoint permet donc
de vidanger toute la zone ZMP des données validées afin dʹobtenir une base de données
cohérente.
CKPT
fichiers fichiers
Figure 2.34
5 -PMON (Process Monitor) Processus chargé de surveiller les divers autres processus (du
système et des usagers) et en cas dʹarrêt, de libérer les ressources acquises et, au besoin, les
relancer. Si une application-client est annulée, le module PMON est capable de détecter la
disparition dʹun usager (processus orphelin) via celle du processus Dxxx et dʹeffectuer un
rollback de la transaction en cours qui appartiendrait à ce client.
6- ARCH (Archiver) Processus chargé de copier le journal externe saturé vers un espace disque
d’archivage. Cʹest la seule façon de garantir la base contre toute défaillance du média du journal
externe ou dʹassurer la garde des pages du journal externe, qui seraient écrasées par la
réutilisation cyclique de lʹespace du journal externe ( JE).
© A. Gamache 54
Chapitre 2 Architecture fonctionnelle du SGBD
modification est aussi placée dans un journal interne (JI) qui enregistre toutes les modifications
faites par la transaction (images AV et AP) ainsi que celles des autres transactions. Si l’ordre
DML ne peut pas être complété correctement ou si lʹutilisateur effectue volontairement un
retour en arrière (Rollback), le retour en arrière se fait à partir de ces segments de reprise
(segment Rollback) piloté par le processus SMON. Cʹest ainsi que le système garantit l’atomicité
de chaque ordre DML. Ce retour est plus rapide parce que les segments de rollback dʹune
transaction ne contiennent que les modifications dʹune transaction.
Fichiers de contrôle
Lʹinstance SGBD utilise deux fichiers de contrôle pour accéder aux différents espaces de données
critiques gérés par le noyau SGBD. Au lancement, lʹinstance nʹa pas accès au dictionnaire, car
elle ne connaît pas lʹemplacement physique de la métabase (dictionnaire). Cʹest grâce aux
fichiers de contrôle que le SGBD peut connaître la localisation physique des divers fichiers,
notamment ceux du dictionnaire et des journaux de recouvrement. Tout changement aux
ressources physiques de la base de données comme lʹajout dʹun fichier, est noté dans le fichier de
contrôle par le SGBD. Ces fichiers de contrôle sont essentiels pour lancer et réussir une
opération de reprise et ils sont répliqués sur plusieurs disques et tous sont maintenus à jour
automatiquement par le SGBD.
2.7 Performance des logiciels SGBD
La mesure de la performance du traitement des transactions par un SGBD (en mode OLTP) est
complexe en raison des nombreux échanges qui interviennent entre les processus et des diverses
technologies qui sont mises en oeuvre dans lʹimplémentation dʹun tel logiciel. Avec une telle
complexité, il devient pratiquement impossible dʹévaluer la performance du logiciel par la seule
analyse des différentes techniques mises en oeuvre. Il faut faire appel aux bancs dʹessai. Ces
mesures empiriques sont significatives dans la mesure où les bancs dʹessai ont des structures
équivalentes, quʹun même protocole de test est utilisé et que lʹenvironnement matériel est
comparable.
Pour les bases de données relationnelles, le groupe Transaction Processing Performance Council
(composé de près de 40 sociétés et institutions, TPC) a élaboré un banc dʹessai connu sous le
nom de TPC-A destiné à mesurer la performance des SGBD relationnels (OLTP) capables de
fournir un rendement de lʹordre de 100 transactions par seconde (TPS). Les résultats de ces
mesures sont publiées et doivent être utilisés selon un code dʹéthique formulé par les membres
du TPC. En effet, la concurrence entre les manufacturiers de SGBD est telle que les résultats du
TPC-A peuvent devenir un argument de vente pour gagner de nouveaux marchés. Les écarts de
conduites sont dénoncés et les délinquants parfois sanctionnés par des rappels à lʹordre
(sanction en 3 étapes) et éventuellement par des pénalités financières.
Structure de la base de données du test TPC-A
La base de données est composée de 4 tables relationnelles exploitées par un grand nombre de
transactions (1000) concurrentes dont chacune comprend 3 mises à jour et une insertion. Voici la
composition de la base de données et de la transaction type utilisée pour les mesures.
© A. Gamache 55
Chapitre 2 Architecture fonctionnelle du SGBD
Les valeurs lues par les transactions ont été générées aléatoirement de sorte que la probabilité de
mise à jour dʹun tuple quelconque soit constante pour le test.
Contraintes opérationnelles
Le temps dʹun cycle (TC) est composé du temps de réponse (TR) plus le temps de réflexion de
lʹutilisateur (TU).
--- TC = TR + TU
Le TC doit être en moyenne dʹenviron 10 sec. En outre, 90% des transactions doivent avoir un
TR <= 2 sec, et le TU en moyenne égale ou plus grand que 8 sec. Voici un exemple de résultats
du banc dʹessai TPC-A pour quelques SGBD relationnel.
La mesure de la performance est exprimée par le nombre de transactions par seconde (TPS) qui
traduit une puissance transactionnelle brute sans égard aux coûts du matériel. Le facteur coût
regroupe les investissements, notamment pour la machine et les disques.
Il existe une certaine relation proportionnelle entre le TPS et le ratio Coût/TPS. Lʹaugmentation
de la performance TPS entraîne celle du coût par transaction. Ainsi, un même SGBD pourrait
avoir une performance bonifiée avec un facteur Coût/TPS. Pour un même ratio coût/TPS, les
différences de rendement peuvent être dues à lʹimplémentation des fonctionnalités du SGBD ou
à la configuration matérielle utilisée.
© A. Gamache 56
Chapitre 2 Architecture fonctionnelle du SGBD
Sommaire
L’évolution des modèles gérés par les SGBD renforce l’indépendance logique et physique des
applications et des données. L’importance grandissante des architectures client/serveur modifie
la répartition des tâches de traitement en laissant une plus grande place au site client qui pourra
maintenant mettre à profit sa capacité locale de traitement et de stockage. En dépit de ce
changement d’architecture, le rôle critique dans la gestion des données est toujours assuré par
un processeur principal appelé le serveur qui doit gérer adéquatement le multitâche
incontournable, l’entrelacement de données (multithreading) devenu essentiel, l’écoute du réseau,
synchroniser des actions sur la base de données et assurer la transmission des résultats vers le
client.
© A. Gamache 57
Chapitre 2 Architecture fonctionnelle du SGBD
Exercices
1- Supposez que la contrainte ci-dessous soit définie sur la base de données. Identifiez les
transactions qui se termineront toujours correctement et celles qui peuvent se terminer
incorrectement en entourant le commit dʹune transaction qui se termine correctement. Justifiez
chaque réponse pour chaque transaction. Les transactions débutent et se terminent dans lʹordre
croissant de leur numéro : T1< T2 < T3. Une transaction est exécutée entièrement avant que la
suivante débute.
La contrainte définie sur les données : 0 < X < Y. Au début la base de données est cohérente.
Références Chapitre 2
© A. Gamache 58
Chapitre 2 Architecture fonctionnelle du SGBD
1 CODD, E. F., Data Models in Database Management, Proceedings Workshop on Data Abstraction,
Databases and Conceptual Modeling, ACM SIGMOD v. 11, no 2, 1981.
2 GARZOTTO, F., PAOLINI, P., SCHWABE, D., HDM: A model-based approach to hypertext
application design , ACM Transactions of Office Information System, v. 11, no 1, 1993, p. 1-26.
3 ISAKOWITZ, T., STOHR, E., BALASUBRAMANIAN, P., RMM: A Methodology for Structured
Hypermedia Design , Communications of the ACM, v. 38, no 8, 1995, p. 34-44.
4 HALASZ, F. G., SCHWARTZ, M., The DEXTER hypertext reference model, Communications of
the ACM, v. 37, no 2, 1994, p. 30-39.
5 SCHNASE, J. L., LEGGETT, J. J., HICKS, D. L., SZABO, D. L., Semantic data modeling of
hypermedia associations , ACM Transactions of Information System, v. 11, no 1, 1993, p. 27-50.
6 STOTTS, P. D., FURUTA, R., Programmable Browsing Semantics in TREILLIS, In Hypertext
ʹ89 Proceedings, ACM Press, NY, 1989, p. 27-42.
7 GAMACHE, A., Base de données réseau VAX/DBMS, Librairie des Presses de l’Université Laval,
Québec, 1993, 100 p.
8 COMER D.E., STEVENS D. L., Internet Working with TCP/IP, Client/Server Programming
and Applications, volume 3, p.53
9 GRAY, J. REUTER A., Transaction Processing : Concepts and Techniques, Morgan Kaufmann
Publishers, 1993, ISBN 1-55860-190-2
10 ULKA, R., Unix Database Management Systems, Yourdon Press, Computing Series,1990, ISBN
0-13-945593-0.
11 SMINE, Hatem, ORACLE Architecture, Administration et Optimisation, Eyrolles, 1993, ISBN 2-
212-68016.
12 HL-7, Health Level Seven, version 2.1, Chicago, Illinois, Heath Level Seven Inc, 1990.
13 MIRANDA, S., RUOLS, A., Client-serveur : concepts, moteurs SQL et architectures
parallèles, Eyrolles, 1994, ISBN 2-212-08816-7.
© A. Gamache 59
2004-04-05
Source : [Link]
© André Gamache