2010-10-15 5 views
6

Je rencontre parfois un problème avec mon application qui aboutit à ce que je suppose être une transaction inachevée qui n'est pas validée ni annulée. Je remarque d'abord le problème la prochaine fois que mon application essaie de démarrer une transaction dans la base de données.Déboguer longuement MySQL Transactions actives avec des structures de verrou et annuler les entrées de journal

Ma question est comment savoir quelles requêtes ont été exécutées dans la transaction mais pas encore validées, quelles tables sont affectées, etc ...? Essentiellement, cela m'aide à trouver ce qui cause le problème.

J'ai le journal binaire activé, mais selon la documentation, une transaction n'est écrite dans le journal binaire qu'une fois validée. Le journal innodb undo est supposé écrire un idbfile contenu dans le même répertoire que les binlogs, et c'est le cas, mais je ne peux pas dire que j'ai trouvé un moyen de l'analyser à cette fin.

SHOW PROCESSLIST montre ma session avec l'état de veille

VOIR INNODB STATUT:

... 
... 
---TRANSACTION 0 10661864, ACTIVE 4401 sec, process no, 4831, OS thread id 3023358896 
3 lock struct(s), heap size 320, undo log entries 40 
MySQL thread id 2, query id 2419 localhost masteruser 
Trx read view will not see trx with id >= 0 10661865, sees < 0 10661865 
... 
... 

PS J'ai la même question sur ServerFault mais je pense que cette question est quelque part entre quand! il vient à la classification, + je trouve ce site ayant une activité beaucoup plus faible que StackOverflow donc les chances d'obtenir une réponse se sentent plus élevées ici, espérons que ça va.

/Kristofer

Répondre

4

Vous pouvez trouver toutes les informations que vous recherchez dans le schéma d'information. Il y a trois tables (uniquement si vous utilisez le plugin InnoDB Référence:. http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-plugin-installation.html)

INNODB_TRX 
INNODB_LOCKS 
INNODB_LOCK_WAITS 

Ce tableau vous donnera l'image de ce que la transaction est en cours d'exécution au sein de votre base de données, les requêtes dans la transaction, y compris ce que la transaction bloque ce que d'autres transaction, ressources qu'il détient verrouiller.

Référence: http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-information-schema-transactions.html

0

Vous devriez commencer par permettre aux journaux de requêtes générales et lentes. Vous pouvez appliquer microslowpatch pour voir les requêtes lentes qui sont terminées dans 1 seconde.

Questions connexes