專利名稱:一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,尤其涉及到數(shù)據(jù)庫并發(fā)控制過程中對事務(wù)的沖突程度進行 統(tǒng)計和判決。
背景技術(shù):
在基于鎖的事務(wù)并發(fā)控制技術(shù)中,數(shù)據(jù)庫經(jīng)常采用多粒度加鎖機制,可以使用庫級鎖、 表級鎖、行級鎖等不同粒度的鎖。其中,粗粒度的表級鎖加鎖開銷小,但是并發(fā)能力差,容 易造成事務(wù)鎖沖突;細粒度的行級鎖并發(fā)能力強,但行級鎖的數(shù)量較多,加行級鎖的開銷大 。磁盤數(shù)據(jù)庫實現(xiàn)了很多不同的存儲引擎,不同的存儲引擎支持不同粒度的鎖,表級鎖的加 鎖效率相對較高,行級鎖并發(fā)能力相對較高,用戶可以根據(jù)實際應(yīng)用的并發(fā)特點,選擇最合 適的存儲引擎,從而達到最好的效率。這種鎖粒度的選擇是在數(shù)據(jù)庫存儲引擎的選擇做出的 , 一旦選擇了一種存儲引擎,就不能動態(tài)的改變了動態(tài)多粒度鎖機制正是基于這種思想設(shè)計 的。這種靜態(tài)的使用多粒度鎖的機制不能有效解決具有高突發(fā)性的事務(wù)流模型。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種考慮鎖的相容特性和事務(wù)操作開銷的事務(wù)沖突判 決方法。
為解決上述技術(shù)問題,本發(fā)明根據(jù)事務(wù)沖突級別,采用鎖粒度細化檢測算法動態(tài)決定在 表上是使用粗粒度的表級鎖還是細粒度的行級鎖。
按上述方案,所述事務(wù)沖突級別由如下公式計算 TC = aXNx+bXNs
其中,TC為事務(wù)的沖突級別,Ns為不相容共享鎖的數(shù)量,Nx是鎖等待隊列中排他鎖的數(shù) 量,a、 b為事務(wù)沖突權(quán)重系數(shù),取值范圍。
按上述方案,所述鎖粒度細化檢測算法是指系統(tǒng)初始化的時候,表上的鎖粒度默認初始 化為粗粒度的表級鎖,當(dāng)監(jiān)視到表上事務(wù)沖突到達一定級別后,將鎖的粒度轉(zhuǎn)化為細粒度的 行級鎖,當(dāng)事務(wù)沖突降到一定級別后,表上的鎖粒度也由行級鎖變?yōu)楸砑夋i;當(dāng)系統(tǒng)初始化時表上的鎖粒度為表級鎖,或者當(dāng)表上鎖粒度剛剛由行級鎖轉(zhuǎn)化為表級鎖,系統(tǒng)執(zhí)行粒度細 化檢測流程。
按上述方案,所述粒度細化檢測流程具體步驟如下
初始化監(jiān)視閾值C1和鎖粒度細化閾值C2, 一般狀態(tài)下,系統(tǒng)以周期T1周期性的計算每個
表上的沖突級別TC;
比較當(dāng)前TC和C1的大小,當(dāng)TC大于或者等于C1,該表進入沖突監(jiān)視狀態(tài),為該表設(shè)置一 個周期為T2的定時器;如果TC小于C1,該表繼續(xù)進行一般狀態(tài)下的檢測; 每當(dāng)表上周期T2的定時器消息到達時,重新計算TC;
比較當(dāng)前TC和C1的大小,如果TC小于C1,該表進入一般狀態(tài)下的檢測,銷毀周期T2的定 時器;如果TC大于或者等于C1,進行后面的步驟;
比較當(dāng)前TC和前一周期內(nèi)TC的大小,如果TC比前一周期內(nèi)的TC大,那么C2二C2—C0, CO為細化閾值變化的步值;如果TC比前一周期內(nèi)的TC要小,那么C2二C2+C0;如果TC和前一 周期內(nèi)的TC相等,那么C2不變;
比較TC和C2的大小,如果TC大于或者等于C2,那么細化該表上的鎖粒度,將現(xiàn)有的表級 鎖轉(zhuǎn)化為行級鎖,銷毀周期為T2的監(jiān)視定時器,否則繼續(xù)等待監(jiān)視狀態(tài)下的定時器消息到達
按上述方案,所述Ns的統(tǒng)計具體步驟如下 系統(tǒng)初始化時,初始化每個表上的共享鎖計數(shù)器Ns為O;
當(dāng)表上一個共享鎖加鎖請求到達時,檢査表鎖控制塊上是否有加鎖請求正在等待;
如果有加鎖請求等待,檢査等待隊列中的最后一個加鎖請求是否是共享鎖,如果是共享 鎖,Ns保持不變,如果不是共享鎖,Ns自增l;
如果沒有加鎖請求等待,檢査當(dāng)前授予鎖隊列是否還有其它共享鎖,如果是,Ns保持不 變,如果不是Ns自增l;
當(dāng)一個共享鎖的解鎖請求到達時,檢査鎖的授予隊列上還有沒有其他共享鎖存在,如果 存在,Ns保持不變,如果不存在,Ns自減l。
按上述方案,所述Nx根據(jù)應(yīng)用,可以分為插入、更新、刪除類型互斥鎖,可以在表級鎖 上設(shè)置三個計數(shù)器Nins、 Nupd、 Ndel,分別表示插入、更新、刪除類型互斥鎖的數(shù)量,那么Nx =Nins+ Nupd + Ndd,其統(tǒng)計具體步驟如下
系統(tǒng)初始化時,初始化Nins、 NUpd、 Nd^為0;
當(dāng)有互斥鎖加鎖請求到來時,如果是插入數(shù)據(jù)型的互斥鎖,則Nins自增l,如果是更新數(shù)據(jù)型的互斥鎖,則Nupd自增l,如果是刪除數(shù)據(jù)型的互斥鎖,則Nd^自增l;
當(dāng)有互斥鎖解鎖請求到來時,如果是插入數(shù)據(jù)型的互斥鎖,則Nins自減l,如果是更新數(shù) 據(jù)型的互斥鎖,則Nupd自減l,如果是刪除數(shù)據(jù)型的互斥鎖,則Ndd自減l。
按上述方案,所述系數(shù)b為l,所述系數(shù)a是是動態(tài)變化的,是與鎖等待隊列中互斥鎖的 事務(wù)類型和事務(wù)數(shù)量相關(guān)的。
a= AinsXPins+AUpdXPupd+AdeiXPdei
在以上公式中,Ains、 Aupd、 Add分別是插入、更新、刪除類型事務(wù)的復(fù)雜度參數(shù),Ains 、Aupd、 Ad^取值2 10。 Pins、 Pupd、 Pdel分別是互斥鎖中插入、更新、刪除類型事務(wù)的比例 ,Pins=Nins/(Nins+Nupd+Ndel) , PUpd=Nupd / (Nins+NUpd+Ndel) , Pdel=Ndei /( Nins+Nupd+Ndel)。
優(yōu)選地,所述鎖粒度細化算法是通過單獨設(shè)置一個后臺線程來完成的,該后臺線程周期 性的訪問鎖管理器,計算表上的沖突級別。所述周期T1取值為20秒,Cl取值為lO, C2的初 始化值為40。所述T2取2 5秒,C0取值為2 4。
本發(fā)明考慮了鎖的相容性和讀寫事務(wù)開銷,提出一種事務(wù)沖突判決方法,當(dāng)監(jiān)視到表上 事務(wù)沖突到達一定級別后,將鎖的粒度轉(zhuǎn)化為細粒度的行級鎖,當(dāng)事務(wù)沖突降到一定級別后 ,表上的鎖粒度也由行級鎖變?yōu)楸砑夋i,可以有效解決具有高突發(fā)性的事務(wù)流模型。
下面結(jié)合附圖和具體實施方式
對本發(fā)明的技術(shù)方案作進一步具體說明。
圖l為鎖粒度細化檢測流程。
圖2是Ns統(tǒng)計方法。
具體實施例方式
系統(tǒng)初始化的時候,表上的鎖粒度默認初始化為粗粒度的表級鎖,當(dāng)監(jiān)視到表上事務(wù)沖 突到達一定級別后,將鎖的粒度轉(zhuǎn)化為細粒度的行級鎖,當(dāng)事務(wù)沖突降到一定級別后,表上 的鎖粒度也由行級鎖變?yōu)楸砑夋i。當(dāng)系統(tǒng)初始化時表上的鎖粒度為表級鎖,或者當(dāng)表上鎖粒 度剛剛由行級鎖轉(zhuǎn)化為表級鎖,系統(tǒng)執(zhí)行粒度細化檢測流程,如圖1所示,鎖粒度細化檢測 流程的實施步驟如下
1.初始化監(jiān)視閾值C1和鎖粒度細化閾值C2, 一般狀態(tài)下,系統(tǒng)以周期T1周期性的計算每 個表上的沖突級別TC。
鎖粒度細化算法是通過單獨設(shè)置一個后臺線程來完成的,它周期性的訪問鎖管理器,計算表上的沖突級別,周期T1一般取值為20秒,這是系統(tǒng)一般狀態(tài)下的檢測周期。監(jiān)視閾值 Cl是一個常數(shù),它與具體數(shù)據(jù)庫事務(wù)實現(xiàn)的方式和系統(tǒng)運行硬件環(huán)境有關(guān),應(yīng)根據(jù)實際情況 選擇最合適的值, 一般地來說,Cl取值為lO。鎖粒度細化閾值C2初始化值是一個常數(shù),但是 在系統(tǒng)的運行過程中,它是動態(tài)變化的,C2的初始化值也是與具體數(shù)據(jù)庫事務(wù)實現(xiàn)的方式和 系統(tǒng)運行硬件環(huán)境有關(guān), 一般取值為40。
2. 比較當(dāng)前TC和C1的大小,當(dāng)TC大于或者等于C1,該表進入沖突監(jiān)視狀態(tài),為該表設(shè)置 一個周期為T2的定時器;如果TC小于C1,該表繼續(xù)進行一般狀態(tài)下的檢測。
Cl是監(jiān)視狀態(tài)的閾值,監(jiān)視狀態(tài)下面,事務(wù)的沖突具有一定的級別,可能會在不久的將 來就需要細化鎖的粒度,所以設(shè)計一個周期更小的定時器來檢測沖突情況,T2—般取2 5秒 ,比T1小一些。
3. 每當(dāng)表上周期T2的定時器消息到達時,重新計算TC。
4. 比較當(dāng)前TC和C1的大小,如果TC小于C1,該表進入一般狀態(tài)下的檢測,銷毀周期T2的 定時器;如果TC大于或者等于C1,進行后面的步驟。
在監(jiān)視狀態(tài)下,當(dāng)事務(wù)沖突降低到監(jiān)視閾值以下時,系統(tǒng)沒有必要重點監(jiān)視該表上的沖 突,重點監(jiān)視會消耗更多的系統(tǒng)資源,此時該表回到一般監(jiān)視狀態(tài)。
5. 比較當(dāng)前TC和前一周期內(nèi)TC的大小,如果TC比前一周期內(nèi)的TC大,那么C2二C2—C0, CO為細化閾值變化的步值;如果TC比前一周期內(nèi)的TC要小,那么C2二C2+C0;如果TC和前一 周期內(nèi)的TC相等,那么C2不變。
如果TC是逐漸增加的,說明事務(wù)沖突也在逐漸增大,這個時候可以通過降低鎖粒度細化 閾值C2的方法,是該表上鎖的粒度盡早地細化;如果TC中途減小,說明沖突在中途也在一定 程度地降低,這時通過增加C2的方法,推遲鎖粒度的細化繼續(xù)監(jiān)視事務(wù)沖突情況。CO為細化 閾值變化的步值,是一個常數(shù),這個與C1和C2的取值也有關(guān)系, 一般取值為2 4。
6. 比較TC和C2的大小,如果TC大于或者等于C2,那么細化該表上的鎖粒度,將現(xiàn)有的表 級鎖轉(zhuǎn)化為行級鎖,銷毀周期為T2的監(jiān)視定時器。否則繼續(xù)等待監(jiān)視狀態(tài)下的定時器消息到 達。
當(dāng)細化鎖的粒度后,就不需要在監(jiān)視事務(wù)的沖突級別了。粗化鎖的粒度的原則是盡可能 早的,當(dāng)檢測到表上的行級鎖數(shù)量不多,并且轉(zhuǎn)化為表級鎖不會帶來沖突的時候,就粗化鎖 的粒度,這個時候就要重新對該表執(zhí)行鎖粒度細化檢測流程了 。
Ns是等待的相容共享鎖的數(shù)量,在表級鎖上設(shè)置一個不相容共享鎖計數(shù)器Ns, Ns的統(tǒng)計 方法如圖2所示,具體步驟如下1. 系統(tǒng)初始化時,初始化每個表上的共享鎖計數(shù)器Ns為O。
2. 當(dāng)表上一個共享鎖加鎖請求到達時,檢査表鎖控制塊上是否有加鎖請求正在等待。
3. 如果有加鎖請求等待,檢査等待隊列中的最后一個加鎖請求是否是共享鎖,如果是共 享鎖,Ns保持不變,如果不是共享鎖,Ns自增l。
4. 如果沒有加鎖請求等待,檢査當(dāng)前授予鎖隊列是否還有其它共享鎖,如果是,Ns保持 不變,如果不是Ns自增l。
5. 當(dāng)一個共享鎖的解鎖請求到達時,檢査鎖的授予隊列上還有沒有其他共享鎖存在,如 果存在,Ns保持不變,如果不存在,Ns自減l。
最后所應(yīng)說明的是,以上具體實施方式
僅用以說明本發(fā)明的技術(shù)方案而非限制,盡管參 照較佳實施例對本發(fā)明進行了詳細說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對本發(fā)明的 技術(shù)方案進行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應(yīng)涵蓋在本 發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決方法,其特征在于,根據(jù)事務(wù)沖突級別,采用鎖粒度細化檢測算法動態(tài)決定在表上是使用粗粒度的表級鎖還是細粒度的行級鎖。
2.根據(jù)權(quán)利要求l所述的一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決 方法,其特征在于,所述事務(wù)沖突級別由如下公式計算 TC = aXNx+bXNs其中,TC為事務(wù)的沖突級別,Ns為不相容共享鎖的數(shù)量,Nx是鎖等待隊列中排他鎖的 數(shù)量,a、 b為事務(wù)沖突權(quán)重系數(shù),取值范圍。
3.根據(jù)權(quán)利要求1或2所述的一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突 判決方法,其特征在于,所述鎖粒度細化檢測算法是指系統(tǒng)初始化的時候,表上的鎖粒度默 認初始化為粗粒度的表級鎖,當(dāng)監(jiān)視到表上事務(wù)沖突到達一定級別后,將鎖的粒度轉(zhuǎn)化為細 粒度的行級鎖,當(dāng)事務(wù)沖突降到一定級別后,表上的鎖粒度也由行級鎖變?yōu)楸砑夋i;當(dāng)系統(tǒng) 初始化時表上的鎖粒度為表級鎖,或者當(dāng)表上鎖粒度剛剛由行級鎖轉(zhuǎn)化為表級鎖,系統(tǒng)執(zhí)行 粒度細化檢測流程。
4.根據(jù)權(quán)利要求3所述的一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決 方法,其特征在于,所述粒度細化檢測流程具體步驟如下a. 初始化監(jiān)視閾值C1和鎖粒度細化閾值C2, 一般狀態(tài)下,系統(tǒng)以周期T1周期性的計算 每個表上的沖突級別TC;b. 比較當(dāng)前TC和C1的大小,當(dāng)TC大于或者等于C1,該表進入沖突監(jiān)視狀態(tài),為該表設(shè) 置一個周期為T2的定時器;如果TC小于C1,該表繼續(xù)進行一般狀態(tài)下的檢測; c. 每當(dāng)表上周期T2的定時器消息到達時,重新計算TC;d. 比較當(dāng)前TC和C1的大小,如果TC小于C1,該表進入一般狀態(tài)下的檢測,銷毀周期T2 的定時器;如果TC大于或者等于C1,進行后面的步驟;e. 比較當(dāng)前TC和前一周期內(nèi)TC的大小,如果TC比前一周期內(nèi)的TC大,那么C2二C2—C0,CO為細化閾值變化的步值;如果TC比前一周期內(nèi)的TC要小,那么C2二C2+C0;如果TC和前 一周期內(nèi)的TC相等,那么C2不變;f. 比較TC和C2的大小,如果TC大于或者等于C2,那么細化該表上的鎖粒度,將現(xiàn)有的 表級鎖轉(zhuǎn)化為行級鎖,銷毀周期為T2的監(jiān)視定時器,否則繼續(xù)等待監(jiān)視狀態(tài)下的定時器消息 到達。
5.根據(jù)權(quán)利要求2所述的一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決 方法,其特征在于,所述Ns的統(tǒng)計具體步驟如下a. 系統(tǒng)初始化時,初始化每個表上的共享鎖計數(shù)器Ns為O;b. 當(dāng)表上一個共享鎖加鎖請求到達時,檢査表鎖控制塊上是否有加鎖請求正在等待;c. 如果有加鎖請求等待,檢査等待隊列中的最后一個加鎖請求是否是共享鎖,如果是 共享鎖,Ns保持不變,如果不是共享鎖,Ns自增l;d. 如果沒有加鎖請求等待,檢査當(dāng)前授予鎖隊列是否還有其它共享鎖,如果是,Ns保 持不變,如果不是Ns自增l;e. 當(dāng)一個共享鎖的解鎖請求到達時,檢査鎖的授予隊列上還有沒有其他共享鎖存在, 如果存在,Ns保持不變,如果不存在,Ns自減l。
6.根據(jù)權(quán)利要求2所述的一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決 方法,其特征在于,所述Nx根據(jù)應(yīng)用,可以分為插入、更新、刪除類型互斥鎖,可以在表級 鎖上設(shè)置三個計數(shù)器Nins、 Nupd、 Ndel,分別表示插入、更新、刪除類型互斥鎖的數(shù)量,那么 Nx=Nins+ Nupd + Ndel,其統(tǒng)計具體步驟如下 系統(tǒng)初始化時,初始化Nins、 Nupd、 Ndel為O;當(dāng)有互斥鎖加鎖請求到來時,如果是插入數(shù)據(jù)型的互斥鎖,則Nins自增l,如果是更新 數(shù)據(jù)型的互斥鎖,則Nupd自增l,如果是刪除數(shù)據(jù)型的互斥鎖,貝IJNdel自增l;當(dāng)有互斥鎖解鎖請求到來時,如果是插入數(shù)據(jù)型的互斥鎖,則Nins自減l,如果是更新 數(shù)據(jù)型的互斥鎖,則Nupd自減l,如果是刪除數(shù)據(jù)型的互斥鎖,則Ndel自減l。
7.根據(jù)權(quán)利要求2所述的一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決 方法,其特征在于,所述系數(shù)b為l,所述系數(shù)a是是動態(tài)變化的,是與鎖等待隊列中互 斥鎖的事務(wù)類型和事務(wù)數(shù)量相關(guān)的,在以上公式中,Ains、 Aupd、 Adel分別是插入、更新、刪除類型事務(wù)的復(fù)雜度參數(shù), Ains、 Aupd、 Adel取值2 10, Pins、 Pupd、 Pdel分別是互斥鎖中插入、更新、刪除類型事務(wù)的比例,Pins=Nins/(Nins+Nupd+Ndel) , Pupd=Nupd /(Nins+Nupd+Ndel), Pdel=Ndel /( Nins+Nupd+Ndel)。
8.根據(jù)權(quán)利要求4所述的一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決方法,其特征在于,所述鎖粒度細化算法是通過單獨設(shè)置一個后臺線程來完成的,該后臺線程周期性的訪問鎖管理器,計算表上的沖突級別。
9.根據(jù)權(quán)利要求8所述的一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決 方法,其特征在于,所述周期T1取值為20秒,所述Cl取值為lO,所述C2的初始化值為40。
10.根據(jù)權(quán)利要求8所述的一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決 方法,其特征在于,所述T2取2 5秒,C0取值為2 4。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)庫中動態(tài)多粒度鎖的事務(wù)沖突判決方法,根據(jù)事務(wù)沖突級別,采用鎖粒度細化檢測算法動態(tài)決定在表上是使用粗粒度的表級鎖還是細粒度的行級鎖,本發(fā)明考慮了鎖的相容性和讀寫事務(wù)開銷,提出一種事務(wù)沖突判決方法,當(dāng)監(jiān)視到表上事務(wù)沖突到達一定級別后,將鎖的粒度轉(zhuǎn)化為細粒度的行級鎖,當(dāng)事務(wù)沖突降到一定級別后,表上的鎖粒度也由行級鎖變?yōu)楸砑夋i,可以有效解決具有高突發(fā)性的事務(wù)流模型。
文檔編號G06F17/30GK101667211SQ20091030584
公開日2010年3月10日 申請日期2009年8月20日 優(yōu)先權(quán)日2009年8月20日
發(fā)明者盧正新, 非 王, 王芙蓉, 董曉輝, 黃本雄 申請人:華中科技大學(xué)