Innodb加锁分析时,需要查看当前加锁情况
使用命令行
show engine innodb status
开启NNODB监控机制(InnoDB Monitors)
mysql提供一套INNODB监控机制,用于周期性(每15钞)输出INNODB运行相关状态(INNODB运行状态、表空间状态、表状态等)到mysqld服务标准错误输出。另外,INNODB标准监控和锁监控,也可以通过命令:show engine innodb status输出到控制台。
自mysql 5.6.16版本之后,可以通过设置系统参数(innodb_status_output_locks)的方式开启或者关闭标准监控。
set GLOBAL innodb_status_output=ON;
set GLOBAL innodb_status_output_locks=ON;
查看表信息
- 开启performance_schema
修改performance_schema参数需要重启mysql
[mysqld]
performance_schema=ON
分别查看事务的锁信息,以及锁等待信息,mysql8与之前的版本查询的表不一样,是在performance_schema库中,表名也变成了data_locks
和data_lock_waits
// mysql 5.x
// innodb_locks记录了所有innodb正在等待的锁,和被等待的锁
select * from information_schema.innodb_locks;
// innodb_lock_waits记录了所有innodb锁的持有和等待关系
select * from information_schema.innodb_lock_waits'
// mysql8: 锁信息
select * from performance_schema.data_locks;
// mysql8: 锁等待信息
select * from performance_schema.data_lock_waits;
// mysql8: MDL锁信息
select * from performance_schema.metadata_locks;
- 查看当前事务ID
SELECT tx.trx_id FROM information_schema.innodb_trx tx WHERE tx.trx_mysql_thread_id = connection_id()
网友评论