iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql中如何实现定位空闲会话事务没提交导致锁阻塞的脚本
  • 774
分享到

mysql中如何实现定位空闲会话事务没提交导致锁阻塞的脚本

2024-04-02 19:04:59 774人浏览 泡泡鱼
摘要

这篇文章主要为大家展示了“Mysql中如何实现定位空闲会话事务没提交导致锁阻塞的脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中如何实现定位空闲会

这篇文章主要为大家展示了“Mysql中如何实现定位空闲会话事务没提交导致阻塞的脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中如何实现定位空闲会话事务没提交导致锁阻塞的脚本”这篇文章吧。

---- 查看事务锁阻塞线程和等待线程
SELECT r.trx_id AS waiting_trx_id,r.`trx_mysql_thread_id` AS waiting_thread,
       TIMESTAMPDIFF(SECOND,r.trx_wait_started,CURRENT_TIMESTAMP) AS wait_time,
       r.`trx_query` AS waiting_query,l.`lock_table` AS waiting_table_lock,
       l.lock_index AS waiting_index_lock,
       b.trx_id AS blocking_trx_id,b.`trx_mysql_thread_id` AS blocking_thread,
       SUBSTRING(p.host,1,INSTR(p.host,':')-1) AS blocking_host,
       SUBSTRING(p.host,INSTR(p.host,':')+1) AS blocking_port,
       IF(p.command="Sleep",p.time,0) AS idle_in_trx,
       b.`trx_query` AS blocking_query
FROM infORMation_schema.`INNODB_LOCK_WAITS` AS w
INNER JOIN information_schema.`INNODB_TRX` AS b  ON b.trx_id=w.blocking_trx_id
INNER JOIN information_schema.`INNODB_TRX` AS r ON  r.trx_id = w.requesting_trx_id
INNER JOIN information_schema.`INNODB_LOCKS` AS l ON w.requested_lock_id=l.lock_id
LEFT JOIN information_schema.`PROCESSLIST` AS p ON p.id=b.trx_mysql_thread_id
ORDER BY wait_time DESC\G





SELECT *  FROM information_schema.`INNODB_LOCKS`\G


-- 如果你因为线程在一个事务中空闲而正在遭受大量的锁操作,下面的这个变种查询可以
-- 告诉你有多少查询被哪些线程阻塞,而没有多余的无用信息。
SELECT CONCAT('thread ',b.trx_mysql_thread_id,' from ',p.host) AS who_blocks,
       IF(p.command="Sleep",p.time,0) AS idle_in_trx,
       MAX(TIMESTAMPDIFF(SECOND,r.trx_wait_started,NOW())) AS max_wait_time,
       COUNT(*) AS num_waiters
FROM information_schema.`INNODB_LOCK_WAITS` AS w
INNER JOIN information_schema.`INNODB_TRX` AS b ON b.trx_id=w.`blocking_trx_id`
INNER JOIN information_schema.`INNODB_TRX` AS r ON r.`trx_id`= w.`requesting_trx_id`
LEFT JOIN   information_schema.`PROCESSLIST` AS p ON p.id= b.`trx_mysql_thread_id`
GROUP BY who_blocks ORDER BY num_waiters DESC\G

*************************** 1. ROW ***************************
   who_blocks: thread 4 FROM localhost -- 注意线程4是阻塞的源头
  idle_in_trx: 2051
max_wait_time: 10
  num_waiters: 3  -- 线程4 阻塞的 线程最多,由此判断线程4是阻塞的源头
*************************** 2. ROW ***************************
   who_blocks: thread 20 FROM Lenovo-PC:51603
  idle_in_trx: 0
max_wait_time: 6
  num_waiters: 2
*************************** 3. ROW ***************************
   who_blocks: thread 11 FROM localhost
  idle_in_trx: 0
max_wait_time: 5
  num_waiters: 1
3 ROWS IN SET (0.00 sec)



set global tx_isolation='read-committed';
set session tx_isolation='read-committed';

select @@global.tx_isolation,@@tx_isolation;

以上是“mysql中如何实现定位空闲会话事务没提交导致锁阻塞的脚本”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: mysql中如何实现定位空闲会话事务没提交导致锁阻塞的脚本

本文链接: https://www.lsjlt.com/news/62505.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql中如何实现定位空闲会话事务没提交导致锁阻塞的脚本
    这篇文章主要为大家展示了“mysql中如何实现定位空闲会话事务没提交导致锁阻塞的脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中如何实现定位空闲会...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作