Rendez-vous Firebird RMLL 2007



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

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

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

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

//////////////////////////////////////////////////////////////////// Administration bases de données

CHAPITRE 1 ARCHITECTURE

COMPOSANTS DE L ARCHITECTURE D UN SGBD. Chapitre 1

Implémentation des SGBD

Installation et Mise en œuvre de MySQL

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

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

Qui est Sybase ianywhere?

Guide d'installation et de configuration de Pervasive.SQL 7 dans un environnement réseau Microsoft Windows NT

Réplication des données

LES ACCES ODBC AVEC LE SYSTEME SAS

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

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

Logiciel de création de badges personnalisés.

Mercredi 15 Janvier 2014

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

MySQL. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

Introduction à MySQL (ou MySQL en 3 heures montre en main)

Cours de Base de Données Cours n.12

WDpStats Procédure d installation

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

Projet gestion d'objets dupliqués

Optimisations des SGBDR. Étude de cas : MySQL

Bases de données cours 1

MOTEUR DE WORKFLOW Mise en oeuvre d'openwfe Version septembre 2006

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

Du 10 Fév. au 14 Mars 2014

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Visual Paradigm Contraintes inter-associations

Administration des bases de données relationnelles Part I

MYSQLDUMP & ZRM COMMUNITY

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

Architecture de la plateforme SBC

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

Cours Bases de données

Mysql. Les requêtes préparées Prepared statements

Compte Rendu d intégration d application

Introduction aux SGBDR

Programme détaillé. Administrateur de Base de Données Oracle - SQLServer - MySQL. Objectifs de la formation. Les métiers

Installation SQL Server 2005 Express sur le serveur

Oracle Learning Library Tutoriel Database 12c Installer le logiciel Oracle Database et créer une Database

Oracle 11g Optimisez vos bases de données en production (ressources matérielles, stockage, mémoire, requêtes)

Mise en route et support Envision 10 SQL server (Avril 2015) A l'intention de l'administrateur SQL Server et de l administrateur Envision

Oracle Database 11g: Administration Workshop I Release 2

Développement de base de données Microsoft SQL Server Durée : 5 jours Référence : DPSQL12. Contenu

Test de HSQLDB et Comparatif avec Sqlite

Formation en Logiciels Libres. Fiche d inscription

UNION INTERCEPT SELECT WHERE JOINT FROM ACID

PDO : PHP Data Object 1/13

Création d'une nouvelle base de données

OpenPaaS Le réseau social d'entreprise

PHP 4 PARTIE : BASE DE DONNEES

Service Systèmes et Réseaux

Notion de base de données

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

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

TP Contraintes - Triggers

CATALOGUE FORMATIONS DOMAINE Bases de données

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Les bases de données Page 1 / 8

Documentation Utilisateur/Développeur. Client de Monitoring CamTrace

Nouvelles Plateformes Technologiques

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

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

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

Bases de données et sites WEB

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

Une famille d'applications permettant à toute organisation d'optimiser le suivi et la gestion de ses ressources internes vous présente

Information utiles. webpage : Google+ : digiusto/

Présentation du PL/SQL

Oracle Maximum Availability Architecture

Introduction aux Bases de Données Relationnelles Conclusion - 1

Olivier Mondet

III. Contexte. Objectifs. Philippe HOUE, Ecole des Mines de Nantes

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

Module BDR Master d Informatique (SAR)

COMPRENDRE LES DIFFERENTS TYPES DE CONNEXION LORS DE LA

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

Bases de données relationnelles : Introduction

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

420-PK6-SL Banques de données Avancées UTILISATEURS

Introduction aux bases de données

Guide d installation de SugarCRM Open Source version 4.5.1

TP11 - Administration/Tuning

CATALOGUE FORMATION 2014

Installation des moteurs SQL Pour Micro-SESAME

La problématique de la Préservation des Bases de Données. Olivier ROUCHON CINES Groupe PIN Jeudi 7 Octobre

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

Corrigé de l'atelier pratique du module 3 : Récupération d'urgence

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Transcription:

Rendez-vous Firebird RMLL 2007 Les Transactions Pierre Yager CRISALID pierre@crisalid.com

Les Transactions Concepts Métriques : ACID SQL Isolement Côté Serveur Côté Client Conseils, Questions Ouvertes

