解读MySQL事务的隔离级别和日志登记模式选择技巧
转自于: http://www.mysqlops.com/2011/04/25/mysql-isolation-binlog.html
MySQL的四种事务隔离级别:Read-uncommitted、Read-committed、Repeatable-read、Seriailizable,相信大家都清楚各自异同,不清楚的朋友可以查看另外一篇技术文章:MySQL_InnoDB之事务与锁详解。但是对于第二类、第三类隔离级别之间的性能区别和应用场景就会容易出现一些理解上的偏差,尤其是熟悉Oracle的技术朋友,为此专门撰写一篇技术文章,引导大家合理地选择这两种事务隔离级别。
测试环境及名词解释:
操作系统:CentOS release 5.5 (Final)
MySQL版本:5.1.40-community-log
InnoDB版本:build-in
测试的事务隔离级别:Read-committed(以下简称:RC)、Repeatable-read(以下简称:RR)
日志登记选项(简称:LBO):STATEMENT-based logging(简称:LBS)、
ROW-based format(简称:LBR)
基于日志复制模式(简称:RBO):STATEMENT、ROW、MIXED
事务隔离级别和日志模式组合的分析和总结:
n 事务隔离级别为:Read-committed(简称:RC)
事务安全性:不支持对InnoDB引擎表作DML(DML指:INSERT、UPDATE、DELETE),但是允许对非事务引擎表的数据进行一切操作;
事务性能:不支持对事务引擎InnoDB表进行操作;
u RC与 STATEMENT配置组合
日志记录格式:所有的变更操作都以基于命令方式登记二进制日志(简称:LBS);
复制安全性:对于SQL语句中,若存在不确定性的函数,则数据复制存在不一致性;
IO量:无增加;
u RC与 MIXED配置组合
事务安全性:结合InnoDB提供的MVCC功能,可以做到只看见已经提交事务修改后的数据,但是无法确保同一事务内,同一个查询语句二次执行,
获得的记录集相同;
事务性能:会比不提交读隔离级别性能低,但比可重复读隔离级别性能高;
日志记录格式:所有的变更操作都以基于行模式登记二进制日志(简称:LBR);
复制安全性:能做到主备数据复制的一致性;
IO量:所有的DML操作都将转化成基于行模式登记二进制日志,那么会增加大量物理写IO;
u RC与 ROW配置组合
若是事务隔离级别设置为:Read-committed(以下简称:RC),那么无论日志模式(注:binlog_format)设置为:MIXED 或者 ROW,二进制日志都将以ROW模式登记,为此与RC+MIXED配置组合相同,不赘述。
n 事务隔离级别为:Repeatable-read(简称:RR)
事务安全性:在RC隔离级别优点的基础之上,做到了同一个事务内,同一个查询请求,多次执行,获得的记录集一定相同;
事务性能:比RC事务隔离级别消耗的资源更多一些,也即性能低一些,但比
Seriailizable隔离级别的性能好;
u RR与 STATEMENT配置组合
日志记录格式:基于命令行模式登记二进制日志(简称:LBS);
复制安全性:对于SQL语句中,若存在不确定性的函数,则数据复制存在不一致性;
IO量:无增加;
u RR与 MIXED配置组合
日志记录格式:对于SQL语句中无不确定性函数的DML操作,则会基于命令行模式登记二
进制日志(简称:LBS);但是对于包含不确定性函数的DML操作,则一定
会使用基于行模式登记二进制日志(简称:LBR)
复制安全性:能确保数据复制的正确性;
IO量:相比STATEMENT可能会增加,但是否增加二进制的量,主要看编写的SQL语句,是否包含一些不确定性的函数;
u RR与 ROW配置组合
日志记录格式:对于所有的DML操作,都采用基于行的模式登记二进制日志,;
复制安全性:能确保数据复制的正确性;
IO量:全采用基于行的模式登记二进制日志,将明显增加物理IO;
事务隔离级别和日志模式组合适用的场景阐述:
u RC与 STATEMENT配置组合
结合上述的分析和总结,提交读+基于命令行模式。首先是跑事务引擎的mysqld服务,不支持此组合模式,那么其适合场景:
1>.使用非事务引擎存储数据、支撑业务,不使用事务引擎 (一般指:InnoDB引擎);
2>.不需要使用到mysql复制的架构,或者SQL语句确定不包含不确定性函数等内容;
u RC与 MIXED配置组合
1>.允许事务中,存在同一个SQL查询语句多次执行获得的记录集不同,或者规避此类业务;
2>.读操作量远远大于写操作的业务场景;
3>.不需要打开二进制日志功能的业务场景;
u RC与 ROW配置组合
对于事务隔离级别:RC,无论binlog_format设置为:MIXED 还是 ROW,其二进制日志登记模式都一样,所以其适合场景与RC与 MIXED配置组合一样。
u RR与 STATEMENT配置组合
1>.需要确保事务中,同一个SQL查询语句多次执行获得的记录集相同的业务场景;
2>.不需要关心读写比例的业务场景;
3>.不使用mysql的复制功能,或者DML操作SQL确保不存在不确定性的内容;
u RR与 MIXED配置组合
1>.需要确保事务中,同一个SQL查询语句多次执行获得的记录集相同的业务场景;
2>.需要使用mysql的复制功能,且不想关心 DML操作类SQL语句是否存在不确定性的内容;
3>.更新操作量还是比较多,且想减少登记二进制日志而增加的物理IO,以及加速mysql复制的速度;
u RR与 ROW配置组合
1>.需要确保事务中,同一个SQL查询语句多次执行获得的记录集相同的业务场景;
2>.需要使用mysql的复制功能,且不想关心 DML操作类SQL语句是否存在不确定性的内容;
3>.以读为主的业务,更新量较少且从设计上规避行模式登记日志缺陷的业务场景;
推荐组合模式:
若需要打开二进制日志功能,且需要使用mysql复制,但业务是以读为主,且更新量为主的表,被设计成非常轻小型,也不想严格关心SQL写法。例如:常更新的字段放一起且最好是×××的,不常更新的字段存放一起,一定无大字段(注释:TEXT、BLOB等)。那么可以考虑使用:RC+MIXED组合模式。
若需要打开二进制日志功能,且需要使用mysql复制,但业务的读写量相差不大,且不想为规避登记二进制日志的问题而设计表,也不想严格关心SQL写法,那么建议使用:RR+MIXED组合模式。
当然对于不需要打开二进制日志功能的业务,那选择就容易,关键在选择事务隔离级别为:RC还是RR的问题,为事务安全性角度出发,选择:RR,为从事务消耗资源,也即性能出发,选择:RC。
为方便大家阅读,以及适应快餐式文化氛围,文章开头特意先写对比、分析和结论,那么接下来将把测试过程,以及一些对比信息告诉大家,建议一线技术人员一定要看下测试过程.测试过程,也是分设置不同事务隔离级别tx_isolation的值,配合设置不同binlog_format的值,然后执行数据的更新语句,再使用mysqlbinlog工具解读二进制日志文件的内容。
转载于:https://blog.51cto.com/tech110/965730
解读MySQL事务的隔离级别和日志登记模式选择技巧相关推荐
- MySQL事务及隔离级别详解
MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...
- 从根儿上理解MySQL | 事务的隔离级别与MVCC
目录 事务简介 事务的概念 MySQL中事务的语法 事务的隔离级别 事务并发执行遇到的问题 MySQL中支持的四种隔离级别 MVCC原理 版本链 ReadView MVCC小结 事务简介 事务的概念 ...
- mysql 事务、隔离级别
一.事务的四大特性(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有 ...
- MySQL 事务默认隔离级别?能否解决幻读?
事务隔离级别 MySQL 中事务隔离级别有 read uncommited.read commited.repeatable read.serializable 四种,其中默认为 repeatable ...
- MySQL事务的隔离级别
事务的隔离级别 隔离级别分为4种: 读未提交:READ-UNCOMMITED 读已提交: READ-COMMITTED 可重复读: REPEATABLE-READ 串行: SERIALIZABLE 当 ...
- MySQL事务学习 -- 隔离级别
6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况. 更新丢失 ...
- mysql中语句块当事务,MySQL事务与隔离级别
--查看隔离级别 select @@global.tx_isolation, @@tx_isolation; --修改隔离级别 set [session | global] transaction ...
- 列举MySQL事务的隔离级别_mysql dba系统学习(22)数据库事务详解
上个星期去面试数据库管理员的工作,笔试通过之后就是直接的面试,他问了我一个问题,叫我介绍哈数据库的事务的看法和理解,但是不知所错的没有章法的乱答一气,唉唉,基础不扎实啊. 下面来好好的学习哈mysql ...
- mysql四种隔离级别知乎_详解MySQL事务的四大特性和隔离级别
1.事务的四大特性(ACID) 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2.一致性( ...
最新文章
- Codeforces Round #232 Editorial Div2-B
- 渗透知识-CSRF攻击
- 基于deep learning的快速图像检索系统
- KR C、ANSI C、C89、C90、C95、C99 和 C11 的区别联系
- ITK:对图像进行升采样
- 微信接口请求次数_接口签名验证常用方案
- 实现后台高级查询(高级版)
- python内置数学函数库_在没有任何内置的求值函数或外部库的情况下用python解决数学问题...
- 网络爬虫——淘宝网页面分析思路
- 保存照片和视频到相册显示
- [Unity3D]Unity3D官方案例SpaceShooter开发教程
- SpringBoot讲义
- c语言中 p2 amp n1表示什么意思,2005年9月全国计算机等级考试二级C语言笔试试题及答案mjj...
- 输入框上的Magnifier
- Nginx+Lua 实现灰度发布详细步骤
- 好巧,七夕最新8月书单出炉!送给你程序员
- mipi两线接口_MIPI接口
- java 发邮件带excel附件,以流的形式发送附件,不生成excel文件
- LABVIEW编程---高级数据结构及函数(2)
- chrome浏览器安装markdown浏览插件