前阵子,我写了一篇博客 , 那么在 MySQL 数据库中,我们能否找出未提交事务执行的SQL语句或未提交事务的相关信息呢?

实验验证了一下,如果一个会话(连接)里面有一个未提交事务,然后不做任何操作,那么这个线程处于Sleep状态

mysql> select connection_id() from dual;

+-----------------+

| connection_id() |

+-----------------+

|               6 |

+-----------------+

1 row in set (0.00 sec)

mysql> set session autocommit=0;

Query OK, 0 rows affected (0.00 sec)

mysql> delete from kkk where id =1;

Query OK, 1 row affected (0.00 sec)

mysql>

在另外一个会话(连接)里面,查询这个超过10秒未提交事务的详细信息:

SELECT t.trx_mysql_thread_id

,t.trx_state

,t.trx_tables_in_use

,t.trx_tables_locked

,t.trx_query

,t.trx_rows_locked

,t.trx_rows_modified

,t.trx_lock_structs

,t.trx_started

,t.trx_isolation_level

,p.time

,p.user

,p.host

,p.db

,p.command

FROM   information_schema.innodb_trx t

INNER JOIN information_schema.processlist p

ON t.trx_mysql_thread_id = p.id

WHERE  t.trx_state = 'RUNNING'

AND p.time > 10

AND p.command = 'Sleep'\G

如上截图所示,trx_query 为NULL值。基本上无法找到未提交事务的SQL语句,MySQL内部关于事务的信息不是很细,甚至可以说有点简洁。我甚至无法定位到在那个表上发生了锁。只能看到trx_row_locked、trx_row_modified、trx_started等信息。使用show engine innodb status也是如此,只能看到一些基本信息

mysql> show engine innodb status;

---TRANSACTION 1282583, ACTIVE 11937 sec

2 lock struct(s), heap size 360, 8 row lock(s), undo log entries 1

MySQL thread id 6, OS thread handle 0x7f8da2de3700, query id 190 localhost root

如果未提交的事务,阻塞了其它会话,那么有可能(仅仅是存在可能性,很多场景也不能找到位提交事务的相关SQL)找到未提交事务执行的SQL

如下测试所示,会话(连接 connection_id=11)中执行了delete操作,但是未提交事务

mysql> set session autocommit=0;

Query OK, 0 rows affected (0.00 sec)

mysql> select connection_id();

+-----------------+

| connection_id() |

+-----------------+

|              11 |

+-----------------+

1 row in set (0.01 sec)

mysql> delete from kkk where id=1;

Query OK, 1 row affected (0.00 sec)

mysql>

另外一个会话(连接)执行了一个更新记录的操作。此时SQL将被阻塞。

mysql> select connection_id();

+-----------------+

| connection_id() |

+-----------------+

|              13 |

+-----------------+

1 row in set (0.00 sec)

mysql>

mysql> update kkk set id=100 where id=1;

我们在另外的会话中,执行下面SQL就可以查到未提交事务最后执行的SQL。

mysql> SELECT r.trx_id              waiting_trx_id,

->        r.trx_mysql_thread_id waiting_thread,

->        r.trx_query           waiting_query,

->        b.trx_id              blocking_trx_id,

->        b.trx_mysql_thread_id blocking_thread,

->        b.trx_query           blocking_query

-> FROM   information_schema.innodb_lock_waits w

->        INNER JOIN information_schema.innodb_trx b

->                ON b.trx_id = w.blocking_trx_id

->        INNER JOIN information_schema.innodb_trx r

->                ON r.trx_id = w.requesting_trx_id;

+----------------+----------------+----------------------------------+-----------------+-----------------+----------------+

| waiting_trx_id | waiting_thread | waiting_query                    | blocking_trx_id | blocking_thread | blocking_query |

+----------------+----------------+----------------------------------+-----------------+-----------------+----------------+

| 2830           |             13 | update kkk set id=100 where id=1 | 2825            |              11 | NULL           |

+----------------+----------------+----------------------------------+-----------------+-----------------+----------------+

1 row in set (0.00 sec)

mysql> SELECT a.sql_text,

->        c.id,

->        d.trx_started

-> FROM   performance_schema.events_statements_current a

->        join performance_schema.threads b

->          ON a.thread_id = b.thread_id

->        join information_schema.processlist c

->          ON b.processlist_id = c.id

->        join information_schema.innodb_trx d

->          ON c.id = d.trx_mysql_thread_id

-> where c.id=11

-> ORDER  BY d.trx_started\G;

*************************** 1. row ***************************

sql_text: delete from kkk where id =1

id: 11

trx_started: 2019-06-12 23:36:13

1 row in set (0.03 sec)

ERROR:

No query specified

mysql>