Concepts SGBD : Système de Gestion de Bases de Données... SGBD-"R" :... Relationnelles! Client-Serveur : Gestion de la concurrence Verrouillage Pessimiste vs Optimiste Firebird : MGA Tout est transaction!

ACID Theo Haërder & Andreas Reuter (1983) Métriques de l'efficacité d'un système transactionnel Atomicité : Tout ou Rien Cohérence : Le système reste stable Isolement : Perméabilité du système aux différentes transactions actives Durabilité : Persitance des informations

SQL Norme fonctionnelle : pas de proposition ou d'exigences sur l'implémentation Décrit le concept de transaction d'après les "phénomènes" qu'elles autorisent Pas représentatif de l'architecture Multi- Générationnelle de Firebird

SQL // ACID Les "phénomènes" dépendent du niveau d'isolement des Transactions L'Isolement est la seule variable d'ajustement manipulable par le développeur

Isolement // SQL SQL décrit 4 niveaux d'isolement READ UNCOMMITED READ COMMITED REPETABLE READ SERIALIZABLE Deux niveaux supplémentaires par Berenson/Bernstein CURSOR STABILITY SNAPSHOT

Isolement // Firebird Firebird propose 3 niveaux d'isolement des transactions READ COMMITED SNAPSHOT (CONCURENCY) TABLE STABILITY (CONSISTENCY) On peut les affiner à l'aide des blocs de paramétrage des transactions (TPB) pour reproduire ou simuler les niveaux d'isolement normalisés

Phénomènes P0 "Dirty reads" Une transaction T1 modifie un enregistrement. Une autre transaction T2 modifie aussi cet enregistrement avant que T1 n'ait exécuté un COMMIT ou un ROLLBACK. Si T1 ou T2 exécute un ROLLBACK, on ne sait pas quelle devrait être la valeur de l'enregistrement.

Phénomènes P1 "Dirty writes" Une transaction T1 modifie un enregistrement. Une transaction T2 lit le même enregistrement avant que T1 n'ait exécuté un COMMIT ou un ROLLBACK. Si T1 effectue un ROLLBACK, T2 aura lu un enregistrement qui n'a jamais été validé et qui, par conséquent, peut être considéré comme n'ayant jamais existé.

Phénomènes P2 "Non Repetable Reads" Une transaction T1 lit un enregistrement. Une transaction T2 modifie ou supprime cet enregistrement et effectue un COMMIT. Si T1 essaye de relire l'enregistrement, il reçoit l'enregistrement modifié ou découvre que l'enregistrement a été supprimé.

Phénomènes P3 "Fantômes" Une transaction T1 lit un ensemble d'enregistrements N qui satisfont la condition <condition de recherche>. Une transaction T2 exécute des opérations SQL qui vont générer un ou plusieurs enregistrements qui satisfont la même <condition de recherche> utilisée par T1. Si T1 répète la lecture initiale avec la même <condition de recherche>, elle obtient une collection d'enregistrements différente.

Phénomènes P4 "Lost Updates" Une transaction T1 lit un enregistrement. Une Transaction T2 modifie le même enregistrement que T1 a lu (d'après, par exemple, une lecture qu'elle aurait fait avant). T1 modifie l'enregistrement et exécute un COMMIT. A ce moment, même si T2 exécute un COMMIT, la mise à jour effectuée par T2 est perdue.

Isolement // Phénomènes READ UNCOMMITED P0 P1 P2 P3 P4 NON OUI OUI OUI OUI READ COMMITED NON NON OUI OUI OUI CURSOR STABILITY REPETABLE READ NON NON O/N OUI O/N NON NON NON OUI NON SNAPSHOT NON NON NON O/N NON SERIALIZABLE NON NON NON NON NON

Firebird / ISQL SET TRANSACTION [NAME <Transaction Name> ] [ READ WRITE ] [ READ ONLY ] [ WAIT [ LOCK TIMEOUT n ] ] [ NO WAIT ] [ NO AUTO UNDO ] [ ISOLATION LEVEL ] { SNAPSHOT [ TABLE STABILITY ] READ COMMITED [ [ NO ] RECORD VERSION ] } [ RESERVING <reserving-clause> USING <db-handle> [, dbhandle... ] ]; <reserving-clause ::= <table> [, <table>... ] [ FOR [ SHARED PROTECTED ] { READ WRITE } ] [, <reserving-clause> [, <reserving-clause>... ] ]

