【MYSQL排错指南学习笔记(三)并发死锁问题排查手段】

1.并发问题 show processlist 首选
完整版本 show full processlist
information_schema_processlist表和show full processlist输出相同,但是表可以加筛选条件

2.阻塞问题,InnoDB监控器
SHOW ENGINE INNODB STATUS和创建InnoDB监控器
与并发相关的我们关注 SEMAPHORES LATEST DETECTED DEADLOCK TRANSACTIONS

SEMAPHORES 包含了线程互斥锁或者读锁的信息,当普通操作持续很长时间,检查安装版本是否可以处理你拥有的InnoDB线程数,降低innodb_thread_concurrency可以起到作用

LATEST DETECTED DEADLOCK 部分包含最近检查到的死锁信息是,如果服务器启动没有发现死锁,那么就是空的。

TRANSACTIONS部分包含当前所有正在执行的事务信息,该部分会列出所有活动事务正在等待的所有的锁的信息

Image.png


当你怀疑不确定的死锁或仅是一个长时间的锁时,查看FILE I/O 、 INSERT BUFFER AND ADAPTIVE HASH INDEX 、 BUFFER POOL AND MEMORY 、ROW OPERATIONS
不论何时,当读或写停止并且线程互相等待,可能是一个锁问题,哪怕锁住的线程处于updating状态

3.information_schema表
并发相关
innodb_trx 当先运行的所有事物的列表
innodb_locks 事物持有的当前锁的相关信息以及每个事物等待的锁的信息
innodb_lock_waits 事物正在等待的锁的信息

查看阻塞的事务列表

select * from innodb_locks where lock_trx_id in (select blocking_trx_id from innodb_lock_waits)
select innodb_locks.* from innodb_locks join innodb_lock_waits on (innodb_locks.lock_trx_id=innodb_lock_waits.blocking_trx_id)

查看特定表上的锁的列表

select * from innodn_locks where lock_table = 'db.name.table_name';

查看等待锁的事务列表

select trx_id,trx_requested_lock_id,trx_mysql_thread_id,trx_query from innodb_trx where trx_state='lock_wait';


4.performance_schema中的表

select thread_id,event_name,source.operation,processlist_id  from events_waits_current join threads using (thread_id) where processlist_id >0 \G

Image.png

Image.png

5.日志文件

根据线程号查看在做什么

select argument,event_time from mysql.general_log where thread_id=184 order by event_time;

Image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小怪兽ysl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值