SGBD : Bases de données avancées [M3106C]



Documents pareils
Bases de données et sites WEB Licence d informatique LI345

Cours Bases de données 2ème année IUT

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Cours de Base de Données Cours n.12

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

Réplication des données

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

UNION INTERCEPT SELECT WHERE JOINT FROM ACID

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Notes de cours : bases de données distribuées et repliquées

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Implémentation des SGBD

Bases de Données relationnelles et leurs systèmes de Gestion

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

TP Contraintes - Triggers

Bases de données avancées Concurrence d'accès et reprise

Olivier Mondet

Données Réparties. Thibault BERNARD.

Intégrité des données

Bases de données relationnelles

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

TP3 : Creation de tables 1 seance

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Le langage SQL (première partie) c Olivier Caron

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Réplication logique avec PostgreSQL 9.4

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

Bases de données et sites WEB

Projet gestion d'objets dupliqués

SQL Historique

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Auto-évaluation Oracle: cours de base

Compétences Business Objects

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Comprendre les bases de données

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Administration des bases de données. Jean-Yves Antoine

Cours Bases de données 2ème année IUT

Eléments de base de la sécurité des bases de données

Gestion des utilisateurs et de leurs droits

Les bases de données

Présentation du module Base de données spatio-temporelles

Administration des bases de données relationnelles Part I

Langage SQL : créer et interroger une base

Introduction au Système de Gestion de Base de Données et aux Base de Données

Systèmes de Gestion de Bases de Données

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

CREATION WEB DYNAMIQUE

Intégrité sémantique dans les bases de données relationnelles

1 Position du problème

Systèmes de Gestion de Bases de Données (SGBD) relationnels Maude Manouvrier

Module BDR Master d Informatique (SAR)

CHAPITRE 1 ARCHITECTURE

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

Le Langage De Description De Données(LDD)

A QUOI SERVENT LES BASES DE DONNÉES?

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Les systèmes de base de données temps réels. Pokrovskaya Natalia, Kabbali Nadia

Devoir Data WareHouse

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Serveurs. Catalogue de Supervision Zabbix 1.WINDOWS VERSIONS SUPPORTÉES SURVEILLANCE DE BASE LINUX...2

BTS/CGO P10 SYSTEME INFORMATION Année

Gestion de base de données

Historisation des données

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

CHAPITRE 4 POLITIQUES DE CONTRÔLES DES ACCÈS SOUS ORACLE ADMINISTRATION ET TUNING DE BASES DE DONNÉES 10/05/2015 RESPONSABLE DR K.

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

Année Universitaire 2009/2010 Session 2 de Printemps

Création et Gestion des tables

Partie II Cours 3 (suite) : Sécurité de bases de données

PHP 5. La base de données MySql. A. Belaïd 1

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Cours de Systèmes d Exploitation

A QUOI SERVENT LES BASES DE DONNÉES?

OpenPaaS Le réseau social d'entreprise

Modélisation et Gestion des bases de données avec mysql workbench

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Secteur Tertiaire Informatique Filière étude - développement. Accueil. Apprentissage. Période en entreprise. Evaluation.

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Matrice d accès. Master SEMS, Pierre Paradinas. October 16, 2013

Corrigés détaillés des exercices

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Synchronisation Mysql (Replication)

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Architectures haute disponibilité avec MySQL. Olivier Olivier DASINI DASINI - -

Bases de Données Réparties

Bases de Données Avancées

La replication dans PostgreSQL

Introduction aux SGBDR

Transcription:

SGBD : Bases de données avancées [M3106C] Hocine ABIR 10 septembre 2014 IUT Villetaneuse E-mail: abir@iutv.univ-paris13.fr

TABLE DES MATIÈRES 4 Gestion des Accès Concurrents sous PostgreSQL 1 4.1 Introduction............................... 1 4.2 Transaction................................ 1 4.3 "Transaction Isolation Mode"...................... 7 4.4 Vue consistente des données...................... 14 4.5 Mécanisme de verrouillage....................... 15 4.6 Modèle de Consistence Multi-version.................. 18 4.7 Multiversion avec 2PL.......................... 20 i

ii

CHAPITRE QUATRE Gestion des Accès Concurrents sous PostgreSQL 4.1 Introduction Postmaster Dameon Process spawn server process create Shared Disk Buffers Kernel Disk Buffer Postgres Server Read / Write Shared tables Disk Storage $ ps auxww postgres 1862 0.0 1.2 20172 3084? S 07 :20 0 :00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data postgres 1864 0.0 0.2 9960 560? S 07 :20 0 :00 postgres : logger process postgres 1866 0.0 0.4 20308 1056? S 07 :20 0 :00 postgres : writer process postgres 1867 0.0 0.2 10960 548? S 07 :20 0 :00 postgres : stats buffer process postgres 1868 0.0 0.2 10192 748? S 07 :20 0 :00 postgres : stats collector process postgres 2429 0.0 1.5 21084 4004? S 07 :21 0 :00 postgres : abir abir [local] idle in transaction postgres 6110 0.0 0.9 20848 2464? S 08 :43 0 :00 postgres : abir abir [local] DELETE waiting 4.2 Transaction 4.2.1 Structure d une transaction Une transaction peut être : Simple : c est à dire constituée d une seule requête SQL, comme dans l exemple suivant : 1

# DELETE FROM fournisseur -- Transaction 1 : Validée # WHERE fo_numero= F5 ; DELETE 1 # DELETE FROM fournisseur -- Transaction 2 : Avortée # WHERE fo_numero= F2 ; ERROR: update or delete on "fournisseur" violates \ foreign key constraint "commande_co_fournisseur_fk" \ on "commande" DETAIL: Key (fo_numero)=(f2) is still referenced \ from table "commande". # SELECT * FROM fournisseur; -- Transaction 3 : Validée fo_numero fo_nom fo_categorie fo_ville -----------+--------+--------------+---------- F2 Dupont 20 Paris F3 Dubois 20 Paris F4 Durant 10 Londres F1 Martin 10 Londres (4 rows) Composée : constituée d une ou plusieurs requêtes SQL contenues dans un bloc TRANSACTION et END TRANSACTION : TRANSACTION; <suite_de_requêtes> END TRANSACTION; Comme dans l exemple suivant : # TRANSACTION; -- Transaction 1 : Validée # DELETE FROM fournisseur # WHERE fo_numero= F1 ; DELETE 1 # select * from fournisseur; fo_numero fo_nom fo_categorie fo_ville -----------+--------+--------------+---------- F2 Dupont 20 Paris F3 Dubois 20 Paris F4 Durant 10 Londres (3 rows) # end transaction; COMMIT 2 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

# TRANSACTION; -- Transaction 2 : Avortée # DELETE FROM fournisseur abir@[local]<-abir-*# WHERE fo_numero= F2 ; ERROR: update or delete on "fournisseur" violates \ foreign key constraint "commande_co_fournisseur_fk" \ on "commande" DETAIL: Key (fo_numero)=(f2) is still referenced from \ table "commande". # SELECT * FROM fournisseur; ERROR: current transaction is aborted, commands \ ignored until end of transaction block # end transaction; ROLLBACK 4.2.2 Définition Une transaction est une unité : logique : la plus petit unité que l on peut exécuter, atomique : les requêtes qui la constituent sont indécomposables. Elle se termine de deux façons : 1. COMMIT : les mises à jour des requêtes qui la composent sont validées dans la base de données. On dit que la transaction est validée. 2. ROLLBACK : les mises à jour des requêtes qui la composent, sont annulées dans la base de données. On dit que la transaction est défaite ou avortée. TRANSACTION COMMIT ROLLBACK Une transaction est défaite si durant son exécution, une des requêtes qui la composent, engendre : 4.2. Transaction 3

Une erreur : # TRANSACTION; # INSERT INTO Commande # VALUES ( F2, P4,25); INSERT 203132 1 # INSERT INTO Commande VALUES ( F2,P8,25); ERROR: column "p8" does not exist # END TRANSACTION; ROLLBACK # SELECT * FROM Commande; co_fournisseur co_piece co_quantite ----------------+----------+------------- F2 P3 10 F3 P3 50 F3 P2 10 (3 rows) Une violation de contrainte d intégrité : # TRANSACTION; # INSERT INTO Commande VALUES ( F4, P3,22); INSERT 0 1 # INSERT INTO Commande VALUES ( F2, P8,25); ERROR: insert or update on table "commande" \ violates foreign key constraint \ "commande_co_piece_fk" DETAIL: Key (co_piece)=(p8) is not present \ in table "piece". # END TRANSACTION; ROLLBACK 4 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