Firebird // TPB Mode d'accès Niveau d'isolement isc_tpb_read isc_tpb_read_commited isc_tpb_write isc_tpb_concurrency Résolution des blocages isc_tpb_wait isc_tpb_consistency Réservation explicite isc_tpb_nowait isc_tpb_shared isc_tpb_lock_timeout isc_tpb_protected Accès aux enregistrements isc_tpb_lock_read isc_tpb_lock_write isc_tpb_rec_version isc_tpb_no_rec_version Options isc_tpb_no_auto_undo

Séquence

Et à la fin? COMMIT (Hard-Commit) rend les modifications persistantes. Au retour de COMMIT le client a la garantie que les propriétés ACID sont respectées. ROLLBACK annule toutes les modifications. N'échoue JAMAIS! COMMIT et ROLLBACK libèrent toutes les ressources liées à la transaction COMMIT RETAINING (Soft-Commit) rend les modifications persistantes et garde le contexte de la transaction actif.

MGA Conserve toutes les versions intéressantes des enregistrements. Transactions READ COMMITED accèdent au TSP (Transaction State Bitmap) global. SNAPSHOT [TABLE STABILITY] disposent d'une copie du TSP jusqu'à ce qu'elles soient terminées. Le Garbage Collector rend disponible l'espace utilisé par les versions des enregistrements qui ne sont plus intéressantes. Le Sweep fait le ménage dans les versions issues de transactions annulées et permet à GC de faire son travail.

Interesting? Les versions des enregistrements et les transactions intéressantes sont toutes celles qui n'ont pas été Hard-Commited (COMMIT) : Actives Limbo Dead Annulées (ROLLBACK) Soft-Commitées (COMMIT RETAINING) Pas de Garbage Collector

Cas du ROLLBACK Si le journal d'annulation automatique (Auto Undo Log) est actif, les modifications sont "annulées" et la transaction est COMMITED! Sinon la transaction est marquée ROLLED-BACK et il faut attendre que le SWEEP décide quelles versions des enregistrements sont (ou pas) intéressante pour que le Garbage Collector fasse le ménage

En cas de problème En cas de violation des contraintes d'intégrité référentielles et structurelles (domaine de définition des types de données, check, clés étrangères, index uniques...) une exception est levée mais le serveur ne ROLLBACK rien par lui même, c'est au développeur de décider quoi faire. Parfois l'erreur est récupérable et la transaction peut-être COMMITED

OIT, OAT, NT et le "GAP" Oldest Interesting Transaction est la plus ancienne transaction qui n'a pas été hardcommited Oldest Active Transaction est la plus ancienne transaction active (pas hardcommited, pas rolled-back, pas limbo) Next Transaction est le numéro de la prochaine transaction Gap : différence entre OIT et OAT et entre OAT et NT

Lecture Seule Les transactions au niveau d'isolement READ COMMITED en lecture seule : READ ONLY ne "collent pas" l'oit et l'oat et n'interfèrent pas dans les mécanismes d'auto-nettoyage du système Ne pas confondre avec une transaction READ WRITE, même READ COMMITED qui ne ferait qu'un "Simple SELECT"!

Comparaisons Firebird MySQL PostgreSQL Oracle SQL Server SQLite Transactions Oui InnoDB Oui Oui Oui Non ROLLBACK partiels Oui InnoDB Oui Oui Oui Non Réservations Oui InnoDB Oui Oui Oui Non Détection et gestion des verrous Choix du niveaux d'isolement Transactions Distribuées Oui Oui Oui Oui Oui Non Oui InnoDB Oui Oui Oui Non Oui Non 8.1 Oui Oui Non

Côté Serveur PSQL (Procédures Stockées, Triggers) permet d'écrire du code exécuté au sein du serveur. Pas de gestion explicite des transactions (BEGIN/COMMIT/ROLLBACK) Les SAVEPOINTS internes et les EXCEPTIONS permettent de gérer les problèmes.

