mysql的快照速度_mysql 快照读 当前度
innodb的默認(rèn)事務(wù)隔離級(jí)別是rr(可重復(fù)讀)。它的實(shí)現(xiàn)技術(shù)是mvcc。基于版本的控制協(xié)議。該技術(shù)不僅可以保證innodb的可重復(fù)讀,而且可以防止幻讀。但是它防止的是快照讀,也就是讀取的數(shù)據(jù)雖然是一致的,但是數(shù)據(jù)是歷史數(shù)據(jù)。如何做到保證數(shù)據(jù)是一致的(也就是一個(gè)事務(wù),其內(nèi)部讀取對(duì)應(yīng)某一個(gè)數(shù)據(jù)的時(shí)候,數(shù)據(jù)都是一樣的),同時(shí)讀取的數(shù)據(jù)是最新的數(shù)據(jù)。innodb提供了一個(gè)間隙鎖的技術(shù)。也就是結(jié)合grap鎖與行鎖,達(dá)到最終目的。當(dāng)使用索引進(jìn)行插入的時(shí)候,innodb會(huì)將當(dāng)前的節(jié)點(diǎn)和上一個(gè)節(jié)點(diǎn)加鎖。這樣當(dāng)進(jìn)行select的時(shí)候,就不允許加x鎖。那么在進(jìn)行該事務(wù)的時(shí)候,讀取的就是最新的數(shù)據(jù)。
實(shí)現(xiàn):
1. 快照讀(snapshot read)
簡(jiǎn)單的select操作(不包括 select ... lock in share mode, select ... for update)
2.當(dāng)前讀(current read)
select ... lock in share mode
select ... for update
insert
update
delete
在RR級(jí)別下,快照讀是通過(guò)MVVC(多版本控制)和undo log來(lái)實(shí)現(xiàn)的,當(dāng)前讀是通過(guò)加record lock(記錄鎖)和gap lock(間隙鎖)來(lái)實(shí)現(xiàn)的。
所以從上面的顯示來(lái)看,如果需要實(shí)時(shí)顯示數(shù)據(jù),還是需要通過(guò)加鎖來(lái)實(shí)現(xiàn)。這個(gè)時(shí)候會(huì)使用next-key技術(shù)來(lái)實(shí)現(xiàn)。
總結(jié):在mysql中,提供了兩種事務(wù)隔離技術(shù),第一個(gè)是mvcc,第二個(gè)是next-key技術(shù)。這個(gè)在使用不同的語(yǔ)句的時(shí)候可以動(dòng)態(tài)選擇。不加lock inshare mode之類的就使用mvcc。否則使用next-key。mvcc的優(yōu)勢(shì)是不加鎖,并發(fā)性高。缺點(diǎn)是不是實(shí)時(shí)數(shù)據(jù)。next-key的優(yōu)勢(shì)是獲取實(shí)時(shí)數(shù)據(jù),但是需要加鎖。同時(shí)需要注意幾點(diǎn):1.事務(wù)的快照時(shí)間點(diǎn)是以第一個(gè)select來(lái)確認(rèn)的。所以即便事務(wù)先開(kāi)始。但是select在后面的事務(wù)的update之類的語(yǔ)句后進(jìn)行,那么它是可以獲取后面的事務(wù)的對(duì)應(yīng)的數(shù)據(jù)。2.mysql中數(shù)據(jù)的存放還是會(huì)通過(guò)版本記錄一系列的歷史數(shù)據(jù),這樣,可以根據(jù)版本查找數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的mysql的快照速度_mysql 快照读 当前度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 导入密码_mysql 常用命
- 下一篇: mysql恢复语句报错_php对于mys