Академический Документы
Профессиональный Документы
Культура Документы
Une transaction est un ensemble d'ordres SQL qui ont pour objectifs de faire passer la base de donnes, en une seule tape d'un tat cohrent un autre tat cohrent. La transaction comporte un dbut, une suite d'ordres SQL et une fin. Si la transaction choue les modifications dj effectues sont annules : ROLLBACK. Si l'ensemble des requtes peuvent s'excuter la transaction est valide : COMMIT
Exemple
Transfert bancaire :
End transaction
Le gestionnaire de transactions
Atomicit : Tout ou rien Cohrence : Satisfaction des contraintes d'intgrit Isolation : Pas d'interfrences entre les transactions Durabilit : Permanence des modifications effectues
L'atomicit
Excution en tout (COMMIT) ou rien (ROLLBACK) La proprit d'atomicit est respecte par le schma d'excution suivant :
Dbut transaction
Action1, action2, action3 ... Si toutes les actions sont correctement excutes Alors Valider la transaction (COMMIT) Sinon Annuler ses effets (ROLLBACK) Fin Si
Fin transaction
La cohrence
La cohrence satisfait les contraintes d'intgrit Une transaction doit faire passe la base d'un tat correct un autre tat correct L'ordre des oprations d'une transaction est important Excuter les oprations dans un autre ordre peut conduire des situations ne vrifiant plus les contraintes d'intgrit
L'isolation
T2
Si l'ordre des transactions est T11, T12, T21, T22, T13, T23 l'effet de l'opration est perdue
La durabilit
Permanence des modifications effectues Cette permanence doit tre vrifie en cas de panne matrielle ou logicielle Le fait que des modifications de donnes par une transaction ne soit par rpercutes dans la base avant leurs utilisations par une autre transaction peut occasionner des problmes Les fichiers journaux permettent de palier au non respect de cette proprit
Le SGBD permet plusieurs transactions de s'excuter paralllement Chaque transaction doit avoir l'impression d'tre la seule utiliser la base Le SGBD cherche maximiser le nombre de transactions et minimiser les temps d'excution
Notion d'ordonnancement
Le processeur partage son temps entre les diffrentes transactions Les lectures/critures des diffrentes transactions en cours peuvent tre entrelaces Les oprations de lecture/critures peuvent provoques des interfrences si elles s'intressent aux mmes objets La solution est la srialisabilit : un ordonnancement est correct s'il est quivalent au moins un ordonnancement squentiel des mmes transactions.
Le verrouillage
Une transaction verrouille l'objet obligeant les autres transactions attendre que l'objet se libre L'objet ou granule est l'unit verrouille. Il peut s'agir selon le cas de la base de donnes, d'une relation, d'un tuple ou d'un attribut. Le verrou peut-tre binaire, appos sur un granule, rendant celui-ci accessible ou inaccessible
Le verrouillage (suite)
Share : permet aux autres transactions de lire la donne (select) Exclusive : la transaction dtient le granule pour modifier la donne (update, insert, delete)
Share Exclusive Share Oui Non Exclusive Non Non
Demande d'une transaction
Verrou appos
Dans un premier temps la transaction ne peut que verrouiller les donnes dont elle besoin, dans un second temps elle ne peut que les dverrouiller Pour viter la situation d'interblocage, si la transaction n'arrive pas verrouiller l'ensemble des donnes dont elle besoin elle doit les dverrouiller
Mthode d'estampillage
Estampille : identifiant qui dfinit l'ordre des vnements Toute transaction reoit une estampille qui reprsente le moment o elle commence Chaque objet conserve les estampilles read et write de la dernire transaction Une transaction ne peut lire ou crire un objet que si son estampille est suprieure l'estampille correspondante de l'objet
Segments d'annulation
Appels galement rollback segments Contiennent les anciennes valeurs des enregistrements en cours de modification dans la transaction. Ces segments sont utiliss :
Pour assurer une lecture consistante des donnes Pour annuler des transactions En cas de restauration
Qu'au sein d'un ordre SQL les donnes ne changeront pas Les lectures ne seront pas bloques par des utilisateurs effectuant des modifications Les modifications ne seront pas bloques par utilisateurs effectuant des lectures Un utilisateur ne peut lire les modifications effectues par un autre si elles n'ont pas t valides
Un segment d'annulation est partage par un certain nombre de transactions L'entte d'un segment d'annulation contient une table des transactions ayant des entres dans le segment Les critures dans les rollback segments sont galement journaliss (redo logs)
Un rollback segment est un espace physique contenant des rollback entries Chaque entre contient :
L'identification du fichier de donnes L'identification du bloc contenant les donnes modifies La valeur avant modification de la donne
Les entres correspondant une mme transaction sont chanes entre elles
MySQL supporte plusieurs moteurs de stockage, qui gre diffrents types de tables. Les moteurs de tables MySQL peuvent tre transactionnels ou non-transactionnels. Lorsque vous crez une table, vous pouvez indiquer MySQL le type de table avec la clause ENGINE
CREATE TABLE t (i INT) ENGINE = INNODB;
Si vous omettez ENGINE, le type de table par dfaut sera utilis. C'est gnralement MyISAM. Cela peut tre chang en modifiant la variable systme table_type.
Moteurs non-transactionnels
Le moteur de tables originel tait ISAM, qui grait des tables non-transactionnelles. Ce moteur a t remplac par le moteur MyISAM Le moteur HEAP propose des tables stockes en mmoire Le moteur MERGE permet le regroupement de tables MyISAM identiques sous la forme d'une seule table
Moteurs transactionnels
Les moteurs InnoDB et BDB grent des tables transactionnelles NDBCluster est le moteur de stockage du cluster MySQL qui implmente des tables rparties sur plusieurs serveurs.
MySQL cre toujours un fichier .frm pour stocker le type de la table et les informations de dfinition. Le serveur cre le fichier .frm par dessus le moteur de stockage. Les moteurs peuvent crer des fichiers supplmentaires, en fonction de leurs besoins.
Plus sr. Mme si MySQL crashe ou que vous avez un problme matriel, vous pouvez rcuprer vos donnes, soit par un recouvrement automatique, soit partir d'une sauvegarde combine avec le log des transactions. Vous pouvez combiner plusieurs commandes et les accepter toutes d'un seul coup avec la commande COMMIT. Vous pouvez utiliser ROLLBACK pour ignorer vos modifications (si vous n'tes pas en mode autocommit).
Si une mise jour choue, tout vos changements seront annuls. (Avec les tables non-transactionnelles tous les changements oprs sont permanents) Gre mieux les accs concurrents si la table reoit simultanment plusieurs lectures.
Plus rapides Utilisent moins d'espace disque Utilisent moins de mmoire pour excuter les mises jour.
mysql> select table_name, engine -> from information_schema.tables -> where table_schema='sakila' -> and table_type='base table';
Gestionnaire de table transactionnelle (compatible ACID), avec validation (commits), annulations (rollback) et capacits de restauration aprs crash. Utilise un verrouillage de lignes, et fournit des lectures cohrentes comme Oracle, sans verrous.