最新消息:欢迎加入小松的QQ群一起讨论一起学习,搜索页面修改成lua+ElasticSearch,使用php这个页面速度相对慢一点,优化之后速度杠杠的,如有问题请加群联系我

mysql MyISAM表锁机制详解(带测试案例)

MYSQL 1488浏览 0评论

在之前文章中讲过myisam innodb的区别我们知道,MyISAM支持的是表级锁,这篇文章将详细讲解myisam锁的问题
1、查询表级锁争用情况,
执行mysql语句
show status like ‘table%’;
如果Table_locks_waited的值比较高,则说明存在着较严重的表级锁争用情况
2、MySQL表级锁的锁模式
MySQL的表级锁有两种模式:表共享读锁和表独占写锁MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。
所以对MyISAM表进行操作,会有以下情况:
2.1、对MyISAM表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它进程的写操作。
2.2、对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。
为了证明上面的结果,下面来做个测试
我一这篇 MySQL单列索引和组合索引(联合索引)的区别详解 文章中创建的表和数据做测试

1)select max(userID) from users2 group by password ;

2)select * from users2 where userID=500;

3)update users2 set userName=’usernameB500′ where userID=5500;

4)show processlist;
准备上面4个sql

MyISAM表锁机制详解测试案例
3、并发插入
MyISAM存储引擎有一个系统变量concurrent_insert,专门用以控制其并发插入的行为,其值分别可以为0、1或2。
3.1、当concurrent_insert设置为0时,不允许并发插入。
3.2、当concurrent_insert设置为1时,如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录。这也是MySQL的默认设置。
3.3、当concurrent_insert设置为2时,无论MyISAM表中有没有空洞,都允许在表尾并发插入记录。

QQ交流群:136351212(满) 455721967

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
转载保留版权:小松博客» mysql MyISAM表锁机制详解(带测试案例)
本文链接地址:https://www.phpsong.com/592.html

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
木有头像就木有JJ!点这里按步骤申请Gravatar头像吧!