【事务隔离级别】说说项目中选择的事务隔离级别
查了一下自己项目中MySQL事务隔离级别 和binlog格式分别是
select @@tx_isolation,@@global.tx_isolation,@@binlog_format,@@global.binlog_format;
-- READ-COMMITTED,READ-COMMITTED,ROW,ROW
事务隔离级别有
- 读未提交(Read UnCommitted)
- 读已提交(Read Commited) 简称RC
- 可重复读(Repeatable Read) 简称RR
- 串行化(Serializable)
binlog支持格式 - statement:记录的是修改SQL语句
- row:记录的是每行实际数据的变更 从MySQL5.1版本开始引入
- mixed:statement和row模式的混合
为什么MYSQL默认采用 可重复读(Repeatable Read) 隔离级别?
MySQL5.0之前只支持statement格式,但这种格式在RC下 主从复制有bug,
什么bug?
解决方案有两种:
- 隔离级别设置为RR
- binglog的格式修改为row格式,
为什么是READ-COMMITTED + ROW?
- 在RR隔离级别下,存在间隙锁,导致出现死锁的几率比RC大的多
- 在RR隔离级别下,条件列未命中索引会锁表!而在RC隔离级别下,只锁行
此时执行语句 - 在RC隔离级别下,半一致性读(semi-consistent)特性增加了update操作的并发性!
在5.1.15的时候,innodb引入了一个概念叫做“semi-consistent”,减少了更新同一行记录时的冲突,减少锁等待。
binlog日志怎么看?
参考

浙公网安备 33010602011771号