Microsoft SQL Server鎖模式的正確應用
以下的文章講述的是Microsoft SQL Server鎖模式,在SQL Server數(shù)據(jù)庫中加鎖的實際操作過程中除了可以對一些資源進行加鎖,同時還可以使用不同程度的加鎖方式,即鎖有多種模式,SQL Server中鎖模式包括:
1.共享鎖 SQL Server中,共享鎖用于所有的只讀數(shù)據(jù)操作。共享鎖是非獨占的,允許多個并發(fā)事務讀取其鎖定的資源。默認情況下,數(shù)據(jù)被讀取后,SQL Server立即釋放共享鎖。例如,執(zhí)行查詢“SELECT * FROM AUTHORS”時,首先鎖定***頁,讀取之后,釋放對***頁的鎖定,然后鎖定第二頁。
這樣,就允許在讀操作過程中,修改未被鎖定的***頁。但是,事務隔離級別連接選項設置和SELECT語句中的鎖定設置都可以改變SQL Server的這種默認設置。例如,“ SELECT * FROM AUTHORS HOLDLOCK”就要求在整個查詢過程中,保持對表的鎖定,直到查詢完成才釋放鎖定。
2.更新鎖 更新鎖在修改操作的初始化階段用來鎖定可能要被修改的資源,這樣可以避免使用共享鎖造成的死鎖現(xiàn)象。因為使用共享鎖時,修改數(shù)據(jù)的操作分為兩步,首先獲得一個共享鎖,讀取數(shù)據(jù),然后將共享鎖升級為排它鎖,然后再執(zhí)行修改操作。
這樣如果同時有兩個或多個事務同時對一個事務申請了共享鎖,在修改數(shù)據(jù)的時候,這些事務都要將共享鎖升級為排它鎖。這時,這些事務都不會釋放共享鎖而是一直等待對方釋放,這樣就造成了死鎖。如果一個數(shù)據(jù)在修改前直接申請更新鎖,在數(shù)據(jù)修改的時候再升級為排它鎖,就可以避免死鎖。
3.排它鎖 排它鎖是為修改數(shù)據(jù)而保留的。它所鎖定的資源,其他事務不能讀取也不能修改。
4.結構鎖 執(zhí)行表的數(shù)據(jù)定義語言 (DDL) 操作(例如添加列或除去表)時使用架構修改 (Sch-M) 鎖。當編譯查詢時,使用架構穩(wěn)定性 (Sch-S) 鎖。架構穩(wěn)定性 (Sch-S) 鎖不阻塞任何事務鎖,包括排它鎖。因此在編譯查詢時,其它事務(包括在表上有排它鎖的事務)都能繼續(xù)運行。但不能在表上執(zhí)行 DDL 操作。
5.意向鎖 意向鎖說明SQL Server有在資源的低層獲得共享鎖或排它鎖的意向。例如,表級的共享意向鎖說明事務意圖將排它鎖釋放到表中的頁或者行。意向鎖又可以分為共享意向鎖、獨占意向鎖和共享式獨占意向鎖。
共享意向鎖說明事務意圖在共享意向鎖所鎖定的低層資源上放置共享鎖來讀取數(shù)據(jù)。獨占意向鎖說明事務意圖在共享意向鎖所鎖定的低層資源上放置排它鎖來修改數(shù)據(jù)。共享式排它鎖說明事務允許其他事務使用共享鎖來讀取頂層資源,并意圖在該資源低層上放置排它鎖。
6.大容量更新鎖 當將數(shù)據(jù)大容量復制到表,且指定了 TABLOCK 提示或者使用 sp_tableoption 設置了 table lock on bulk 表選項時,將使用大容量更新 鎖。大容量更新鎖允許進程將數(shù)據(jù)并發(fā)地大容量復制到同一表,同時防止其它不進行大容量復制數(shù)據(jù)的進程訪問該表。
上述的相關內容就是對Microsoft SQL Server鎖模式的描述,希望會給你帶來一些幫助在此方面。
【編輯推薦】