总结:基本上MySQL只能找到未提交事务的基本信息,例如trx_mysql_thread_id等。某些场景下,我们几乎没有方法找出未提交事务执行的SQL等详细信息。搞不清未提交事务做了什么操作!

mysql查询未提交事务_MySQL如何找出未提交事务信息相关推荐

  1. activiti如何最后一次提交事务_MySQL如何找出未提交事务的SQL浅析

    很久之前曾经总结过一篇博客"MySQL如何找出未提交事务信息",现在看来,这篇文章中不少知识点或观点都略显肤浅,或者说不够深入,甚至说部分结论是错误的.下面重新探讨一下这个话题.那 ...

  2. mysql未提交事务sql_MySQL如何找出未提交事务的SQL浅析

    --准备测试环境数据(实验环境为MySQL 8.0.18社区版)mysql> create table kkk(id int , name varchar(12));Query OK, 0 ro ...

  3. mysql 创建相同数据库_mysql数据库找出相同数据MySQL常用操作

    一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建-> Path=";pathmysqlbin;"其中path为MySQL ...

  4. MySQL找出未提交事务的信息

    目录 一.processlist中的未提交事务 二.information_schema.innodb_trx中的未提交事务 三.performance_schema.events_statement ...

  5. mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引

    冗余索引和未使用索引的危害 随着上线的业务越来越多,在MySQL数据库中建的表也会越来越多,为提高查询访问速度,会创建相应的索引.但是由于技术人员的水平参差不齐,业务下线,代码逻辑变更等原因,导致线上 ...

  6. mysql查询一百万_mysql procedure-MySQL超过一百万条数据查询要用到什么技术

    mysql procedure求mysql高手phpmysql 中文 linux MySQL超过一百万条数据查询要用到什么技术能使搜索速度得到提升?而且内存消耗会减少? 回复内容: 优化查询最简单的办 ...

  7. mysql查询日志分析_mysql日志分析

    日志文件(log)就是一个跟踪记录的列表,它可以协助我们时刻掌握系统及应用服务的动作状态,在故障排查的时候提供最详细准确地信息,帮助我们快速查找原因,减少我们凭主观的经验去猜测,这样的答案更具有说服力 ...

  8. mysql查询高于平均_Mysql之高级查询

    Mysql之高级查询 一.函数&分组查询 1.函数 Mysql已经定义好的,可以实现一定功能的代码块 日期函数.数字函数.字符函数.聚合函数 聚合函数:聚合函数对整体进行运算,通常返回的结果只 ...

  9. mysql查询解析过程_MySQL查询执行过程详解

    查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览.查询是一个独立的.功能强大的.具有计算功能和条件检索功能的数据库对象.MySQL数据库中,MySQL ...

最新文章

  1. centos7安装配置ELK(Elasticsearch+Logstash+Kibana)
  2. 利用jmap和MAT等工具查看JVM运行时堆内存
  3. 预训练模型真的越大越好吗?听听他们怎么说
  4. form转json:jquery.serializeJSON
  5. Jupyter 安装并配置工作路径[转]
  6. CRM_PRICING_MERGE_FROM_BUPA_OW
  7. 实现二维码-完整三种编码流程加代码解析(javascript)
  8. 配置配置DruidDataSource
  9. 企业办公oa系统医药OA办公后台管理会议管理用户管理物料管理活动管理/Axure医药内部管理平台/web端后台管理系统原型/医药OA系统/权限管理
  10. c语言程序填空z=7,x=4,《C语言程序设计》复习题有答案
  11. 常见的三种Content-Type
  12. QTP软件测试工具学习
  13. sip协议详解_WebRTC SDP 详解和剖析
  14. Spark 用代码实现求分位数Percentile(Quentile)的方法
  15. 1004.选择结构习题:奇偶数判断
  16. S32k Flexcan 手写驱动,不使用SDK
  17. 志高扫地机器人好用吗_扫地机器人哪个好用?这几款用过的人都有很高的评价...
  18. ILSpy中baml转化为xaml的改进(五)
  19. OGC标准WMTS服务概念与地图商的瓦片编号流派-web地图切片加载
  20. java实现打印机打印

热门文章

  1. 专题**-我从内部看ARM
  2. Win10远程桌面打开方法有哪些?
  3. 【shell编程学习】赋值和基本运算
  4. js map循环与find循环
  5. 坚守价值与成长,海川MOM全球精选基金Trending Fund成立
  6. 怎么样才能转变自己想法、思维方式?
  7. 50题(ACM学习推荐题)
  8. 原生JS结合canvas写的一套画板,能修改画笔粗细,能修改画笔颜色,能清空画板等一系列功能
  9. C语言丨一文带你了解auto关键字(又名隐形刺客)
  10. 如何实施软件质量保证