- 问题背景
- 排查步骤如下
- 查看processlist
文章图片
这里可以看到查询被阻塞,是因为在等待获取表锁。
2.查看是哪个语句或者会话占有该表的表锁。
select * from performance_schema.metadata_locks where object_schema='test' and object_name='myitest'\G
文章图片
从metadata_locks 表中。我们可以知道,id=65 的线程目前拥有 myitest表的排它锁。 而id=66 的线程则在队列中,等待获取myitest表的共享锁。
3.接着,我们看下线程id=65 和 id=66 的线程目前分别的连接和语句是什么。
select * from performance_schema.threads where processlist_db='test'\G
文章图片
到这里,大概就可以知道。select * from myitest 被阻塞的原因。是被processlist_id=25的操作给阻塞了。processlist_id=25进行了一个锁表的动作。
4. 解决
这里可以根据实际情况进行处理。可以kill 掉拥有锁的操作。也可以kill 掉查询操作。这里kill processlist_id。具体如下:
文章图片
kill 25 或者 kill 26
文章图片
5.上面的排查过程,主要是通过performance_schema 中统计的信息进行排查的。这里也可以通过sys 进行排查。通过sys 排查的话,会比较简单。如下:
文章图片
select * from sys.schema_table_lock_waits\G
文章图片
schema_table_lock_waits 这里给出了建议的方法。比如kill 31。这里直接杀掉拥有锁的线程。
【故障分析|【故障分析】排查myisam 引擎表查询阻塞问题】
推荐阅读
- mysql|InnoDB数据页结构
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- mysql|一文深入理解mysql
- Java毕业设计项目实战篇|Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)
- SQL|SQL基本功(五)--函数、谓词、CASE表达式
- vue|电商后台管理系统(vue+python|node.js)
- Java及基础算法及数据结构|旧笔记整理(MySQL)
- mysql|双非本211硕,无实习无项目,自学大数据开发,秋招上岸
- 数据库|Mysql--InnoDB存储引擎详解
- MySQL学习笔记-9-order by