用于多版本并發(fā)提交狀態(tài)的事務(wù)控制塊的制作方法
【技術(shù)領(lǐng)域】
[0001 ]本公開涉及數(shù)據(jù)庫管理系統(tǒng)。
【背景技術(shù)】
[0002]數(shù)據(jù)庫管理系統(tǒng)可以使用多版本并發(fā)控制(MVCC)作為用于向多個讀取者或者寫入者提供對數(shù)據(jù)庫的并發(fā)訪問的機(jī)制。通常,并發(fā)控制方法可以被用于防止讀取者訪問由于讀取與寫入操作并發(fā)執(zhí)行所導(dǎo)致的寫入一半的或不一致的數(shù)據(jù)。MVCC通過向用戶提供對在時間上的特定瞬間的數(shù)據(jù)庫的快照的訪問來實現(xiàn)這一目的,所述瞬間通常是用戶發(fā)起讀取操作的時刻。由寫入者所做的任何改變對于其他人不可見,直到寫事務(wù)完成或者“提交”為止。
[0003]為了提供這些快照,MVCC數(shù)據(jù)庫可以存儲它的數(shù)據(jù)的多個版本。例如,當(dāng)數(shù)據(jù)庫更新數(shù)據(jù)項,而不是用新的數(shù)據(jù)蓋寫(overwrite)舊的數(shù)據(jù)時,數(shù)據(jù)庫將舊的數(shù)據(jù)標(biāo)記為陳舊的并且增加新的數(shù)據(jù),將新的數(shù)據(jù)標(biāo)記為更加新的版本。使用多個存儲的版本,當(dāng)讀取者發(fā)起讀取操作時,即使數(shù)據(jù)被并發(fā)寫入者蓋寫,數(shù)據(jù)庫允許讀取者訪問過去有效的數(shù)據(jù)。在寫入事務(wù)被提交之后,數(shù)據(jù)庫向讀取者提供新的值。
[0004]提交事務(wù)通常涉及更新該事務(wù)中涉及的所有數(shù)據(jù)庫值的版本信息。這可能招致很長的等待時間,以致影響數(shù)據(jù)庫性能。
【發(fā)明內(nèi)容】
[0005]根據(jù)本公開的一方面,提供了一種用于讀取數(shù)據(jù)庫中的版本化數(shù)據(jù)的計算機(jī)實施的方法,包括:由至少一個處理器接收行讀取請求;由所述至少一個處理器確定所述行被版本化;由所述至少一個處理器確定在事務(wù)控制塊中存在用于與所述行相關(guān)聯(lián)的行銷毀事務(wù)的第一時間戳信息;以及由所述至少一個處理器從事務(wù)控制塊檢索第一時間戳信息。
[0006]根據(jù)本公開的另一方面,提供了一種系統(tǒng),包括:存儲器;以及至少一個處理器,其被耦合到存儲器并且被配置為:接收行讀取請求;確定所述行被版本化;確定在事務(wù)控制塊中存在用于與所述行相關(guān)聯(lián)的行銷毀事務(wù)的第一時間戳信息;以及從事務(wù)控制塊檢索第一時間戳信息。
[0007]根據(jù)本公開的又一方面,提供了一種存儲有指令的有形的計算機(jī)可讀設(shè)備,當(dāng)所述指令被至少一個計算設(shè)備運(yùn)行時,使得所述至少一個計算設(shè)備執(zhí)行操作,所述操作包括:接收行讀取請求;確定所述行被版本化;確定在事務(wù)控制塊中存在用于與所述行相關(guān)聯(lián)的行銷毀事務(wù)的第一時間戳信息;以及從事務(wù)控制塊檢索第一時間戳信息。
【附圖說明】
[0008]附圖被并入本文,并且形成說明書的一部分。
[0009]圖1是示出根據(jù)示例性實施例的數(shù)據(jù)庫系統(tǒng)環(huán)境的框圖。
[0010]圖2A至圖21示出了根據(jù)示例性實施例的由事務(wù)管理器維護(hù)的用于提供多版本并發(fā)控制的多版本并發(fā)控制(MVCC)結(jié)構(gòu)和當(dāng)一系列數(shù)據(jù)庫事務(wù)發(fā)生時該MVCC結(jié)構(gòu)的內(nèi)容。
[0011]圖3是示出根據(jù)示例性實施例的事務(wù)控制塊(TCB)可以轉(zhuǎn)換通過的潛在狀態(tài)的狀態(tài)圖。
[0012]圖4A至圖4E示出根據(jù)示例性實施例的由事務(wù)管理器在多版本并發(fā)控制數(shù)據(jù)庫中使用事務(wù)控制塊執(zhí)行讀取事務(wù)的方法的流程圖。
[0013]圖5是用于實施各種實施例的示例性計算機(jī)系統(tǒng)。
[0014]在附圖中,相同的參考標(biāo)記一般表示相同或相似的元件。此外,通常,參考標(biāo)記的最左邊的(多個)參考數(shù)字標(biāo)識參考標(biāo)記首次出現(xiàn)的圖。
【具體實施方式】
[0015]本文提供了利用用于向讀取者-寫入者提供對事務(wù)提交狀態(tài)的訪問的事務(wù)控制塊的系統(tǒng)、方法和/或計算機(jī)程序產(chǎn)品實施例、和/或它們的組合以及子組合。
[0016]雖然在數(shù)據(jù)庫管理系統(tǒng)的上下文中舉例示出本文描述的實施例,但是它們通常也適用于使用多版本并發(fā)控制(例如,實現(xiàn)事務(wù)存儲器等的編程語言)的任何系統(tǒng)。
[0017]圖1是示出根據(jù)示例性實施例的數(shù)據(jù)庫系統(tǒng)環(huán)境100的框圖。數(shù)據(jù)庫系統(tǒng)環(huán)境100包括一個或多個客戶端110和數(shù)據(jù)庫管理系統(tǒng)(DBMS) WOt3DBMSWO包括多版本并發(fā)控制事務(wù)管理器122和數(shù)據(jù)庫124。客戶端I 1a-1lOb可以通過網(wǎng)絡(luò)150與DBMS 120通信。網(wǎng)絡(luò)150可以是用于以電子方式發(fā)送數(shù)據(jù)的任何通信網(wǎng)絡(luò),包括有線網(wǎng)絡(luò)或無線網(wǎng)絡(luò),諸如例如,局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、因特網(wǎng)等。
[0018]客戶端110可以是被配置為訪問數(shù)據(jù)庫124的任何計算設(shè)備,諸如例如,計算機(jī)、膝上型計算機(jī)、移動設(shè)備、服務(wù)器等。
[0019]數(shù)據(jù)庫124可以是被配置為存儲數(shù)據(jù)、處理數(shù)據(jù)事務(wù)、并且響應(yīng)于查詢來檢索數(shù)據(jù)的任何數(shù)據(jù)庫系統(tǒng)。
[0020]事務(wù)管理器122可以被實現(xiàn)為數(shù)據(jù)庫管理系統(tǒng)的一部分,其被配置為管理數(shù)據(jù)庫124的數(shù)據(jù)的結(jié)構(gòu)、存儲、和檢索。事務(wù)管理器122在客戶端對數(shù)據(jù)庫的并發(fā)訪問期間管理數(shù)據(jù)庫事務(wù),諸如讀取、寫入和更新命令,并且處理提交操作以便提供數(shù)據(jù)庫的一致視圖。
[0021]圖2A示出了根據(jù)示例性實施例的由事務(wù)管理器122維護(hù)的用于提供多版本并發(fā)控制的MVCC結(jié)構(gòu)200 JVCC結(jié)構(gòu)200包括表空間段210、版本空間段220、以及一個或多個事務(wù)控制塊(TCB)230。
[0022 ]表空間段210存儲數(shù)據(jù)庫124的內(nèi)容,也就是說,包括一系列行和列的表。在一個實施例中,表空間段210中的表的行包含以下列:RowID(行ID) 21 UVisible (可見)212、Vers1necK版本化)213和數(shù)據(jù)列。在本文所示的例子中,表空間段210包含具有數(shù)據(jù)列Person-1d(人的 Id)214 和 Person-Name(人的名字)215 的 PERSON(人)表。
[0023]版本空間段220包含的行與表空間段210上的相同的行相對應(yīng),其存儲用于數(shù)據(jù)庫124的數(shù)據(jù)的版本信息。版本空間段220的行包含以下列:創(chuàng)建時間戳提交標(biāo)識符(CreateT i me s tamp Comm it Identifier,CTS_CID)221、創(chuàng)建到TCB的時間戮指針(CreateTimestamp Po inter to TCB,CTS-PtrTCB) 222、銷毀時間戮提交標(biāo)識符(DestroyTimestamp Commit Identifier , DTS-CID) 223、和銷毀到 TCB 的曰寸間戮指針(DestroyTimestamp Pointer to TCB,DTS-PtrTCB)224。
[0024]每個TCB230對應(yīng)于原子數(shù)據(jù)庫事務(wù)。原子數(shù)據(jù)庫事務(wù)可以是被一起提交的、諸如讀取和寫入操作的一個或多個操作的組。TCB 231維護(hù)事務(wù)的提交信息,其可以被讀取者進(jìn)程使用以確定響應(yīng)于讀取操作什么數(shù)據(jù)版本應(yīng)該被返回。每個TCB包含索引值231、狀態(tài)值232、先前時間戳(PreTS)233、時間戳234和事務(wù)ID(TID)235。
[0025]圖2A至圖21示出了根據(jù)示例性實施例的當(dāng)一系列數(shù)據(jù)庫事務(wù)發(fā)生時的MVCC結(jié)構(gòu)200的內(nèi)容。
[0026]圖2A示出了根據(jù)實施例的表空間210和版本空間220的示例性初始內(nèi)容。在表空間210中,PERSON表包含分別與具有Person-1D 01、02和03的三個人Tom、Jim和Bill相關(guān)聯(lián)的數(shù)據(jù)的三行數(shù)據(jù)。最初,這三行具有可見標(biāo)志設(shè)置,這表明該行是可見的,并且可以被返回而無需檢查版本。在版本空間220上,對于所有的三行,CTS-CID 221具有CID時間戳值500,這表明這三行在時刻500被提交。
[0027]圖2B示出了根據(jù)實施例的在發(fā)起更新person-1D 001的Person-Name值的事務(wù)之后的數(shù)據(jù)庫124的內(nèi)容。在這個例子中,事務(wù)301可以與數(shù)據(jù)庫查詢類似地運(yùn)行,所述數(shù)據(jù)庫查詢諸如:UPDATE “PERSON” SET “NAME” = ‘ John,WHERE “ID” = ‘ 01’。
[0028]圖2B還示出了撤消(undo)日志240,其包含按運(yùn)行的順序的數(shù)據(jù)庫操作的列表。撤消日志240可以存儲用于事務(wù)回滾以及在版本空間220中清除TCB指針的信息,如在下面詳細(xì)解釋的。在示出的例子中,數(shù)據(jù)庫一一在運(yùn)行UPDATE