MySQL实现的表级别锁定的争用状态变量
这里有两个状态变量记录MySQL内部表级锁定的情况,两个变量说明如下:
Table_locks_immediate:产生表级锁定的次数;
Table_locks_waited:出现表级锁定争用而发生等待的次数。
两个状态值都是从系统启动后开始记录,每出现一次对应的事件则数量加1。如果这里的Table_locks_waited状态值比较高,那么说明系统中表级锁定争用现象比较严重,就须要进一步分析为什么会为有较多的锁定资源争用了。
对于InnoDB所使用的行级锁定,系统是通过另外一组更为详细的状态变量来记录的。
InnoDB的行级锁定状态变量不仅记录了锁定等待的次数,还记录了锁定总时长、每次平均时长、以及最大时长,此外还有一个非累计状态量显示了当前正在等待的数量。对各个状态的说明如下:
Innodb_row_lock_current_waits:当前正在等待锁定的数量;
Innodb_row_lock_time :从系统启动到现在锁定的总时间长度;
Innodb_row_lock_time_avg :每次等待所花平均时间;
Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间;
Innodb_row_lock_waits :从系统启动到现在总共等待的次数。
对于这5个状态变量,比较重要的是 Innodb_row_lock_time_avg,Innodb_row_lock_waits 以及Innodb_row_lock_time这三项。尤其是当等待次数很高,而且每次等待时长也不小的时候,就须要分析系统中为什么又如此多的等待,然后根据分析结果着手制定优化计划。
此外,InnoDB除了提供这5个系统状态变量,还提供了其他更为丰富的及时状态信息,show innodb status;