Côté Client Composants, librairies ou connecteurs libres pour Firebird : UIB (Delphi, Lazarus) IBPP (C++) JayBird (Java) * Firebird.NET Provider (.NET, Mono) * KinterbasDB (Python) FireRuby (Ruby, Ruby On Rails) JayBird et Fb.NET ne sont pas des wrappers de l'api, ils réimplémentent les protocoles au niveau de TCP

Connecteurs de Haut Niveau Borland Database Engine (BDE) CodeGear/Borland DBExpress ODBC PHP (PEAR) Ruby (ActiveRecord) Ne permettent pas la gestion fine des transactions (pas de début et de fin explicites) Ne supportent pas toutes les fonctionnalités de Firebird : Nivellement par le bas (SQLite, MySQL)

Conseils Attention aux transactions longues (Long Running Transactions) : READ COMMITED READ ONLY + Commit Retaining Réservations Explicites souvent inutiles. Peuvent cependant servir pour simuler SERIALIZABLE. De manière générale : transactions courtes et TOUJOURS terminées (COMMIT ou ROLLBACK) explicitement : ne laissez pas un composant décider pour vous!

Maintenance Utiliser les outils fournis avec Firebird : GBAK : Backup / Restore GFIX : Paramétrage et Maintenance GSTAT / ISQL : Informations sur la base de données GSTAT (-h) et ISQL (SHOW DATABASE) permettent de surveiller le "GAP" GFIX permet de démarrer SWEEP manuellement et de configurer l'intervalle de SWEEP automatique GBAK par un backup quotidien force le serveur à visiter toutes les pages ce qui facilite le travail du Garbage Collector

Stats $ isql Use CONNECT or CREATE DATABASE to specify a database SQL> connect 'myserver:db_alias' CON> user 'SYSDBA' password 'masterkey'; Database: 'myserver:db_alias', User: SYSDBA SQL> show database; Database: db_alias Owner: SYSDBA PAGE_SIZE 4096 Number of DB pages allocated = 6551 Sweep interval = 20000 Forced Writes are ON Transaction - oldest = 624816 Transaction - oldest active = 624817 Transaction - oldest snapshot = 624817 Transaction - Next = 624820 Default Character set: NONE SQL> exit; $ gstat -h db_alias Database "db_alias" Database header page information: Flags 0 Checksum 12345 Generation 624847 Page size 4096 ODS version 11.0 Oldest transaction 624816 Oldest active 624817 Oldest snapshot 624817 Next transaction 624840 Bumped transaction 1 Sequence number 0 Next attachment ID 0 Implementation ID 16 Shadow count 0 Page buffers 2048 Next header page 0 Database dialect 3 Creation date Dec 1, 2006 14:39:42 Attributes force write Variable header data: Sweep interval: 20000 *END*

Pas bon! $ isql Use CONNECT or CREATE DATABASE to specify a database SQL> connect 'myserver:bad_database_alias' CON> user 'SYSDBA' password 'zebulon'; Database: 'CHOASPES:D:\Firebird\Calepin2002\Calepin.fdb', User: SYSDBA SQL> show database; Database: CHOASPES:D:\Firebird\Calepin2002\Calepin.fdb Owner: SYSDBA PAGE_SIZE 2048 Number of DB pages allocated = 8738 Sweep interval = 20000 Forced Writes are ON Transaction - oldest = 45976018 Transaction - oldest active = 45976019 Transaction - oldest snapshot = 45976019 Transaction - Next = 46013588 Default Character set: ISO8859_1 Gap NT-OAT = 37569!

COMMIT! En un mot : Merci! Et maintenant à vous... Questions? Commentaires? Remarques? Pierre Yager CRISALID pierre@crisalid.com

WEBLIOGRAPHIE The Firebird Book (Apress, 2004, Helen Borrie & IBPhoenix) Firebird 2 Supplement to The Firebird Book (IBPhoenix, 2007, Helen Borrie) L'isolement des transactions dans Firebird (Pierre Yager, 2005) http://www.ibphoenix.fr/article.php3?id_article=39 Critique des niveaux d'isolement dans la norme SQL ANSI (Berenson/Bernstein, 1995) http://www.cs.duke.edu/~junyang/courses/cps216-2003-spring/papers/b Inside Savepoints (Dmitry Yemanov, 2005) http://ibdeveloper.com/issues/issue-1-sep-1-2005/inside-savepoints/