Surveiller et résoudre le conflit de verrouillage

Slides:



Advertisements
Présentations similaires
Contrôle de la concurrence
Advertisements

Découverte de SQL Server par la pratique pour les administrateurs expérimentés Module 6 : Protection des données Bertrand Audras Microsoft Technology Center.
TRANSACTION Problèmes posés
! ! ! PROCEDURE TYPE POUR ORGANISER L ’ANONYMAT
Les feuilles de sécurité sociale
Les contraintes d’integrité
AYARI Mejdi Formation 2121 * ISD * 1 tructured uery Anguage 2006.
Contrôles d'accès aux données
Rappel sur les bases de données et le vocabulaire
Module 1 : Préparation de l'administration d'un serveur
Gestion des annulations
Systèmes de Gestion de Bases de Données (Relationnelles)
T ECHNOLOGIES O RACLE Manipulation des données © sebvita.com.
TRANSACTION : confirmation, annulation. transactions : début transactionSET TRANSACTION SAVEPOINT annulerROLLBACK fin transactionCOMMIT.
L’utilisation des bases de données
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
Les concepts et les méthodes des bases de données
Module 5 : Gestion de l'accès aux ressources à l'aide de groupes
Les transactions.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Gestion des transactions SQLServer.
Limiter et trier des données
Systèmes de gestion de bases de données NFP 107 Les techniques du contrôle de concurrence Philippe Rigaux
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
Gérer la sécurité des mots de passe et les ressources
Sauvegarde et restauration sous oracle
Module 8 : Surveillance des performances de SQL Server
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Analyse et Conception de Systèmes Informatiques (ACSI)
SQL (deuxième partie) Langage de manipulation de données (LMD) Chap 4.6 p 107.
Hatainville Les Moitiers d’Allonne – Tel : Website : stratic.online.com La démarche projet Mars 2001.
Objectifs A la fin de ce chapitre, vous pourrez : présenter l'utilisation d'opérations de chargement de données par chemin direct décrire l'utilisation.
Créer des packages.
Module 12 : Implémentation de procédures stockées.
Copyright  Oracle Corporation, All rights reserved. 19 Gestion des Privilèges.
Composants de l'architecture Oracle
Gérer une instance Oracle
Gérer l'instance Oracle
(Procedural Language / Structured Query Language)
Ait Ahmed Madjid Cohen Lior Jaballah Seddik Leborgne Fabien
Manipulation des Données
1 PHP 5 Notions fondamentales (cours #5) Formation continue – Cégep de Sainte-Foy.
Institut Supérieur d’Informatique
Module 7 : Utilisation de requêtes élaborées
Module 4 : Implémentation de l'intégrité des données.
Module 13 : Implémentation de déclencheurs. Vue d'ensemble Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances.
Structure de stockage et relations
Gérer les rôles.
Module 3 : Création d'un domaine Windows 2000
SQL : Langage de Manipulation des données
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
Création et Gestion de Tables
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
Les vues Une vue: c’est une relation virtuelle. Définie par:
13 Copyright © Oracle Corporation, Tous droits réservés. Gérer l'intégrité des données.
Module 7 : Restauration de bases de données
Les bases de données Séance 8 Jointures.
Le Langage de Manipulation de Données LMD. 2 Les ordres SQL de manipulation INSERT –Insertion (ajout) de ligne(s) dans une table –Utiliser SQL*LOAD pour.
Subversion.
NIVEAU LOGIQUE Vues. Fenêtre dynamique sur la base Ses données proviennent d'autres tables ou d'autres vues.
Le Langage de Manipulation de Données LMD Module 6.
Le langage SQL LA Plan 1. Introduction Rappels sur le modèle relationnel Les caractéristiques du langage SQL 2. Le Langage d'Interrogation des.
SQL Partie 2. SQL est un langage de manipulation de données SQL est un langage de manipulation de données (LMD), cela signifie qu'il permet de sélectionner,
1 Transactions Support construit à partir des cours de N. Anciaux, L. Bouganim, P. Pucheral, Z. Kehdad, G. Gardarin, P. Borlat (Oracle France) Benjamin.
1 Les bases de données Séance 7 Les fonctions avancées : Opérateurs ensemblistes, Sous-requêtes et transactions.
Développement d’applications Problèmes relatifs aux BD.
Transaction et concurrence Du Mooc Bador Serge Abiteboul, Benjamin Nguyen, Philippe Rigaux.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
8 Copyright © 2004, Oracle. Tous droits réservés. Manipuler les données.
Transcription de la présentation:

Surveiller et résoudre le conflit de verrouillage Encadré par: Mr Hanoune.

Verrous externes: Ils empêchent plusieurs sessions de modifier les mêmes données en même temps Ils sont acquis automatiquement au niveau le plus bas possible pour une instruction donnée. Avant que la base de données n'autorise une session à modifier des données, la session doit d'abord verrouiller ces données. Un verrou externe (lock) accorde à la session le contrôle exclusif sur les données, de sorte qu'aucune autre transaction ne peut modifier les données verrouillées jusqu'à la libération du verrou. Les transactions peuvent verrouiller des lignes individuelles de données, plusieurs lignes ou même des tables entières. Oracle Database 10g prend en charge le verrouillage manuel et le verrouillage automatique. Les verrous acquis automatiquement choisissent toujours le niveau de verrouillage le plus bas possible, afin de limiter les conflits potentiels avec d'autres transactions.

Mécanisme de verrouillage: Haut niveau de simultanéité des données: Verrous au niveau ligne pour les insertions, les mises à jour et les suppressions. Aucun verrous externe nécessaire pour les interrogations Gestion automatique des files d’attente Verrous détenus jusqu’à la fin de la transaction (validation ou annulation). Le mécanisme de verrouillage est conçu pour offrir le degré maximal de simultanéité d'accès aux données dans la base. Les transactions qui modifient des données acquièrent les verrous au niveau ligne plutôt qu'au niveau page ou table. Les modifications apportées aux objets (telles que les déplacements de tables) acquièrent des verrous au niveau objet, plutôt que des verrous au niveau de la base de données complète ou du schéma. Les interrogations de données ne nécessitent pas de verrous et une interrogation réussit même si quelqu'un a verrouillé les données (en effet, c'est toujours la valeur originale avant verrouillage qui est affichée, reconstruite à partir des informations d'annulation). Lorsque plusieurs transactions doivent verrouiller la même ressource, la première transaction qui demande le verrou l'obtient. Les autres transactions sont mises en file d'attente jusqu'à la fin de la première transaction. Le mécanisme de mise en file d'attente est automatique est ne nécessite aucune intervention de l'administrateur. Tous les verrous sont libérés à la fin d'une transaction. Les transactions sont terminées lorsqu'une opération de validation (commit) ou d'annulation (rollback) est exécutée. En cas d'échec d'une transaction, le processus en arrière-plan qui annule automatiquement les difi ti té l t ti libè é l t t l dét Oracle Database 10g : Administration Workshop I 17-4 modifications apportées par la transaction libère également tous les verrous détenus par cette transaction.

Simultanéité d’accés aux données Le mode de verrouillage par défaut est un verrouillage détaillé au niveau ligne. Différentes transactions peuvent mettre à jour différentes lignes de la même table sans interférence entre elles. Si le modèle par défaut est le verrouillage au niveau ligne, Oracle Database 10g prend également en charge le verrouillage manuel à des niveaux supérieurs, si nécessaire : SQL> LOCK TABLE hr.employees IN EXCLUSIVE MODE; Table(s) Locked. Avec l'instruction ci-dessus, toute autre transaction qui tente de mettre à jour une ligne dans la table verrouillée doit patienter en file d'attente jusqu'à ce que la transaction ayant émis le verrou soit terminée. EXCLUSIVE est le mode de verrouillage le plus strict. Les autres modes de verrouillage sont les suivants : • ROW SHARE : permet l'accès simultané à la table verrouillée, mais empêche les sessions de verrouiller l'ensemble de la table pour un accès exclusif. • ROW EXCLUSIVE : identique au mode ROW SHARE, mais empêche également le verrouillage en mode SHARE. Les verrous ROW EXCLUSIVE sont obtenus automatiquement lors de la mise à jour, de l'insertion ou de la suppression de données.

Les modes des verrouillage: • ROW SHARE : permet l'accès simultané à la table verrouillée, mais empêche les sessions de verrouiller l'ensemble de la table pour un accès exclusif. • ROW EXCLUSIVE : identique au mode ROW SHARE, mais empêche également le verrouillage en mode SHARE. Les verrous ROW EXCLUSIVE sont obtenus automatiquement lors de la mise à jour, de l'insertion ou de la suppression de données. SHARE : permet les interrogations simultanées, mais empêche les mises à jour de la table verrouillée. Un verrou SHARE est nécessaire (et automatiquement demandé) pour la création d'un index sur une table. • SHARE ROW EXCLUSIVE : utilisé pour l'interrogation d'une table entière et pour autoriser d'autres utilisateurs à interroger les lignes de la table, mais empêche d'autres utilisateurs de verrouiller la table en mode SHARE ou de mettre à jour des lignes. • EXCLUSIVE : autorise les interrogations sur la table verrouillée, mais empêche toute autre activité sur cette table. Un verrou de type Exclusive est nécessaire pour supprimer une table.

Verrous LMD Chaque transaction LMD doit acquérir deux verrous: Un verrou de type ROW EXCLUSIVE pour la ou les lignes mise à jour. Un verrou sur la table de type Share, pour la table contenant les lignes. Chaque transaction LMD acquiert deux verrous : • Un verrou de type Row Exclusive sur la ou les lignes mises à jour. Il n'y a qu'un seul verrou de type Row Exclusive, quel que soit le nombre de lignes modifiées. • Un verrou sur table de type Share, sur la table mise à jour. Ce verrou permet d'empêcher une autre session de verrouiller la table entière (par exemple pour la supprimer ou la vider) pendant que la modification est apportée.

Conflits de verrouillage: UPDATE hr.employees SET salary=salary+100 WHERE employee_id=100; 1 row updated. 9:00:00 UPDATE hr.employees SET salary=salary+100 WHERE employee_id=101; UPDATE hr.employees SET COMMISION_PCT=2 WHERE employee_id=101; 9:00:05 SELECT sum(salary) FROM hr.employee; SUM(SALARY) ------------------- 692634 La session patiente toujours 16:30:00 Nombreuses opérations de sélection, d’insertion, de mise à jour et de suppression au cours des derniéres 7,5 h, mais pas de validation ni d’annulation! La session se poursuit. 16:30:01 Commit; Les conflits de verrouillage se produisent fréquemment, mais ils sont généralement résolus avec le temps ou via le mécanisme de mise en file d'attente. Dans certains cas rares, un conflit de verrouillage peut nécessiter l'intervention de l'administrateur. Dans le cas de la diapositive ci-dessus, la transaction 2 obtient un verrou sur une ligne unique à 9:00:00 et l'utilisateur oublie de valider la transaction, laissant le bloc en place. A 9:00:05, la transaction 1 tente de mettre à jour la table entière, opération qui nécessite un verrou sur toutes les lignes. La transaction 1 est bloquée par la transaction 2 jusqu'à la validation de cette dernière, à 16:30:01. L'utilisateur qui tente d'effectuer la transaction 1 devra probablement contacter l'administrateur afin d'obtenir de l'aide et le DBA devra détecter et résoudre le conflit.

Causes possibles de conflits de verrouillage Modification non validées. Transactions longues. Niveaux de verrouillage inutilement élevés. Le plus souvent, les conflits de verrouillage sont dus à une modification non validée, mais il existe d'autres causes possibles : • Transactions longues. De nombreuses applications utilisent le traitement batch pour effectuer des mises à jour en masse. Ces traitements batch sont généralement programmés pendant les périodes de faible activité (ou d'absence d'activité) des utilisateurs, mais il peut arriver qu'ils ne soient pas terminés ou que leur exécution soit trop longue pour tenir dans la période de faible activité. Les conflits de verrouillage sont courants lorsque le traitement des transactions et le traitement batch sont effectués simultanément. • Niveaux de verrouillage inutilement élevés. Toutes les bases de données ne prennent pas en charge le verrouillage au niveau ligne (Oracle a introduit la prise en charge des verrous au niveau ligne en 1988, avec la version 6). Certaines bases de données nécessitent donc toujours un verrouillage au niveau page ou au niveau table. Les développeurs qui écrivent des applications devant s'exécuter sur de nombreuses bases de données différentes écrivent souvent leur application avec des niveaux de verrouillage très élevés, de sorte que la base de données Oracle se comporte de la même façon que les bases les moins performantes.

Détecter les conflits de verrouillage Utilisez la page Blocking Sessions d'Enterprise Manager pour localiser les conflits de verrouillage. Les demandes de verrous qui provoquent des conflits sont indiquées de façon hiérarchique, la session détenant le verrou étant indiquée en haut et les sessions en attente de verrou étant indiquées à la suite. Pour chaque session impliquée dans le conflit, le nom utilisateur, l'ID de session et la durée d'attente de la session (en secondes) sont indiqués. Procédez à une hiérarchisation descendante sur l'ID de session afin de voir les instructions SQL exécutées ou demandées par la session. En outre, ADDM détecte automatiquement les conflits de verrouillage et peut vous informer des tendances inefficaces.

Résoudre les conflits La résolution d'un conflit de verrouillage passe par la libération du verrou détenu par la session. Le meilleur moyen d'y parvenir consiste à contacter l'utilisateur et à lui demander de mettre fin à la transaction. En cas d'urgence, l'administrateur peut mettre fin à la session détenant le verrou en cliquant sur le bouton Kill Session. N'oubliez pas que lorsqu'une session est fermée, tout le travail de la transaction en cours est perdu (la transaction est annulée). Les utilisateurs dont la session est fermée doivent se reconnecter et effectuer de nouveau tout le travail depuis la dernière validation. Les utilisateurs dont les sessions ont été fermées reçoivent l'erreur suivante lors de leur prochaine tentative d'exécuter une instruction SQL : ORA-00028: your session has been killed

Les verrous mortels Les verrous mortels sont connus comme « deadlocks », se produisent lorsque deux processus utilisateur ont posé des verrous sur des objets distincts, et que chacun de ces deux processus tente d’acquérir un nouveau verrou sur un objet que l’autre processus a déjà verrouillé. Les régles simples pour éviter les verrous mortels: S’assurer que le modèle de données de la base de données est proprement normalisé S’assurer que l’indexation des tables a été proprement effectuée accéder les objets de base de données toujours dans le même ordre Lors de la spécification de transactions explicites (BEGIN TRANSACTION), veiller à ce que celles-ci soient les plus courtes possibles.

CONCLUSION