mysql数据库引擎InnoDB和MyISAM
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql数据库引擎InnoDB和MyISAM,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2681字,纯文字阅读大概需要4分钟。
内容图文
![mysql数据库引擎InnoDB和MyISAM](/upload/InfoBanner/zyjiaocheng/505/c20de3660a054028b03b9e837a3efecb.jpg)
2.并发插入问题
MyIAM表的读和写是串行的,但是这是就总体而言,在一定条件下MyISAM表也支持查询和插入操作的并发进行.
MyISAM存储引擎有一个系统变量concurrent_insert,专门用于充值其并发插入的行为,其值分别可以为0,1和2
当concurrent_insert = 0 时,不允许并发插入
当concurrent_insert = 1时,如果myisam表中没有空洞(即表的中间没有被删除的行),myisam允许在一个进程读表的同时,另一个进程从表尾插入记录
当concurrent_insert = 2时,无论myisam表中有没有空洞,都允许在表尾并发插入记录
3.MyISAM锁调度问题
MyISAM存储引擎的读锁和写锁是互斥的,读写操作室串行的,那么如果读写两个进程同时请求同一张表,Mysql将会使写进程先获得锁。不仅仅如此,即使读请求先到达锁等待队列,写锁后到达,写锁也会先执行。因为mysql因为写请求比读请求更加重要。这也正是MyISAM不适合含有大量更新操作和查询操作应用的原因。 调节办法:- 通过指定启动参数low-priority-updates,使MyISAM引擎默认给与读请求优先的权限
- 通过执行set low_PRIORITY_UPDATES=1,降低更新请求的优先级。
- 指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性。
三.InnoDB存储引擎
1.开门见山
具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
- 支持事物和外键
- 默认是行锁
- 支持数据恢复
注意:行锁在某些情况下会变成表锁,比如SQL的更新(update)或者删除(delete)语句中未使用到索引,导致在InnoDB在对数据进行相应操作的时候必须把整个表锁起来进行检索(表锁)。而如果使用了索引的话,InnoDB只会通过索引条件检索数据,而只锁住索引对应的行(行锁)。
2.实例分析
问题描述:
- 系统中有一个实时的定时任务,当有条件触发的时候,会更新对应的A表;
- 但是同时有另外一个对A表的写操作,因此当进行测试的时候,有时候会不固定的出“Lock wait timeout exceeded”的错误。
当出现这个问题的时候,从很多的地方进行了分析,然后都无法得到正确的解决方案(因为描述1模块不是我写的,所以没有去查看更新表的代码操作)
可能的原因:
在描述1中定时任务更新表A的时候,更新条件中没有使用索引,导致当进行定时任务更新表的时候形成了表锁。然后因为表A数据量比较大,检索较慢,然后导致了描述2中对表A的写操作的等锁超时。
3.适用的场景
- 更新和查询都相当的频繁,多重并发
- 要求事务,或者可靠性要求比较高
- 外键约束,MySQL支持外键的存储引擎只有InnoDB
一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。
mysql数据库引擎InnoDB和MyISAM
标签:rom 正是 原因 允许 数据 通过 崩溃 acid cal
本文系统来源:https://www.cnblogs.com/lsgspace/p/10428808.html
内容总结
以上是互联网集市为您收集整理的mysql数据库引擎InnoDB和MyISAM全部内容,希望文章能够帮你解决mysql数据库引擎InnoDB和MyISAM所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。