# SELECT * FROM commande; co_fournisseur co_piece co_quantite ----------------+----------+------------- F2 P3 10 F3 P3 50 F3 P2 10 (3 rows) Un conflit d accès : transaction non sérialisable, blocage mutuel. # TRANSACTION; # SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET # SELECT * FROM fournisseur; fo_numero fo_nom fo_categorie fo_ville -----------+--------+--------------+---------- F2 Dupont 20 Paris F3 Dubois 20 Paris F4 Durant 10 Londres F1 Martin 10 Londres (4 rows) # DELETE FROM fournisseur WHERE fo_numero= F1 ; ERROR: could not serialize access due to concurrent update # END TRANSACTION; ROLLBACK # TRANSACTION; # DELETE FROM commande where co_fournisseur= F3 ; DELETE 2 # DELETE FROM commande where co_fournisseur= F2 ; ERROR: deadlock detected DETAIL: Process 1410 waits for ShareLock on transaction 71818;\ blocked by process 1858. Process 1858 waits for ShareLock on transaction 71819; \ blocked by process 1410. # END TRANSACTION; ROLLBACK 4.2. Transaction 5

4.2.3 Test ACID Une transaction est : A- Atomique : terminée normalement dans son intégralité c est à dire tout ou rien, C- Consistante : préserve les contraintes d intégrité, I- Isolée : non affectée par le comportement des autres transactions concurrentes, D- Durable : les mises à jour effectuées sont persistentes. 4.2.4 Gestion d une transaction Gestion Automatique : AUTOCOMMIT Le standard ISO SQL définit un modèle particulier de transaction : qui dit que toute connection à une base de données se fait dans une transaction. Chaque transaction se termine alors avec un COMMIT ou ROLLBACK et une nouvelle transation commence à la première requête suivant le COMMIT ou ROLLBACK (Oracle). D autres systèmes (PostgreSQL) définissent un mécanisme d auto-commit qui agit comme si après chaque requête, un COMMIT ou ROLLBACK est exécuté à chaque fois. # show autocommit; autocommit ------------ on # set autocommit to off; ERROR: SET AUTOCOMMIT TO OFF is no longer supported Annulation d une Transaction : ROLLBACK L annulation d une transaction consiste à défaire (ou annuler) les modifications effectuées par les requêtes qui composent la transaction. C est l action effectuée par défaut par END TRANSACTION quand la transaction est avortée. # TRANSACTION; # INSERT INTO commande VALUES ( F4, P5,50); INSERT 0 1 # ROLLBACK; ROLLBACK 6 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

# SELECT * FROM commande; co_fournisseur co_piece co_quantite ----------------+----------+------------- F2 P3 10 F3 P3 50 F3 P2 10 (3 rows) Validation d une Transaction : COMMIT La validation d une transaction consiste à rendre les modifications effectuées par la transaction permanentes (ou persistentes), en les intégrant dans la base de données. C est l action effectuée par défaut par END TRANSACTION quand la transaction n est pas avortée. # TRANSACTION; # INSERT INTO commande VALUES ( F4, P5,50); INSERT 0 1 # COMMIT; COMMIT # SELECT * FROM commande; co_fournisseur co_piece co_quantite ----------------+----------+------------- F2 P3 10 F3 P3 50 F3 P2 10 F4 P5 50 (4 rows) 4.3 "Transaction Isolation Mode" Le mode d isolation d une transaction décrit le comportement de la transaction dans un ordonnancement de transactions auquel elle participe. Le mode serialisable garantit que les transactions sont exécutées de façons equivalentes à un ordonnacement série : isolation complète ou parfaite. Le mode sérialisable entraine la chute des performances : plusieurs niveaux d isolation adaptés aux problèmes des accès concurrents. 4.3. "Transaction Isolation Mode" 7

