1.服务器级别的锁等待
可以通过show processlist看到等待锁的线程id,但是无法知道究竟哪个线程持有锁
可以通过mysqladmin debug
相关等待锁的线程以及谁持有锁可以在错误日志中找到
2.存储引擎层的锁等待则比较麻烦,以下是innodb存储引擎中锁等待以及哪个线程持有锁的查找sql
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, 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 block_port, IF(p.command="Sleep",p.time,0) AS idle_in_trx, b.trx_query AS blcoking_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

3.如果因为线程在一个事务中空闲而正在遭受大量的锁操作,下面查询显示存储引擎层有多少查询被哪些线程阻塞。
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

参考资料

<<高性能mysql第三版>>

转载于:https://www.cnblogs.com/gomysql/p/3608466.html

MySQL找出锁等待相关推荐

  1. mysql 持有锁 等待锁_MySQL找出锁等待

    1.服务器级别的锁等待 可以通过show processlist看到等待锁的线程id,但是无法知道究竟哪个线程持有锁 可以通过mysqladmin debug 相关等待锁的线程以及谁持有锁可以在错误日 ...

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

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

  3. mysql找出两个结果集不同数据_如何快速对比MySQL两个不同实例上的数据并找出差异...

    在MySQL运维中,研发同事想对比下两个不同实例上的数据并找出差异,除主键外还需要对比每一个字段,如何做呢? 第一种方案,写程序将两个实例上的每一行数据取出来进行对比,理论可行,但是对比时间较长. 第 ...

  4. MySQL: 找出员工表中最高、第二高、第N高的薪水

    假设有如下所示的员工薪水表: 找出表中最高的薪水非常简单,编写下面的SQL即可: SELECT max(Salary) as HighestSalary FROM Employee; 利用查询的嵌套, ...

  5. mysql找出课程相同的两个学生_day41 mysql 学习 练习题重要

    1.查询课程编号"001"比课程编号"002" 成绩高的所有学生的学号**** #把两个表同时放过来(并且都命名一个新的名字)一起查, #1先找出所有包含学科为 ...

  6. 使用MySQL找出地理围栏中心(重心)的简单方法

    需求 把地理围栏信息的中心(重心又或者叫做质心)找出来 注意点 一定要注意,需要第一个点和最后一个点相同,才能形成闭合多边形,这点很重要,不然会报错 > 3037 - Invalid GIS d ...

  7. 详细介绍MySQL/MariaDB的锁

    官方手册:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html 1.事务提交的方式 在MariaD ...

  8. 关于MySQL出现锁等待lock wait timeout exceeded; try restarting transaction 的解决方案

    关于MySQL出现lock wait timeout exceeded; try restarting transaction 的解决方案. 一.问题抛出 在做查询语句时,MySQL 抛出了这样的异常 ...

  9. mysql 查看锁等待

    show processlist 等MDL锁 通过查询 sys.schema_table_lock_waits 这张表,我们就可以直接找出造成阻塞的 process id,把这个连接用 kill 命令 ...

最新文章

  1. C语言网络编程:TCP实现多线程实现多客户端
  2. mysql开启skip-name-resolve 导致root@127.0.0.1(localhost)访问引发的ERROR 1045 (28000)错误解决方案...
  3. sinee303a变频器说明书_SINEE--EM303A变频器用户手册.pdf
  4. 你能活多少岁,就让人工智能来告诉你吧
  5. 26行代码AC_试题 历届试题 日期问题 | 第八届蓝桥杯B组第七题
  6. sql 查出一张表中重复的所有记录数据
  7. ES6的class方法基本用法
  8. 【转载】使用LR测试Oracle数据库的方法
  9. DICOM标准(2011)
  10. 帆软报表(FineReport) 的初步学习和使用
  11. Spring 的事务传播机制
  12. 【LaTeX】下载及安装步骤
  13. 扇贝 Service Mesh 发展历程
  14. 计算机科学与技术民办大学排名,计算机科学与技术专业排名:这95所大学实力很强,包括公办、民办和中外合办院校...
  15. 设计模式(十一)策略模式
  16. 百度运维部农场,绿色畅想
  17. 什么无线桥接一直正在链接服务器,路由器桥接成功无法从副路由器上网怎么办【解决方法】...
  18. java itext 生成word文档
  19. JAVA1.8开发工具使用系列 故障排除之jcmd
  20. 【Python Web】Flask框架(一)快速开发网站

热门文章

  1. 完美国际真数苹果_章子怡玩出新花样,雷人造型别有韵味!和小苹果同框犹如亲姐妹...
  2. 『ACM-算法-图论』算法竞赛进阶指南--hamilton路径(模板)
  3. python模拟登陆
  4. Python+Opencv实现实时的条形码检测
  5. S3C2440 汇编指令
  6. 如何使用busybox编译和生成最简linux根文件系统(rootfs)
  7. linux如何实现相关功能源代码
  8. expecting statement错误的一种情况(phpstorm 8.0.2)
  9. 救命代码_救命! 如何选择功能?
  10. verilog赋多位值_verilog赋值