如何检查验证是否在事务中运行了SQL查询?

时间:2012-07-03 08:41:04

标签: mysql sql

我有一个简单的用例来解决。想象一下有人告诉你“嘿,这个特定的查询集不是事务性的!”你的工作就是否认这一说法。怎么可能这样做?

假设:

  • 用户可以通过“点击一个魔术按钮”来重现这一点,然后按下INSERTs
  • 我们可以访问mysql client和所有权限
  • 我们无法访问应用程序的代码库,因此无法从代码角度验证此问题的集成测试
  • 我们正在使用MySQL服务器InnoDb
  • 我们可以根据需要调整MySQL配置(慢查询等)

1 个答案:

答案 0 :(得分:0)

输出中有一个交易部分:

SHOW ENGINE INNODB STATUS\G

看起来像(来自我当地的MySQL目前没有运行任何查询):

TRANSACTIONS
------------
Trx id counter 900
Purge done for trx's n:o < 0 undo n:o < 0
History list length 0
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started
MySQL thread id 47, OS thread handle 0x7fc8b85d3700, query id 120 localhost root
SHOW ENGINE INNODB STATUS

我不知道您是否可以主动监控这些信息,以便您可以在3次插入操作时完全看到它。你可以在这里使用你的最后一颗子弹(使用慢速查询)......

另外MySQL有命令计数器。可以通过以下方式访问此计数器:

SHOW GLOBAL STATUS LIKE "COM\_%"

每次执行命令都会增加与之关联的计数器。与事务相关的计数器为Com_beginCom_commitCom_rollback,因此您可以执行代码并监控这些计数器。