IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration MySQL Discussion :

Afficher les verrous posés sur une base.


Sujet :

Administration MySQL

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Points : 114
    Points
    114
    Par défaut Afficher les verrous posés sur une base.
    Bonjour à tous,

    Récemment, un problème d'interblocage (deadlock) a affecté un de nos serveurs MySql.

    Afin de détecter ce genre de problème rapidement, on m'a demandé de développer un outil.

    Périodiquement, toutes les 5 minutes en l'occurrence, cet outil doit inspecter les bases de données à la recherche de verrous qui seraient posés depuis "trop longtemps" (nous allons définir des durées maximales d'existence des verrous pour chaque application).

    J'ai effectué des recherches sur la façon d'obtenir une liste des verrous associés à une base.

    J'ai trouvé deux pistes :

    • SHOW ENGINE INNODB STATUS
    • SHOW FULL PROCESSLIST


    Mais, en effectuant des tests, j'ai l'impression que ces commandes ne permettent pas de "voir" les verrous.

    Mon test est simple : sur un client MySql, je verrouille une table. Sur un autre client, je lance la commande, et j'observe le résultat.

    Connaissez-vous un moyen de lister les verrous posés sur une base?

    Il faut aussi avoir l'information suivante : pour chaque verrou, il faut savoir depuis combien de temps ce dernier est posé.

    Note :

    mysql Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (i486) using readline 6.1
    Merci,

    Denis

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    J'ai avancé sur la résolution du problème posé. Je suis capable de détecter des verrous, mais je ne suis pas capable d'obtenir la durée depuis laquelle le verrou est posé.

    Pour obtenir la liste des tables verrouillées :

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mysql> SHOW OPEN TABLES;
    +-----------------+---------------------------------------+--------+-------------+
    | Database        | Table                                 | In_use | Name_locked |
    +-----------------+---------------------------------------+--------+-------------+
    | configuration   | cf_conf_type_node                     |      0 |           0 |
    | configuration   | cf_node                               |      1 |           0 |
    | echelon         | ech_dim_server                        |      0 |           0 |
    ...
    Dans l'exemple ci-dessus, je peux voir que la table "cf_conf" est verrouillée.

    C'est un premier pas. Mais je ne vois pas comment faire pour connaître "l'âge du verrou".

    Avez-vous une idée?

    Merci

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Regarde du côté de InnoDB INFORMATION_SCHEMA tables

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 80
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    Je te remercie pour cette piste.

    Cela dit, après réflexion, nous estimons qu'il existe une approche plus simple à mettre en oeuvre pour atteindre l'objectif.

    Plutôt que d'examiner les verrous, nous examinons les requêtes.

    Plus précisément : nous examinons la durée depuis laquelle une requête est en train de s'exécuter.

    Cette information est fournie par la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    information_schema.PROCESSLIST
    Nous allons détecter les requêtes qui mettent "trop de temps" à s'exécuter, en travaillant sur le contenu de cette table.

    Le test est différent car la lenteur d'exécution d'une requête n'est pas forcément causée par un interblocage. Cela dit, nous sommes également intéressés pour connaître les requêtes "trop lentes" (pour cause d'interblocage ou autre).

    Cordialement,

    Denis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FPDF] Afficher les données à partir d'une base de données
    Par Stu76 dans le forum Bibliothèques et frameworks
    Réponses: 28
    Dernier message: 24/01/2011, 14h35
  2. Afficher les presence OCS sur une page web
    Par ferdhy dans le forum SharePoint
    Réponses: 1
    Dernier message: 26/12/2010, 12h22
  3. Historique pour les actions effectuées sur une base (trace)
    Par wahbinfo dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 07/07/2010, 10h18
  4. [MySQL] historique pour les actions effectués sur une base
    Par wahbinfo dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/07/2010, 16h02
  5. Réponses: 3
    Dernier message: 04/09/2006, 00h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo