如何在MySQL中查找未提交的事务信息

分类:编程技术 时间:2024-02-20 15:24 浏览:0 评论:0
0
本文与大家分享如何在MySQL中查找未提交的事务信息。小编觉得很实用,所以分享给大家学习一下。希望您读完本文后有所收获。话不多说,快来和小编一起看看吧。

mysql> select connection_id() from Dual;+-----------------+| connection_id() |+- ----------------+| 6 |+-----------------+set 中的 1 行(0.00 秒)mysql> set session autocommit=0;查询正常,0 行受影响(0.00 秒)mysql> 删除from kkk where id =1;Query OK, 1 row受影响(0.00 sec) mysql>

在另一个会话(connect)中,查询这条超过10秒未提交事务的详细信息:

选择 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.commandFROM 中form_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

< /p>

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

mysql> show engine innodb status;---事务 1282583,活动 11937 sec2 锁结构,堆大小 360,8 行锁,撤消日志条目 1MySQL 线程 id 6,操作系统线程句柄 0x7f8da2de3700,查询 id 190 localhost root

如果未提交交易,封锁g 它是一个session,那么就有可能(这只是一种可能,很多场景下是不可能找到已提交事务的相关SQL的)找到未提交事务执行的SQL

As在下面的测试中显示,会话(连接connection_id=11),但事务未提交

mysql> set session autocommit=0 ;查询正常,0 行受影响(0.00 秒) mysql> select connection_id();+--------------------------------+| connection_id() |+------------------ +| 11 |+-----------------+集合中的 1 行(0.01 秒)mysql> 从 kkk 中删除,其中 id=1;查询正常,1 行受影响(0.00 秒)mysql >

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

mysql> select connection_id();+--------------------------------+| connection_id() |+--- ---------------+| 13 |+-----------------+set 中的 1 行(0.00 秒) 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 waiting_trx_id, -> b.trx_mysql_thread_id blocking_thread , -> b.trx_queryblocking_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。请求_trx_id; +----------------+----------------+---------------------------- ---------------------------------+--------------------------------+--------- - ------+----------------+|等待_trx_id |等待线程|等待查询|阻塞_trx_id |阻塞线程| blocking_query |+----------------+----------------+------ ------- ------------------------+----------------+--- ---- -----------+----------------+| 2830 | 2830 13 |更新 kkk 设置 id=100,其中 id=1 | 2825 | 2825 11 | 11 NULL |+--------------+----------------+---------- -------------- ------+----------------+-------- ----------+--- -------------+1 行集合(0.00 秒) 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 -> 加入 information_schema.processlist c -> ON b.processlist_id = c.id -> 加入 information_schema.innodb_trx d -> ON c.id = d.trx_mysql_thread_id ->其中 c.id=11 -> ORDER BY d.trx_started\G;** ********************** 1. 行 ***** ************** ***** sql_text:从 kkk 中删除,其中 id =1 id:11trx_started:2023-06-12 23:36:131 行集中(0.03 秒) ERROR: No query specified mysql>

以上就是如何在MySQL中查找未提交的事务信息。小编相信有些知识点在我们日常工作中可能会看到或者用到。希望您能从本文中了解更多信息。更多详情请关注行业资讯ustry信息频道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在MySQL中查找未提交的事务信息

用户评论