1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > MySQL引擎innodb和mysum_mysql数据库引擎InnoDB和MyISAM

MySQL引擎innodb和mysum_mysql数据库引擎InnoDB和MyISAM

时间:2019-10-14 07:02:53

相关推荐

MySQL引擎innodb和mysum_mysql数据库引擎InnoDB和MyISAM

当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是不错的选择。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。