技术开发 频道

MySQL事务隔离级别和日志登记模式选择

  事务隔离级别和日志模式组合适用的场景阐述:

  ● RC与 STATEMENT配置组合

  结合上述的分析和总结,提交读+基于命令行模式。首先是跑事务引擎的mysqld服务,不支持此组合模式,那么其适合场景:

  1>.使用非事务引擎存储数据、支撑业务,不使用事务引擎 (一般指:InnoDB引擎);

  2>.不需要使用到mysql复制的架构,或者SQL语句确定不包含不确定性函数等内容;

  ● RC与 MIXED配置组合

  1>.允许事务中,存在同一个SQL查询语句多次执行获得的记录集不同,或者规避此类业务;

  2>.读操作量远远大于写操作的业务场景;

  3>.不需要打开二进制日志功能的业务场景;

  ● RC与 ROW配置组合

  对于事务隔离级别:RC,无论binlog_format设置为:MIXED 还是 ROW,其二进制日志登记模式都一样,所以其适合场景与RC与 MIXED配置组合一样。

  ● RR与 STATEMENT配置组合

  1>.需要确保事务中,同一个SQL查询语句多次执行获得的记录集相同的业务场景;

  2>.不需要关心读写比例的业务场景;

  3>.不使用mysql的复制功能,或者DML操作SQL确保不存在不确定性的内容;

  ● RR与 MIXED配置组合

  1>.需要确保事务中,同一个SQL查询语句多次执行获得的记录集相同的业务场景;

  2>.需要使用mysql的复制功能,且不想关心 DML操作类SQL语句是否存在不确定性的内容;

  3>.更新操作量还是比较多,且想减少登记二进制日志而增加的物理IO,以及加速mysql复制的速度;

  ● 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工具解读二进制日志文件的内容。

  测试用例:

  ● 测试表的数据

MySQL事务隔离级别和日志登记模式选择

   备注: 测试过程中,更新ID=1 和 ID=4 的纪录。

  ● 用于测试的SQL

MySQL事务隔离级别和日志登记模式选择

0
相关文章