面试题答案
一键面试常用监控锁竞争的方式与工具
- SHOW STATUS语句:通过执行
SHOW STATUS LIKE 'innodb_row_lock%';
,可查看InnoDB引擎行锁相关状态信息。 - INFORMATION_SCHEMA表:例如
INFORMATION_SCHEMA.INNODB_TRX
表,用于查看当前执行的事务;INFORMATION_SCHEMA.INNODB_LOCKS
表,可查看当前持有或等待的锁;INFORMATION_SCHEMA.INNODB_LOCK_WAITS
表,查看锁等待的相关信息。 - Percona Toolkit:其中
pt - query - digest
工具可以分析查询日志,帮助发现可能导致锁竞争的慢查询。 - MySQL Enterprise Monitor:这是MySQL官方的监控工具,能图形化展示锁竞争等各种数据库状态信息。
可获取的关键信息
- 行锁状态信息:通过
SHOW STATUS LIKE 'innodb_row_lock%';
能获取诸如InnoDB_row_lock_current_waits
(当前正在等待锁的数量)、InnoDB_row_lock_time
(从系统启动到现在锁定总时长)、InnoDB_row_lock_time_avg
(每次等待锁的平均时长)等信息,帮助了解行锁等待情况。 - 事务相关信息:从
INFORMATION_SCHEMA.INNODB_TRX
表可获取正在执行的事务ID、事务开始时间、执行该事务的SQL语句等,判断事务执行情况,是否因锁等待而长时间未完成。 - 锁相关信息:
INFORMATION_SCHEMA.INNODB_LOCKS
表能展示锁的类型(如共享锁、排他锁)、锁所在的数据库、表、索引信息,以及持有锁的事务ID等,了解锁的具体情况。INFORMATION_SCHEMA.INNODB_LOCK_WAITS
表可获取等待锁的事务ID、等待的锁信息以及持有该锁的事务ID,明确锁等待关系。 - 慢查询信息:
pt - query - digest
分析查询日志,能找出执行时间长可能引发锁竞争的SQL语句,包括查询语句内容、执行次数、平均执行时间等,帮助优化查询以减少锁竞争。 - 图形化信息:MySQL Enterprise Monitor以图形化方式展示锁竞争趋势,如锁等待次数随时间变化曲线等,直观呈现数据库锁竞争整体态势。