Afficher les derniers blocages innodb

12

Je vois que je peux afficher le dernier blocage dans mysql / innodb, mais existe-t-il un moyen de visualiser les blocages passés? Nous avons deux problèmes de blocage, l'un étant important et l'autre non. L'impasse moins importante se produit plusieurs fois par jour et devient ainsi la «dernière» impasse.

gwgeller
la source

Réponses:

15

Il y a un paramètre qui a été introduit dans MySQL 5.5.30: innodb_print_all_deadlocks

Lorsque cette option est activée, les informations sur tous les blocages dans les transactions utilisateur InnoDB sont enregistrées dans le journal des erreurs mysqld. Sinon, vous voyez uniquement des informations sur le dernier blocage, à l'aide de la commande SHOW ENGINE INNODB STATUS. Un blocage occasionnel d'InnoDB n'est pas nécessairement un problème, car InnoDB détecte immédiatement la condition et annule automatiquement l'une des transactions. Vous pouvez utiliser cette option pour résoudre les problèmes de blocage si une application ne dispose pas d'une logique de gestion des erreurs appropriée pour détecter la restauration et réessayer son fonctionnement. Un grand nombre de blocages peut indiquer la nécessité de restructurer les transactions qui émettent des instructions DML ou SELECT ... FOR UPDATE pour plusieurs tables, afin que chaque transaction accède aux tables dans le même ordre, évitant ainsi la condition de blocage.

Ajoutez simplement ce paramètre à my.cnf

[mysqld]
innodb_print_all_deadlocks = 1

ou

[mysqld]
innodb_print_all_deadlocks = on

Vous n'avez pas besoin de redémarrer mysql. Connectez-vous simplement à mysql et lancez

mysql> SET GLOBAL innodb_print_all_deadlocks = 1;

or

mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';

Ce paramètre est nouveau pour moi aussi.

Essayez-le et dites-nous tout ce que vous pensez !!!

RolandoMySQLDBA
la source
Nous exécutons 5.5.34. Existe-t-il des options pour notre version?
gwgeller
Mon erreur. C'est dans 5.5 dev.mysql.com/doc/refman/5.5/en/… . Je mettrai à jour ma réponse.
RolandoMySQLDBA
Fonctionne comme annoncé, merci! J'ai changé le paramètre à l'aide de sql pour ne pas avoir à redémarrer. Par coïncidence, deux des blocages les moins graves se sont produits et sont apparus dans le journal des erreurs.
gwgeller
La définition de la valeur à l'exécution ne fonctionne pas pour moi, elle n'écrit rien dans le journal des erreurs.
lapo
1
@Jordan AWS ne donne jamais SUPER et je l'ai mentionné il y a 6 ans: dba.stackexchange.com/questions/34525/… . Ils utilisent des déclencheurs pour vous assurer que vous ne pouvez pas pirater mysql.useret exécuter FLUSH PRIVILEGES;.
RolandoMySQLDBA