日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql数据库新建一个递增的_分享一个mysql实验—基于数据库事务隔离级别RR及RC的测试...

發(fā)布時間:2023/12/3 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库新建一个递增的_分享一个mysql实验—基于数据库事务隔离级别RR及RC的测试... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

今天主要分享一個最近做的實驗,主要是測試mysql數(shù)據(jù)庫在RR和RC不同事務(wù)隔離級別下的表現(xiàn)。

MySQL使用可重復(fù)讀來作為默認隔離級別的主要原因是語句級的Binlog。RR能提供SQL語句的寫可串行化,保證了絕大部分情況(不安全語句除外)的DB/DR一致。

下面以mysql5.7版本(默認binlog格式為row,事務(wù)隔離級別為RR)開始測試


1、binlog_format=row,事務(wù)隔離級別=RC

由以上測試知,RC隔離級別下,會話2執(zhí)行時序在會話1事務(wù)的語句之間,并且會話2的操作影響了會話1的結(jié)果,這會對Binlog結(jié)果造成影響。

由于Binlog中語句的順序以commit為序,兩會話的執(zhí)行時序是:

--實時查看指定binlog文件的內(nèi)容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,事務(wù)隔離級別=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的依次執(zhí)行,與Binlog的順序一致,從而保證DB/DR一致。

由于Binlog中語句的順序以commit為序,兩會話的執(zhí)行時序是:

--實時查看指定binlog文件的內(nèi)容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

覺得有用的朋友多幫忙轉(zhuǎn)發(fā)哦!后面會分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關(guān)注下~

總結(jié)

以上是生活随笔為你收集整理的mysql数据库新建一个递增的_分享一个mysql实验—基于数据库事务隔离级别RR及RC的测试...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。