我们可以通过慢查询日志查询到一条语句的执行总时长,但是如果数据库中存在着一些大事务在执行过程中回滚了,或者在执行过程中异常中止,这个时候 慢查询日志就爱莫能助了,这时我们可以借助 performanceschema 的 events_transactions*表来查看与事务相关的记录,在这些表中详细记录了是否 有事务被回滚、活跃(长时间未提交的事务也属于活跃事务)或已提交等信息。 首先需要进行配置启用,事务事件默认并未启用

    1. update setup_instruments set enabled='yes',timed='yes' where name like 'transaction%';
    2. update setup_consumers set enabled='yes' where name like '%transaction%';

    image.png
    开启一个新会话(会话 2)用于执行事务,并模拟事务回滚。
    image.png
    查询活跃事务,活跃事务表示当前正在执行的事务事件,需要从 events_transactions_current 表中查询。
    image.png
    会话 2 中回滚事务:
    image.png
    查询事务事件当前表和事务事件历史记录表,可以看到在两表中都记录了一 行事务事件信息,线程ID为49的线程执行了一个事务,事务状态为ROLLED BACK。
    image.png
    但是当我们关闭会话 2 以后,事务事件当前表中的记录就消失了。

    image.png