4.3.1 Classification des Problèmes d accès Pour améliorer les performances et avoir des niveaux d isolation graduels et adaptés à différents contextes, la norme ANSI.ISO Sql standard (SQL92) a défini quatre (4) niveaux par rapport à trois (3) problèmes d accès. Ces problèmes appelés phénomènes sont définis par rapport au concept classique de sérialisation et d ordonnancements non-acceptables. 1. "reading uncommitted data" ou "dirty read" < WRIT E i (X), READ j (X), (ROLLBACK i COMMIT j ) > 2. non-repeatable (fuzzy) read < READ i (X), WRIT E j (X), COMMIT j, READ i (X), COMMIT i > 3. phantom read < READ i (C), WRIT E j (XinC), COMMIT j, READ i (C), COMMIT i > Dirty read Une transaction T i modifie une donnée A. Une autre transaction T j lit la donnée A avant que T i se termine (commit, rollback). Si T i effectue un ROLLBACK alors T j a lu une donnée A inconsistente. Transaction Tj temps Transaction Ti R A 3 6 Select A from R; Dirty Reads Update R set A=A*2 ROLLBACK R A 6 12 A 6 12 A 3 6 Fuzzy ou Non-reproductible read Dans une transaction T i, deux requêtes identiques (ou qui lisent un même ensemble de données A) lisent des ensembles de données différents : l ensemble des données lu par ces transactions ont été modifiés par une autre transaction T j terminée (committed). Transaction Ti Select A from R; temps Transaction Tj R A 3 6 Update R set A=A*2; commit; R A 6 12 Select A from R; R A 6 12 Lectures Non Répétitives 8 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

Phantom reads Dans une transaction, deux requêtes identiques (ou qui lisent un même ensemble de données) lisent des ensembles de données différents : l ensemble des données lu par ces transactions ont été modifiés par d autres transactions committed. Transaction Ti Select A from R; temps Transaction Tj R A 3 6 Select A from R; Insert (4) into R; commit; R R A 3 6 4 A 3 6 4 Phantom Read Les 4 niveaux de la norme ANSI.ISO Sql standard (SQL92) sont définis par rapport à ces classes d ordonnancement comme décrit dans la table suivante : Level Isolation Level Dirty R Non-repeatable R Phantom R 1 READ UNCOMMITTED possible possible possible 2 READ COMMITTED IMPOSSIBLE possible possible 3 REPEATABLE READ IMPOSSIBLE IMPOSSIBLE possible 4 SERIALIZABLE IMPOSSIBLE IMPOSSIBLE IMPOSSIBLE 4.3.2 Niveaux d isolation sous PostgreSQL 1. Read Committed [Niveau 2] (niveau par défaut) Chaque requête R exécutée par une transaction T peut accéder aux données mises à jour par une transaction terminée (committed) avant le début de la requête R (pas de la transaction T) : la requête n accède jamais aux données mises à jour par une transaction non terminée (uncommitted) [pas de dirty reads]. 2. Serializable [Niveau 4] Chaque requête exécutée par une transaction ne peut accéder qu aux données mises à jour par une transaction terminée (committed) avant le début de la transaction. 4.3.3 Choix du Niveau d Isolation SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 4.3. "Transaction Isolation Mode" 9

4.3.4 Niveau READ COMMITTED vs SERIALIZABLE Problème On considère la transaction T A suivante : UPDATE piece SET pi_poids=pi_poids + 1 WHERE pi_numero= P1 ; qui augmente le poids de pièce P1 de 1. Supposons qu une transaction T B effectue la même opération (i.e. le même tuple) avant le COMMIT de T A. T B doit attendre que T A se termine? Si T B utilise l ancienne valeur de pi_poids alors ce n est pas acceptable car l opération T A est perdue! Si T A se termine anormalement (ROLLBACK) alors T B peut poursuivre avec la valeur pré-existante de pi_poids. Transaction T A Transaction T B # TRANSACTION; # SELECT * FROM piece pi_numero pi_poids -----------+---------- P1 12.60 # UPDATE piece # SET pi_poids=pi_poids + 1 UPDATE 1 # ROLLBACK;<- ROLLBACK # TRANSACTION; # SELECT * FROM piece pi_numero pi_poids -----------+---------- P1 12.60 # UPDATE piece # SET pi_poids=pi_poids + 1 UPDATE 1 # SELECT * FROM piece pi_numero pi_poids -----------+---------- P1 13.60 10 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

