MySQL Status Handler_external_lock 数据库状态作用意思及如何正确
本站中文解释
变量
MySQL status变量Handler_external_lock是MySQL会计用于跟踪所执行的表锁外部的操作的计数器。Handler_external_lock的值表示在开始和结束查询过程中,MySQL需要从表锁外部等待的次数。
Handler_external_lock的值是执行的表锁外部操作的统计值,这些操作包括取得内部表锁,获取session变量内部表锁,以及等待表锁解锁操作。如果用户在同一个查询中需要在多个实例之间锁住表锁,Handler_external_lock也会加一。Handler_external_lock不会计算对内部表锁的加锁操作,这类操作不会在实例之间传播;并且也不会计算表结构上的表锁,因为它们一般不需要等待。
要查看当前MySQL实例上Handler_external_lock的值,可以使用SHOW STATUS语句:
SHOW GLOBAL STATUS LIKE ‘Handler_external_lock’;
如果当前的Handler_external_lock的值比较高,可以考虑使用调优器工具来检查为什么会出现多次必要的表锁外部等待。此外,还可以考虑改变应用程序中用户会话的数量,从而减少表锁外部等待的次数。此外,也可以通过调整服务器参数如innodb_lock_wait_timeout:它是定义等待表锁释放的时间,如果超过innodb_lock_wait_timeout时间,那么innodb的当前持有表锁的用户会被中断来保证系统的健壮性。
另外,MySQL也提供了存储过程来调整Handler_external_lock的计数器,具体的操作流程为:
1. 首先,使用如下命令登陆MySQL:
mysql -u 用户名 -p
2. 然后,使用如下语句查看Handler_external_lock的当前值:
show global status like ‘Handler_external_lock’;
3. 然后打开MySQL存储过程:
call mysql.set_variable_value(‘Handler_external_lock’,值);
4. 最后,再使用如下指令查看Handler_external_lock的当前值:
show global status like ‘Handler_external_lock’;
通过上述操作,便可以设置MySQL status变量Handler_external_lock,以实现系统表锁优化。