與悲觀并發(fā)控制和樂觀并發(fā)控制不同的是,MVCC是為了解決讀寫鎖造成的多個(gè)、長時(shí)間的讀操作餓死寫操作問題,也就是解決讀寫沖突的問題 。MVCC 可以與前兩者中的任意一種機(jī)制結(jié)合使用,以提高數(shù)據(jù)庫的讀性能 。
數(shù)據(jù)庫的悲觀鎖基于提升并發(fā)性能的考慮,一般都同時(shí)實(shí)現(xiàn)了多版本并發(fā)控制 。不僅是MySQL,包括Oracle、PostgreSQL等其他數(shù)據(jù)庫系統(tǒng)也都實(shí)現(xiàn)了MVCC,但各自的實(shí)現(xiàn)機(jī)制不盡相同,因?yàn)镸VCC沒有一個(gè)統(tǒng)一的實(shí)現(xiàn)標(biāo)準(zhǔn) 。
總的來說,MVCC的出現(xiàn)就是數(shù)據(jù)庫不滿用悲觀鎖去解決讀-寫沖突問題,因性能不高而提出的解決方案 。
實(shí)現(xiàn)方式MVCC的實(shí)現(xiàn),是通過保存數(shù)據(jù)在某個(gè)時(shí)間點(diǎn)的快照來實(shí)現(xiàn)的 。每個(gè)事務(wù)讀到的數(shù)據(jù)項(xiàng)都是一個(gè)歷史快照,被稱為快照讀,不同于當(dāng)前讀的是快照讀讀到的數(shù)據(jù)可能不是最新的,但是快照隔離能使得在整個(gè)事務(wù)看到的數(shù)據(jù)都是它啟動(dòng)時(shí)的數(shù)據(jù)狀態(tài) 。而寫操作不覆蓋已有數(shù)據(jù)項(xiàng),而是創(chuàng)建一個(gè)新的版本,直至所在事務(wù)提交時(shí)才變?yōu)榭梢?。
當(dāng)前讀和快照讀什么是MySQL InnoDB下的當(dāng)前讀和快照讀?
當(dāng)前讀像select lock in share mode(共享鎖), select for update ; update, insert ,delete(排他鎖)這些操作都是一種當(dāng)前讀,為什么叫當(dāng)前讀?就是它讀取的是記錄的最新版本,讀取時(shí)還要保證其他并發(fā)事務(wù)不能修改當(dāng)前記錄,會(huì)對(duì)讀取的記錄進(jìn)行加鎖 ??煺兆x像不加鎖的select操作就是快照讀,即不加鎖的非阻塞讀;快照讀的前提是隔離級(jí)別不是未提交讀和串行化級(jí)別,因?yàn)槲刺峤蛔x總是讀取最新的數(shù)據(jù)行,而不是符合當(dāng)前事務(wù)版本的數(shù)據(jù)行 。而串行化則會(huì)對(duì)所有讀取的行都加鎖 。優(yōu)缺點(diǎn)MVCC 使大多數(shù)讀操作都可以不用加鎖,這樣設(shè)計(jì)使得讀數(shù)據(jù)操作很簡單,性能很好,并且也能保證只會(huì)讀取到符合標(biāo)準(zhǔn)的行 。不足之處是每行記錄都需要額外的存儲(chǔ)空間,需要做更多的行檢查工作,以及一些額外的維護(hù)工作 。
適用場景解決讀-寫沖突的無鎖并發(fā)控制 。與上面兩者結(jié)合,提升它們的讀性能 ??梢越鉀Q臟讀,幻讀,不可重復(fù)讀等事務(wù)問題,更新丟失問題除外 。21.sql語句的執(zhí)行流程!client和server建立連接,client發(fā)送sql至server(對(duì)應(yīng)連接器這一過程)server如果在查詢緩存中發(fā)現(xiàn)了該sql,則直接使用查詢緩存的結(jié)果返回給client,如果查詢緩存中沒有,則進(jìn)入下面的步驟(對(duì)應(yīng)查詢緩存這一過程,8.0這一過程已經(jīng)不存在了,8.0完全拋棄了這個(gè)功能)server對(duì)sql進(jìn)行語法分析,識(shí)別出sql里面的字符串是否符合標(biāo)準(zhǔn),比如select關(guān)鍵字不能寫錯(cuò)(對(duì)應(yīng)分析器這一過程)server對(duì)sql進(jìn)行語義分析,識(shí)別出sql里面的字符串的具體意思是什么,比如T1是表名,C1是列名(對(duì)應(yīng)分析器這一過程 。3、4步其實(shí)解析的過程,這個(gè)解析的過程是分析器的工作不是優(yōu)化器的工作)server確定sql的執(zhí)行路徑,比如走索引還是全表,多表連接時(shí)哪張表先走哪張表后走,當(dāng)你的where條件的可讀性和效率有沖突時(shí)mysql內(nèi)部還會(huì)自動(dòng)進(jìn)行優(yōu)化,也就是大家理解的重寫where子句(對(duì)應(yīng)優(yōu)化器這一過程)server對(duì)執(zhí)行sql的用戶進(jìn)行權(quán)限檢查,比如對(duì)表是否有權(quán)限執(zhí)行(對(duì)應(yīng)執(zhí)行器這一過程)server執(zhí)行該sql語句,發(fā)送結(jié)果給client(對(duì)應(yīng)執(zhí)行器這一過程)連接器–>查詢緩存–>分析器–>優(yōu)化器–>執(zhí)行器
如果表 T1 中沒有字段 C1,而執(zhí)行select * from T1 where C1=1會(huì)報(bào)錯(cuò)不存在C1這個(gè)列,這個(gè)過程對(duì)應(yīng)上面第4個(gè)過程,對(duì)應(yīng)分析器這一過程
如果用戶對(duì)T1表沒有權(quán)限,而執(zhí)行select * from T1 where C1=1會(huì)報(bào)錯(cuò)對(duì)表T1沒有權(quán)限,這個(gè)過程對(duì)應(yīng)上面第6個(gè)過程,對(duì)應(yīng)執(zhí)行器這一過程
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 武漢長江大橋漢陽橋頭電梯開了嗎2021
- 成都有山姆超市嗎
- 2021拼搏勵(lì)志語錄(關(guān)于2021拼搏勵(lì)志語錄
- 京東2021雙十一活動(dòng)幾號(hào)開始幾號(hào)結(jié)束
- 2021肯德基萬圣節(jié)海綿寶寶玩具有幾款
- 2021年春分是幾月幾日 春分是立春嗎
- 2021年全國取消禁摩令 摩托車京a牌照多少錢
- 健身教練證怎么考 樂刻健身教練培訓(xùn)多少錢
- 2021單人玩職業(yè)推薦 暗黑3攻略心得
- 考試成績猜一個(gè)數(shù)學(xué)名詞 成績是多少打一數(shù)字
