概述
今天主要分享一个最近做的实验,主要是测试mysql数据库在RR和RC不同事务隔离级别下的表现。
MySQL使用可重复读来作为默认隔离级别的主要原因是语句级的Binlog。RR能提供SQL语句的写可串行化,保证了绝大部分情况(不安全语句除外)的DB/DR一致。
下面以mysql5.7版本(默认binlog格式为row,事务隔离级别为RR)开始测试
1、binlog_format=row,事务隔离级别=RC





由以上测试知,RC隔离级别下,会话2执行时序在会话1事务的语句之间,并且会话2的操作影响了会话1的结果,这会对Binlog结果造成影响。
由于Binlog中语句的顺序以commit为序,两会话的执行时序是:
--实时查看指定binlog文件的内容python binlog2sql.py -hxx.xx.xx -uroot -p 密码 -d test --start-file='mysql-bin.000031' |grep test================================================================================================================DELETE FROM `test`.`t1` WHERE `c2`=2 AND `c1`=2 LIMIT 1; #start 283018 end 283245 time 2020-05-21 10:50:57UPDATE `test`.`t2` SET `c2`=3, `c1`=1 WHERE `c2`=1 AND `c1`=1 LIMIT 1; #start 283689 end 283944 time 2020-05-21 10:50:03UPDATE `test`.`t2` SET `c2`=3, `c1`=2 WHERE `c2`=2 AND `c1`=2 LIMIT 1; #start 283689 end 283944 time 2020-05-21 10:50:03UPDATE `test`.`t2` SET `c2`=4, `c1`=1 WHERE `c2`=3 AND `c1`=1 LIMIT 1; #start 283689 end 284044 time 2020-05-21 10:51:06

2、binlog_format=row,事务隔离级别=RR






在RR中,会话1语句update t2 set c2 = 3 where c1 in (select c1 from t1)会先在t1的记录上S锁(5.1的RC中不会上这个锁,但5.0的RC会),接着在t2的满足条件的记录上X锁。由于会话1没提交,会话2的delete语句需要等待会话1的S锁释放,于是阻塞。
因此,在RR中,以上测试会话1、会话2的依次执行,与Binlog的顺序一致,从而保证DB/DR一致。
由于Binlog中语句的顺序以commit为序,两会话的执行时序是:
--实时查看指定binlog文件的内容python binlog2sql.py -hxx.xx -uroot -p xx -d test --start-file='mysql-bin.000031' |grep test================================================================================================================UPDATE `test`.`t2` SET `c2`=3, `c1`=1 WHERE `c2`=1 AND `c1`=1 LIMIT 1; #start 3986 end 4241 time 2020-05-21 11:09:30UPDATE `test`.`t2` SET `c2`=3, `c1`=2 WHERE `c2`=2 AND `c1`=2 LIMIT 1; #start 3986 end 4241 time 2020-05-21 11:09:30UPDATE `test`.`t2` SET `c2`=4, `c1`=1 WHERE `c2`=3 AND `c1`=1 LIMIT 1; #start 3986 end 4359 time 2020-05-21 11:10:22UPDATE `test`.`t2` SET `c2`=4, `c1`=2 WHERE `c2`=3 AND `c1`=2 LIMIT 1; #start 3986 end 4359 time 2020-05-21 11:10:22DELETE FROM `test`.`t1` WHERE `c2`=2 AND `c1`=2 LIMIT 1; #start 4390 end 4617 time 2020-05-21 11:10:12

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
