什么是兩階段提交和組提交

本篇文章為大家展示了什么是兩階段提交和組提交,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站是一家專業(yè)提供陽城企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為陽城眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

出于性能的考慮,事務(wù)在提交時為了保證數(shù)據(jù)安全,需要將redo和undo數(shù)據(jù)落盤,不用等待數(shù)據(jù)落盤。但是MySQL不僅要考慮innodn存儲引擎層的redo數(shù)據(jù),還要考慮數(shù)據(jù)庫上層的binlog數(shù)據(jù)落盤,已經(jīng)兩個層面數(shù)據(jù)落盤的順序問題。兩階段提交可以解決單個事務(wù)redo和binlog落盤順序的問題。

兩階段提交(2PC)分為兩個過程:

l  準(zhǔn)備階段(prepare phase)

生成xid信息,回滾段設(shè)置為prepare狀態(tài),并將redo落盤。

l  提交階段(commit phase)

在binlog生成commit 的XID event,Binlog落盤,釋放回滾段,釋放鎖。

兩階段提交的回滾:
       只寫了redo,沒落盤binlog,回滾。

落盤了redo,binlog落盤成功了,也有commit XID,自然是成功。

落盤了redo,binlog落盤成功了,沒有commit XID,也認(rèn)為事務(wù)已提交。

現(xiàn)在再來思考下一個問題,如果每個事物提交的時候,都要去將redo和binlog落盤,那么瓶頸就在落盤階段被放大了。這個時候就要引入組提交。組提交使得redo和binlog落盤的時候可以批量落盤,多個事務(wù)的redo和binlog可以一次fsync操作完成數(shù)據(jù)落盤,減少了fsync函數(shù)的調(diào)用,提高了效率。同時innodb存儲引擎層本身就支持組提交。

組提交之后,引入了另一個問題。數(shù)據(jù)庫上層的binlog寫入順序和innodb層事務(wù)提交順序無法保持一致。如果不保持一致,那么就會出現(xiàn)通過在線工具比如xtrabackup備份數(shù)據(jù)庫搭建主從的時候,出現(xiàn)丟失事務(wù)的場景,比如下面:

     什么是兩階段提交和組提交                                        

      binlog提交順序(T1,T2,T3),innodb commit順序(T2,T3,T1),此時innodb檢測到T3上下兩層都已經(jīng)提交,認(rèn)為不再需要恢復(fù),那么T1事務(wù)在備份的時候沒有經(jīng)歷兩階段提交,T1的事務(wù)在備份的時候數(shù)據(jù)還是事務(wù)開始前的數(shù)據(jù),從庫又不再進(jìn)行恢復(fù),導(dǎo)致T1事務(wù)被丟棄。所以后來引進(jìn)了prepare_commit_mutex,以串行的方式來保證順序,但是這樣會使組提交失效,所以后來提出了BLGC(binary log group commit)

該行為分為三個階段

Flush階段

內(nèi)存中生成事務(wù)的二進(jìn)制日志

Sync階段

將內(nèi)存中多個事務(wù)的二進(jìn)制日志調(diào)用1次fsync刷盤

Commit階段

二進(jìn)制日志在內(nèi)存中會有一個隊列,隊列第一個事務(wù)是leader,其他時follower,leader會根據(jù)順序調(diào)用存儲引擎層事務(wù)提交。Innodb本身就支持組提交。

上述內(nèi)容就是什么是兩階段提交和組提交,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前標(biāo)題:什么是兩階段提交和組提交
分享鏈接:http://muchs.cn/article16/gechdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、網(wǎng)站內(nèi)鏈網(wǎng)站維護(hù)、企業(yè)建站動態(tài)網(wǎng)站、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)