System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本專利技術涉及多版本并發控制方法,尤其涉及一種opengauss數據庫在分布式多寫架構下的多版本并發控制方法。
技術介紹
1、opengauss是一款單節點、集中式數據庫,隨著用戶業務壓力的增大,由于受到單節點內存、cpu、硬盤、網絡等條件限制,單節點數據庫很容易到達系統瓶頸。
2、當傳統的單節點數據庫無法滿足用戶需求時,我們需要把集中式數據庫擴展為分布式數據庫,通過增加數據庫節點數來提升數據庫的性能,解決單節點瓶頸問題,實現數據性能的水平擴容。
3、多版本并發控制,又稱mvcc(multi-version?concurrency?control),是數據庫實現數據隔離性和一致性的關鍵技術。openguass為單節點數據庫,現有的mvcc技術在分布式多寫架構下不適用,如需擴展為分布式多寫架構,則需要對mvcc技術進行調整和改進。
技術實現思路
1、為了解決現有的mvcc技術在分布式多寫架構下不適用的問題,本專利技術在目前單節點mvcc技術的基礎上進行了改進和擴展,提出了一種新的opengauss數據庫在分布式多寫架構下的多版本并發控制方法。
2、本專利技術提出的mvcc方案,適用于以下形式的分布式多寫架構,如圖1所示,本架構包含以下節點:
3、主節點:又稱master。負責整個節點的管理,以及全局唯一事務id的生成工作。
4、內部高速網絡:又稱interconnect。集群的內部網絡,master、segment之間通過i
5、數據節點:又稱segment。通過增加segment實現數據庫集群的水平擴展,segment之間通過interconnect互相連接。每個客戶端可以選擇連接任意segment,每個segment均可讀寫數據。
6、存儲:又稱storage。每個storage保存一部分數據。
7、具體地,本專利技術提供了一種opengauss數據庫在分布式多寫架構下的多版本并發控制方法,如圖8所示,本方法包括下述步驟:
8、s1.創建元組時,segment向master申請新的事務id,生成xid,并在元組里記錄以下信息:xmin,表示元組的創建事務;xmax,表示元組的更新或者刪除的事務;data,表示元組要存儲的數據;
9、s2.通過xid,計算出segment_id、時間戳、自增id三元組信息,根據三元組信息確定事務狀態在集群里的唯一存儲位置;
10、s3.由segment節點生成事務快照,事務快照中包含以下信息:oldest_xid,表示生成事務快照時數據庫集群的最小活躍xid;timestamp,表示生成事務快照時的時間戳;
11、s4.每個segment的后臺線程不停地遍歷所有會話,獲取所有活躍的xid,并通過計算得出當前segment的最小活躍xid,segment把本地最小活躍xid廣播給其他節點,其他節點收到廣播消息后,更新全局的最小活躍xid,得到oldest_xid;
12、s5.通過查詢元組更新時生成的歷史元組更新鏈表,結合事務快照、元組里的xmin和xmax信息、事務狀態信息,判斷元組對當前事務是否可見;
13、s6.進行死元組清理和元組凍結,當某個元組對數據庫里所有活躍的事務均不可見時,將其定義為死元組,定期清理死元組釋放硬盤空間;進行xid凍結,把commited狀態的xid設置為特殊值,表示該xid對所有事務均可見(不必再查詢事務狀態信息和提交時間信息);死元組清理和元組凍結完成后,清理小于oldest_xmin的事務狀態、事務提交時間,釋放硬盤空間。
14、進一步地,本專利技術方法在進行元組刪除時,不直接清理舊元組及其數據,而采用標記刪除,由segment向master申請新的xid,同時把元組里的xmax修改為新xid,表示該元組被新xid事務刪除。
15、進一步地,本專利技術方法在進行元組更新時,數據庫不馬上刪除舊的元組數據,而是在舊元組里,把xmax修改為新xid(新xid是指對元組進行更新操作的xid事務),然后用新xid創建新的元組,并生成歷史元組更新鏈表。
16、進一步地,本專利技術方法步驟s1中所述的xid為一個64位整形數字,其中:
17、(1)前8位為segment_id,每一個segment在集群里有一個唯一標識,segment_id表示該xid分派給哪個segment(xid大小比較時,需要去掉segment_id,segment_id的作用僅為標記申請該xid的segment);
18、(2)中間32位為時間戳,單位為秒;
19、(3)最后24位為自增id,單調遞增,當時間戳發生變化時,自增id重置為0。
20、進一步地,本專利技術方法步驟s2中所述的事務狀態包括:not_start、in_progress、commited、aborted;
21、當事務狀態發生變化時,segment按照以下規則在storage上記錄該事務及其狀態:
22、(1)當segment從master申請新的xid時,segment在其對應的storage上記錄xid的狀態為in_progress;
23、(2)當客戶端的sql執行完成,提交事務,segment把xid的狀態更新為commited;
24、(3)當sql執行過程中遇到錯誤或者客戶端顯示回滾事務時,segment把xid的狀態更新為aborted。
25、進一步地,本專利技術方法中還包括:
26、(1)更新xid狀態時,先更新本地segment的事務狀態,再把事務狀態廣播給其他節點,其他節點收到廣播消息后,在本地segment更新xid狀態;
27、(2)查詢xid狀態時,先在當前segment查詢xid的狀態,如果本地已有緩存,則不需要進行遠程查詢;如果本地沒有緩存,則通過網絡請求向xid所屬的segment進行查詢,并把查詢結果在本地進行緩存,下次查詢時直接使用緩存結果。
28、進一步地,本專利技術方法步驟s5中所述的判斷元組對當前事務是否可見,可見性判斷規則如下:
29、(1)若xid小于oldest_xid,則其狀態必定為commited或者aborted;
30、(2)若事務狀態不是commited,說明事務未提交或者已回滾,則xid不可見;
31、(3)若事務的提交時間比事務快照的申請時間大,說明申請快照時事務還未提交,則xid不可見;
32、(4)除規則(2)、(3)的情況外,其他情況xid可見;根據元組里xmin、xmax對應的xid的可見性,得出元組的可見性;
33、(5)歷史元組里的xmin不可見,表示創建該元組的事務未提交或者被回滾,則該元組不可見;
34、(6)歷史元本文檔來自技高網...
【技術保護點】
1.一種openGauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,所述方法包括:
2.根據權利要求1所述的openGauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,所述方法在進行元組刪除時,不直接清理舊元組及其數據,而采用標記刪除,由segment向master申請新的xid,同時把元組里的xmax修改為新xid,表示該元組被新xid事務刪除。
3.根據權利要求1所述的openGauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,所述方法在進行元組更新時,數據庫不馬上刪除舊的元組數據,而是在舊元組里,把xmax修改為新xid,然后用新xid創建新的元組,并生成歷史元組更新鏈表。
4.根據權利要求1所述的openGauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,步驟S1中所述的xid為一個64位整形數字,其中:
5.根據權利要求1所述的openGauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,步驟S2中所述的事務狀態包括:not_start、in_p
6.根據權利要求1所述的openGauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,所述方法中還包括:
7.根據權利要求1所述的openGauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,步驟S5中所述的判斷元組對當前事務是否可見,可見性判斷規則如下:
8.根據權利要求1所述的openGauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,步驟S6中所述的進行死元組清理和元組凍結,死元組清理和元組凍結的規則如下:
9.一種openGauss數據庫在分布式多寫架構下的多版本并發控制系統,其特征在于,所述系統運行時實現權利要求1-8任一項所述的openGauss數據庫在分布式多寫架構下的多版本并發控制方法的步驟。
10.一種計算機可讀存儲介質,所述存儲介質上存儲有計算機程序,所述程序被處理器執行時實現權利要求1-8任一項所述的openGauss數據庫在分布式多寫架構下的多版本并發控制方法的步驟。
...【技術特征摘要】
1.一種opengauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,所述方法包括:
2.根據權利要求1所述的opengauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,所述方法在進行元組刪除時,不直接清理舊元組及其數據,而采用標記刪除,由segment向master申請新的xid,同時把元組里的xmax修改為新xid,表示該元組被新xid事務刪除。
3.根據權利要求1所述的opengauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,所述方法在進行元組更新時,數據庫不馬上刪除舊的元組數據,而是在舊元組里,把xmax修改為新xid,然后用新xid創建新的元組,并生成歷史元組更新鏈表。
4.根據權利要求1所述的opengauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,步驟s1中所述的xid為一個64位整形數字,其中:
5.根據權利要求1所述的opengauss數據庫在分布式多寫架構下的多版本并發控制方法,其特征在于,步驟s2中所述的事務狀態包括:not_s...
【專利技術屬性】
技術研發人員:黎俊云,何小棟,
申請(專利權)人:廣州海量數據庫技術有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。