Si T A se termine normalement, Que se passe-t-il? Si T B utilise l ancienne valeur de pi_poids alors ce n est pas acceptable car l opération T A est perdue! Si T B utilise la nouvelle valeur de pi_poids alors T B aura lu des données de transactions terminées (COMMIT) pendant son exécution : T B viole la règle d isolation des transactions Solution Deux modes d isolations : 1. READ COMMITTED : La transaction T B va poursuivre en lisant la nouvelle valeur de pi_poids. 4.3. "Transaction Isolation Mode" 11

Transaction T A # TRANSACTION; # SELECT pi_numero,pi_poids # FROM piece pi_numero pi_poids -----------+---------- P1 12.60 <- # UPDATE piece # SET pi_poids=pi_poids + 1 UPDATE 1 # COMMIT;<- COMMIT Transaction T B # TRANSACTION; # show transaction # isolation level; transaction_isolation ----------------------- read committed <- # SELECT pi_numero,pi_poids # FROM piece pi_numero pi_poids -----------+---------- P1 12.60 <- # UPDATE piece # SET pi_poids=pi_poids + 1 UPDATE 1 # SELECT pi_numero,pi_poids # FROM piece pi_numero pi_poids -----------+---------- P1 14.60 <- 2. SERIALIZABLE : La transaction T B va être avortée (ROLLBACK). 12 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

Transaction T A # TRANSACTION; # SELECT pi_numero,pi_poids # FROM piece pi_numero pi_poids -----------+---------- P1 12.60<- # UPDATE piece # SET pi_poids=pi_poids + 1 UPDATE 1 # COMMIT; COMMIT <- Transaction T B # TRANSACTION; # set transaction isolation # level serializable; SET # show transaction # isolation level; transaction_isolation ----------------------- serializable <- # SELECT pi_numero,pi_poids # FROM piece pi_numero pi_poids -----------+---------- P1 12.60 <- # UPDATE piece # SET pi_poids=pi_poids + 1 ERROR: could not serialize access due to concurrent update <- 4.3. "Transaction Isolation Mode" 13

4.3.5 Ordonnancement SERIALISABLE vs Ordonnancement SERIE Transaction T A # TRANSACTION; # set transaction isolation # level serializable; SET # INSERT INTO fournisseur # VALUES ( F1 );<- INSERT 0 1 # SELECT fo_numero # FROM fournisseur fo_numero ----------- F2 F3 F4 F1<- (4 rows)<- Transaction T B # TRANSACTION; # set transaction isolation # level serializable; SET # INSERT INTO fournisseur # VALUES ( F5 ); <- INSERT 0 1 # SELECT fo_numero # FROM fournisseur fo_numero ----------- F2 F3 F4 F5 <- (4 rows) <- Un ordonnancement SERIALISABLE au sens PostreSQL n est pas équivalent à un ordonnancement série! 4.4 Vue consistente des données 4.4.1 Définition Une vue consistente des données est constituées des données mises à jour par des transactions terminées normalement (committed) par rapport à un point temporel : le début de la transaction qui veut voir ces données. La consistence des lectures est assurée à deux niveaux : 1. Au niveau Requête : 14 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

La vue des données d une requête est consistente par rapport au début d exécution de la requête c est à dire que la requête n accèdent pas aux mises à jour effectuées par des transactions terminées durant l exécution de la requête. 2. Au niveau Transaction : La vue des données d une transaction est consistente par rapport au début d exécution de la transaction c est à dire que la reproduction des lectures est garantie. 4.4.2 Mise en oeuvre Sous PostgreSQL, la consistence des données vues par une transaction est assurée par : 1. un mécanisme de verrouillage à deux phases, 2. un mécanisme de Muti-Version. 4.5 Mécanisme de verrouillage 4.5.1 Degrès de Restriction de plus bas niveau possible Ce qui permet d avoir un degrès de concurrence élevé : seuls les WRITE sont en conflits (ou bloquants). Les lecteurs d un tuple n attendent pas les écrivains du même tuple, Les écrivains d un tuple n attendent pas les lecteurs du même tuple, Les écrivains d un tuple attendent d autres écrivains du même tuple, Read(a,A) Read(a,A) Write(a,A) Write(a,A) Pas de Conflit Conflit 4.5.2 Verrouillage à deux phases Le mécanisme de verrouillage utilisé est un mécanisme à deux phases : c est à dire qu une transaction T i ne peut voir que les données mises à jour par une transaction T j terminée (committed) avant le début de T i 4.5. Mécanisme de verrouillage 15

