Akemi

面对锁表,他的选择是……监控锁状态与查看死锁

2024/11/01

现象

例行巡检时,发现9-11点CPU压力高

查看发现
大量CPU用于SYS和WAIT,us正常
怀疑是MySQL锁或SQL语句出问题

死锁
两个进程同时调用同一行数据,进入互相阻塞的状态

产生死锁时,由于事务的特性,当事务其中一句SQL执行错误时,数据库会反复执行同一段事务的SQL语句,造成大量CPU占用

锁监控命令

1
2
3
4
5
6
show status like 'innodb_rows_lock%'
select * from infomation_schema.innodb_trx;
select * from sys.innodb_lock_waits;
select * from performance_schema.threads;
select * from performance_schema.events_statements_current;
select * from performance_schema.events_statements_history;

死锁监控

1
2
3
4
5
show engine innodb status\G
show variables like '%deadlock%';

参数——开启死锁监控,这样就可以在日志和show engine innodb status\G中看到
innodb_print_all_deadlocks = 1
CATALOG