百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MyISAM存储引擎的表级锁定优化
分享文章到:

MyISAM存储引擎的表级锁定优化

发布时间:01/15 来源: 浏览: 关键词:

MyISAM存储引擎的表级锁定优化

MySQL支持对MyISAM和MEMORY表进行表级锁定,对BDB表进行页级锁定,对InnoDB 表进行行级锁定。
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
MySQL的表级锁有两种模式:表共享读锁和表独占写锁。对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;对 MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作;MyISAM表的读操作与写操作之间,以及写操作之间是串行的!
对于大表,对于大多数应用程序,表锁定比行锁定更好,但存在部分缺陷。表锁定使许多线程同时从一个表中进行读取操作,但如果一个线程想要对表进行写操作,它必须首先获得独占访问。更新期间,所有其它想要访问该表的线程必须等待直到更新完成。
针对MyISAM存储引擎的表级锁定特点:
1、减小sql语句的执行时间;
2、数据表的索引保证合理高效;
3、设置SELECT语句优于更新操作(INSERT,UPDATE,DELETE)执行,降低写操作的优先权;
   通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利。

   通过执行命令SET LOW_PRIORITY_UPDATES=1,使该连接发出的更新请求优先级降低。

   通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级。

4、使用临时表提高查询性能;
   查询数据较多时,可以通过SQL_BUFFER_RESULT.选项强制将结果放到临时表中,这样就可以很快释放Mysql的表锁;
5、表结构设计,尽量避免同一表有大量更新与查询混在一起,合理进行拆表;
6、表存在结合大量INSERT和SELECT操作时,选择支持并发的SELECT和INSERT操作。
 
   MyISAM存储引擎有一个系统变量concurrent_insert,专门用以控制其并发插入的行为,其值分别可以为0、1或2。
   当concurrent_insert设置为0时,不允许并发插入。
   当concurrent_insert设置为1时,如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录。这也是MySQL的默认设置。
   当concurrent_insert设置为2时,无论MyISAM表中有没有空洞,都允许在表尾并发插入记录。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有1人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板