Verrous LOCKs Commit UNLOCK T active T commit temps Verrouillage à DEUX Phases Verrous Niveau-Table Une table peut être verrouillée automatiquement en fonction du type de requête suivant plusieurs modes. Ces verrous sont nécessaires pour prévenir certaines opérations destructives. Verrou commandes En conflit avec 1 ACCESS SHARE SELECT, ANALYZE 8 2 ROW SHARE SELECT FOR UPDATE, SE- 7,8 LECT FOR SHARE 3 ROW EXCLU- UPDATE, DELETE, INSERT 5,6,7,8 SIVE 1 sur les autres tables referenciees 4 SHARE UPDATE VACUUM 4,5,6,7,8 EXCLUSIVE 5 SHARE CREATE INDEX 3,4,6,7,8 6 SHARE ROW EX- 3,4,5,6,7,8 CLUSIVE 7 EXCLUSIVE 2,3,4,5,6,7,8 8 ACCESS EXCLU- ALTER TABLE, DROP 1,2,3,4,5,6,7,8 SIVE TABLE, REINDEX, CLUS- TER, VACUUM FULL Verrous Niveau-Tuple Verrou commandes En conflit avec 1 SHARED SELECT FOR SHARE 2 2 EXCLUSIVE INSERT, DELETE, UPDATE, SELECT FOR UPDATE, 2 16 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

Exemple # TRANSACTION; # SELECT * FROM piece WHERE pi_numero= P1 ; pi_numero pi_nom pi_poids pi_couleur -----------+--------+----------+------------ P1 Vis6 12.60 rouge # SELECT relname,transaction,mode,granted FROM pg_class c,pg_locks WHERE relation=c.oid AND relname= piece ; relname transaction mode granted ---------+-------------+-----------------+--------- piece 25237 AccessShareLock t # END TRANSACTION; COMMIT 4.5.3 Verroouillage manuel Verrou Access Share Row Share Row Exclusive Share Share Row Exclusive Exclusive Access Exclusive Commande LOCK TABLE <table> IN ACCESS SHARE MODE LOCK TABLE <table> IN ROW SHARE MODE LOCK TABLE <table> IN ROW EXCLUSIVE MODE LOCK TABLE <table> IN SHARE MODE LOCK TABLE <table> IN SHARE ROW EXCLUSIVE MODE LOCK TABLE <table> IN EXCLUSIVE MODE LOCK TABLE <table> IN ACCESS EXCLUSIVE MODE 4.5. Mécanisme de verrouillage 17

Exemple Transaction T A # TRANSACTION; # show transaction # isolation level; transaction_isolation ----------------------- read committed <- # LOCK TABLE fournisseur # IN SHARE ROW EXCLUSIVE MODE; LOCK TABLE<- # SELECT fo_numero # FROM fournisseur fo_numero ----------- F2 F3 F4 F1 (4 rows) Transaction T B SELECT... SELECT... FOR UPDATE 4.5.4 Compatibilté des verrous La table ci-dessous donne la compatibilité des verrous Niveau-Table : Verrous Modes Compatibles AS RS RX S SRX X AX AS OUI OUI OUI OUI OUI OUI NON RS OUI OUI OUI OUI OUI NON NON RX OUI OUI OUI NON NON NON NON S OUI OUI NON OUI NON NON NON SRX OUI OUI NON NON NON NON NON X OUI NON NON NON NON NON NON AX NON NON NON NON NON NON NON 4.6 Modèle de Consistence Multi-version 4.6.1 Définition le terme Muti-Version désigne le fait de fournir pour chaque requête (ou transaction) sa propre version de données consistantes par rapport au début d exécution de la requête (ou transaction). 18 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

