手机版

MySQL关于table_lock_wait和table_lock_immediate(2)

时间:2025-07-07   来源:未知    
字号:

这个例子看上去像个bug,session 1锁表,session 2试图更新这个表,被锁住了,但是table_locks_waited没有加1,而且查看table_locks_immediate也不变。

其原因是5.5新引入的metadata lock(MDL),对表的访问都需要获取MDL。在这个例子中,session 1拥有一个排他MDL,因此Session2是被锁在获取MDL的阶段。

由于MDL是论文代写在获取表锁之前,因此在session 2被lock的时,上述两个变量都不变。

什么情况下会触发table_locks_waited

从上面这个例子看,引入MDL以后,table_locks_waited并不容易触发。除非应用主动作lock tables t read。

我们用并发压力,两个线程分别执行update t1 set y=y+1 where id=1;各5000次。 若t1为MyISAM表,MyISAM是表锁,在并发压力下,是会导致table_locks_waited急剧增加。

而在InnoDB表,由于是行锁,因此获取表锁这个逻辑都能顺利通过,因此table_locks_waited不变。

table_locks_waited多少合适

回到初始的问题,若库中都是InnoDB的表,在5.5以后,table_locks_waited这个值应该很小。在mysqldump导出表时,会执行lock table,可能导致此值增加。其他情况下,若这个值有变,说明应用端主动作了lock table,这个在InnoDB表上是不需要的,需要应用修改。

MySQL关于table_lock_wait和table_lock_immediate(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)