Mysql必读深入解析MySQL的事务隔离及其对性能产生的影响
《Mysql必读深入解析MySQL的事务隔离及其对性能产生的影响》要点: MYSQL入门?SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销.
MYSQL入门???????? 在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示: MYSQL入门 MySQL事务隔离级别对其性能的影响 MySQL默认工作在级别三下.我们知道事务隔离是为了避免并发操作相互影响而导数据的不一致性.所以为了保证数据的一致性,就引入了事务隔离的功能.以上四个级别的对数据的一致性保护是逐步提高的.级别4对事务的隔离效果最好,但是性能最差,一般不再生产环境中使用. 下面通过实例来检验不同级别下MySQL性能收到的影响.我的实验环境是:Redhat5.8+MySQL5.5 首先我们这里启用两个session: 1、验证级别一的特性 我们在session A上进行的操作为: MYSQL入门 MYSQL入门在session B上的操作同session A,这里不再附上截图. MYSQL入门 MYSQL入门接下来我们在sessionA上更改其中的一条记录,更改结果如下: MYSQL入门 MYSQL入门注意:我们在上面启用了事务,但是我们在这里并没有进行commit操作. MYSQL入门 MYSQL入门我们可以清楚的看到,虽然我们并没有对session A的结果进行commit,但是结果确实已经改变.因此在这种级别下,没有提交的操作会对数据的一致性有影响.因此,如果我们此时在session A上对上述操作进行回滚,我们会发现此时session B上的结果又回到原来最初的结果,这样就造成了数据的不一致性,这也称为数据的幻读现象,看起来是很诡异的事情.因此在某些场景下,我们应该避免这种现象的产生.但是这种级别也不是没有它的用武之地,比如当我们有大量数据需要写入,而读操作很少的时候,就适合用这种模式. MYSQL入门 MYSQL入门2、验证级别READ COMMITTED特性 MYSQL入门 MYSQL入门接下来我们查看tutors表的初始状态信息: MYSQL入门 MYSQL入门然后我们依然是对数据进行更新操作,更新之后仍然没有commit.我们可以看到在sessionA中,结果已经发生改变: MYSQL入门 MYSQL入门此时我们在session B中查看,发现结果依然维持不变: MYSQL入门 MYSQL入门但是,如果我们此时在session A中进行commit操作,我们就会发现,sessionB此时查询就会发生改变,这样也造成了数据的前后不一致性,也是数据的幻读: MYSQL入门 MYSQL入门3、数据的可重读 MYSQL入门 MYSQL入门然后我们在查看其初始数据,其结果如下: MYSQL入门 MYSQL入门我们在session A中修改数据,并进行commit,修改后的结果如下: MYSQL入门 MYSQL入门然后我们在session B中进行查看发现结果仍然没有任何改变: MYSQL入门 MYSQL入门这就是可重读的特性,只要本次会话不提交,尽管对方修改,但是结果仍然不变,只有在session B中也进行commit操作,所作的修改才会在sessionB中生效. MYSQL入门 MYSQL入门在session A 中对其任意字段进行修改,并且没有进行commit操作.此时挥发现sessionB中的查询操作会一直处于阻塞状态: MYSQL入门 MYSQL入门这就设串行化隔离的效果,也是为什么串行化隔离并发能力差的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |