意向鎖含義
意向鎖的含義是如果對一個結點加意向鎖,則說明該結點的下層結點正在被加鎖;對任一結點加鎖時,必須先對它的上層結點加意向鎖。
例如,對任一元組加鎖時,必須先對它所在的關係加意向鎖。
於是,事務T要對關係R1加 X鎖時,系統只要檢查根結點資料庫和關係R1是否己加了不相容的鎖,而不再需要搜尋和檢查尺中的每一個元組是否加了X鎖。
下面介紹三種常用的意向鎖:意向共享鎖(Intent Share Lock,簡稱IS鎖);意向排它鎖(Intent Exclusive Lock,簡稱IX鎖);共享意向排它鎖(Share Intent Exclusive Lock,簡稱SIX鎖)。
類型
IS鎖
如果對一個數據對象加IS鎖,表示它的後裔結點擬(意向)加 S鎖。例如,要對某個元組加 S鎖,則要首先對關係和資料庫加 IS鎖。
IX鎖
如果對一個數據對象加 IX鎖,表示它的後裔結點擬(意向)加 X鎖。例如,要對某個元組加 X鎖,則要首先對關係和資料庫加 IX鎖。
SIX鎖
如果對一個數據對象加 SIX鎖,表示對它加 S鎖,再加IX鎖,即 SIX=S+IX。例如對某個表加 SIX鎖,則表示該事務要讀整個表(所以要對該表加 S鎖),同時會更新個別元組(所以要對該表加 IX鎖)。
圖8.9(a)給出了這些鎖的相容矩陣,從中可以發現這5種鎖的強度如圖8.9(b)所示的偏序關係。所謂鎖的強度是指它對其他鎖的排斥程度。一個事務在申請封鎖時以強鎖代替弱鎖是安全的,反之則不然。
具有意向鎖的多粒度封鎖方法中任意事務T要對一個數據對象加鎖,必須先對它的上層結點加意向鎖。申請封鎖時應該按自上而下的次序進行;釋放封鎖時則應該按自下而上的次序進行。
具有意向鎖的多粒度封鎖方法提高了系統的並發度,減少了加鎖和解鎖的開銷,它己經在實際的資料庫管理系統產品中得到廣泛套用,例如新版的Oracle資料庫系統就採用了這種封鎖方法。
作用
引進意向鎖是為了提高封鎖子系統的效率。該封鎖子系統支持多種封鎖粒度。原因是:在多粒度封鎖方法中一個數據對象可能以兩種方式加鎖 ― 顯式封鎖和隱式封鎖。因此系統在對某一數據對象加鎖時不僅要檢查該數據對象上有無(顯式和隱式)封鎖與之衝突,還要檢查其所有上級結點和所有下級結點,看申請的封鎖是否與這些結點上的(顯式和隱式)封鎖衝突,顯然,這樣的檢查方法效率很低。為此引進了意向鎖。意向鎖的含義是:對任一結點加鎖時,必須先對它的上層結點加意向鎖。例如事務 T 要對某個元組加 X 鎖,則首先要對關係和資料庫加 ix 鎖。換言之,對關係和資料庫加 ix 鎖,表示它的後裔結點 ― 某個元組擬(意向)加 X 鎖。引進意向鎖後,系統對某一數據對象加鎖時不必逐個檢查與下一級結點的封鎖衝突了。例如,事務 T 要對關係 R 加 X 鎖時,系統只要檢查根結點資料庫和 R 本身是否已加了不相容的鎖(如發現已經加了 ix ,則與 X 衝突),而不再需要搜尋和檢查 R 中的每一個元組是否加了 X 鎖或 S 鎖。