4.6.2 Principe Ne pas modifier les données de la base (de données) mais créer de nouvelles (versions de) données. Chaque tuple contient 4 champs additionnels : Champs Description OID Identificateur unique de l enregistrement Xmin Identificateur de la Transaction d Insertion Tmin Heure du commit de Xmin ou A partir de quand l enregistrement est valide Cmin Identifiant de la commande d Insertion Xmax Identificateur de la Transaction de Suppression Tmax Heure du commit de Xmax ou A partir de quand l enregistrement est invalide Cmax Identifiant de la commande de Suppression PTR liste des enregistrements delta # select xmin,cmin,xmax,cmax #,pi_numero from piece; xmin cmin xmax cmax pi_numero -------+------+------+------+----------- 25179 0 0 0 P1 25180 0 0 0 P2 25181 0 0 0 P3 25182 0 0 0 P4 (4 rows) Insertion d un tuple Quand un tuple est inserré par la commande SQL INSERT INTO, un nouvel enregistrement est ajouté au fichier de la relation avec : Un nouveau identifiant OID, Et les champs Xmin et Cmin recoivent l identifiant de la transaction courante d insertion, Les autres champs additionnels restent NULL. Suppression d un tuple Quand un tuple est supprimé par la commande SQL DELETE FROM, l enregistrement qualifié par la clause WHERE est recherché dans le fichier de la relation et les champs additionnels sont modifiés comme suit : les champs Xmax et Cmax recoivent l identifiant de la transaction courante de suppression : l enregistrement devient invalide, Les autres champs additionnels restent inchangés. Mise à jour d un tuple Quand un tuple est mis à jour par la commande SQL UPDATE, deux opérations sont alors effectuées : 1. Suppression : L enregistrement qualifié par la clause WHERE est recherché dans le fichier de la relation et les champs Xmax et Cmax recoivent l identifiant de la transaction de mise à jour. : l enregistrement devient invalide. 4.6. Modèle de Consistence Multi-version 19

2. Insertion : Un nouvel enregistrement avec les mises à jour est inséré dans le fichier avec : Un même identifiant OID que celui de l enregsitrement supprimé, Et les champs Xmin et Cmin recoivent l identifiant de la transaction courante de suppression, Les autres champs additionnels restent NULL. 4.6.3 Visibilité : "Snapshots" A chaque accès à un enregistrement, le système doit vérifier la validité de cet enregistrement à l instant correspondant à l accès. Les champs T min et T max sont estampillés au moment du commit d une transaction c est à dire de façon asynchrone. La recherche d un tuple ayant une qualification qual à un instant T est déterminé par le test suivant : Tmin <T et Xmin committed et qual ou ou Xmax NULL [1] Xmax not committed [2] T<Tmax [3] Validité Ce test exprime le fait que seul les enregistrements créés par des transactions terminées normalement à l instant T sont accessibles et ils doivent de plus avoir soit : [1 ] Xmax = NULL (ou T max = NULL) : aucune mise à jour n est faite ou est en train de se faire sur cet enregistrement, ou [2 ] il y a une transaction en cours qui met à jour cet enregistrement donc la version actuel est valide, ou [3 ] il y a une transaction qui a modifié cet enregistrement (Xmax committed), mais elle s est terminé après la transaction en cours de consultation. 4.7 Multiversion avec 2PL 4.7.1 Lecture Une transaction (ou commande) de lecture reçoit un estampille déterminée à partir de la valeur courante de ts_counter au moment de son initialisation. 4.7.2 Mise à jour Une transaction (ou commande) de mise à jour acquière deux verrous : read, write qu elle conserve jusqu au commit : 20 Chapitre 4. Gestion des Accès Concurrents sous PostgreSQL

chaque écriture terminée avec succès entraine la création d une nouvelle version de la donnée écrite, chaque version de donnée a un estampille Xmin dont la valeur est obtenu d un compteur ts_counter au moment du commit. 4.7.3 Production d ordonnancement sérializable Lecture 1. Une commande de Lecture d un tuple : obtient un verrou AS sur ce tuple, incrément le compteur ts_counter : ts_counter + + estampille de la transaction est ts_counter. le protocole de lecture suit le protocole d estampillage : rechercher une version tr du tuple t telque : T min tr = max(t min t /T min t < estampille_transaction) 2. Au moment du commit de la transaction : lève le verrou AS Mise à jour 1. Une transaction de Maj d un tuple : obtient un verrou RS sur ce tuple, lit la dernière version du tuple, obtient un verrou RX sur ce tuple, crée une nouvelle version du tuple avec T min = 2. Au moment du commit de la transaction : incrément le compteur ts_counter : ts_counter + + valide la maj : T min = ts_counter lève le verrou RS et RX 4.7. Multiversion avec 2PL 21