mysql锁(三)myisam下锁的介绍和实践二

通过实践,我们来看看,对 MyISAM表进行写操作时,会如之前说的那样阻塞其他用户对该表的读写操作吗?

(先建立一张test表,存储引擎为myisam,字段为id,name,并插入几条数据,给test表中插入500w条数据用于测试)


****开始前的小知识点****

开始测试之前,我们需要知道一个小的知识点,因为接下来的测试速度太快,我们需要根据别的指标去判断当时是否发生了阻塞,执行如下命令:

mysql锁(三)myisam下锁的介绍和实践二_第1张图片
查看锁的争夺状况

上图中,箭头标注的地方Table_locks_waited=280,它代表一共发生了280次不能立刻获得锁需要等待的情况,接下来的测试,我们会通过判断测试前 Table_locks_waited的值和测试后Table_locks_waited的值得对比来判断刚刚有没有发生阻塞情况。


(1)A窗口在update时,立即去B窗口执行select,观察:

mysql锁(三)myisam下锁的介绍和实践二_第2张图片
初始值是280,测试完成后变成了281,说明发生了阻塞等待

(2)A窗口在update时,立即去B窗口执行insert,观察:

mysql锁(三)myisam下锁的介绍和实践二_第3张图片
初始值是281,测试完成后变成了282,说明发生了阻塞等待

(3)A窗口在update时,立即去B窗口执行delete,观察:

mysql锁(三)myisam下锁的介绍和实践二_第4张图片
初始值是282,测试完成后变成了283,说明发生了阻塞等待

(4)A窗口在update时,立即去B窗口执行update,观察:

mysql锁(三)myisam下锁的介绍和实践二_第5张图片
初始值是283,测试完成后变成了284,说明发生了阻塞等待

综上,对 MyISAM表写操作,则会阻塞其他用户对该表的读写操作,当一个线程获得对一个表的写锁后对表进行更新操作,其他线程的读、写操作(增删改查)都会等待,直到锁被释放为止。


你可能感兴趣的:(mysql锁(三)myisam下锁的介绍和实践二)