Debuggin长时间运行带有锁定结构和撤消日志条目的MySQL活动事务

Kri*_*fer 6 mysql

我偶尔会遇到我的应用程序的问题,导致我猜测是未完成的事务未提交或回滚.我的应用程序下次尝试向数据库启动事务时,我首先注意到该问题.

我的问题是如何找出在事务中已执行但尚未提交的查询,受影响的表等等?基本上帮助我找出导致问题的原因.

我启用了二进制日志,但根据文档,事务只在提交时写入二进制日志.

innodb撤销日志应该写成一个包含在与binlogs相同的目录中的idbfile,它是,但我不能说我已找到任何方法解析它为此目的.

SHOW PROCESSLIST显示我的状态为SLEEP的会话

显示创新状态:

...
...
---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
...
...
Run Code Online (Sandbox Code Playgroud)

PS我在ServerFault上有同样的问题,但我想这个问题介于两者之间,当涉及到分类时,+我发现该网站的活动比StackOverflow低得多,所以获得答案的机会在这里感觉更高,希望这个好.

/的Kristofer

Rit*_*yap 4

您可以在信息架构中找到您要查找的所有信息。有三个表(仅当您使用innodb插件时。参考:http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-plugin-installation.html

INNODB_TRX
INNODB_LOCKS
INNODB_LOCK_WAITS
Run Code Online (Sandbox Code Playgroud)

该表将向您展示数据库中正在运行的事务、事务中的查询,包括哪个事务正在阻塞其他事务、它持有锁定的资源。

参考:http ://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-information-schema-transactions.html