SQL Server資料庫鎖機制及型別

2021-08-24 19:09:42 字數 1883 閱讀 3482

microsoft sql server(以下簡稱sql server)作為一種中小型資料庫管理系統,已經得到了廣泛的應用,該系統更強調由系統來管理鎖。在使用者有sql請求時,系統分析請求,自動在滿足鎖定 條件和系統效能之間為資料庫加上適當的鎖,同時系統在執行期間常常自動進行優化處理,實行動態加鎖。

對於一般的使用者而言,通過系統的自動鎖定管理機制基本可以滿足使用要求,但如果對資料安全、資料庫完整性和一致性有特殊要求,就必須自己控制資料庫的鎖定和解鎖,這就需要了解sql server的鎖機制,掌握資料庫鎖定方法。

鎖的多粒度性以及鎖公升級

資料庫中的鎖是指一種軟體機制,用來指示某個使用者(也即程序會話,下同)已經占用了某種資源,從而防止其他使用者做出影響本使用者的資料修改或導致資料庫數 據的非完整性和非一致性。這兒所謂資源,主要指使用者可以操作的資料行、索引以及資料表等。根據資源的不同,鎖有多粒度(multigranular)的概 念,也就是指可以鎖定的資源的層次。sql server中能夠鎖定的資源粒度包括:資料庫、表、區域、頁面、鍵值(指帶有索引的行資料)、行識別符號(rid,即表中的單行資料)。

採用多粒度鎖的重要用途是用來支援併發操作和保證資料的完整性。sql server根據使用者的請求,做出分析後自動給資料庫加上合適的鎖。假設某使用者只操作乙個表中的部分行資料,系統可能會只新增幾個行鎖(rid)或頁面 鎖,這樣可以盡可能多地支援多使用者的併發操作。但是,如果使用者事務中頻繁對某個表中的多條記錄操作,將導致對該錶的許多記錄行都加上了行級鎖,資料庫系統 中鎖的數目會急劇增加,這樣就加重了系統負荷,影響系統效能。因此,在資料庫系統中,一般都支援鎖公升級(lock escalation)。所謂鎖公升級是指調整鎖的粒度,將多個低粒度的鎖替換成少數的更高粒度的鎖,以此來降低系統負荷。在sql server中當乙個事務中的鎖較多,達到鎖公升級門限時,系統自動將行級鎖和頁面鎖公升級為表級鎖。特別值得注意的是,在sql server中,鎖的公升級門限以及鎖公升級是由系統自動來確定的,不需要使用者設定。

sql server鎖型別

1. holdlock: 在該錶上保持共享鎖,直到整個事務結束,而不是在語句執行完立即釋放所新增的鎖。

2. nolock:不新增共享鎖和排它鎖,當這個選項生效後,可能讀到未提交讀的資料或「髒資料」,這個選項僅僅應用於select語句。

3. paglock:指定新增頁鎖(否則通常可能新增表鎖)。 

4. readcommitted用與執行在提交讀隔離級別的事務相同的鎖語義執行掃瞄。預設情況下,sql server 2000 在此隔離級別上操作。。 

5. readpast: 跳過已經加鎖的資料行,這個選項將使事務讀取資料時跳過那些已經被其他事務鎖定的資料行,而不是阻塞直到其他事務釋放鎖,readpast僅僅應用於read committed隔離性級別下事務操作中的select語句操作。 

6. readuncommitted:等同於nolock。 

7. repeatableread:設定事務為可重複讀隔離性級別。 

8. rowlock:使用行級鎖,而不使用粒度更粗的頁級鎖和表級鎖。  

9. serializable:用與執行在可序列讀隔離級別的事務相同的鎖語義執行掃瞄。等同於 holdlock。 

10. tablock:指定使用表級鎖,而不是使用行級或頁面級的鎖,sql server在該語句執行完後釋放這個鎖,而如果同時指定了holdlock,該鎖一直保持到這個事務結束。  

11. tablockx:指定在表上使用排它鎖,這個鎖可以阻止其他事務讀或更新這個表的資料,直到這個語句或整個事務結束。 

12. updlock :指定在讀表中資料時設定更新 鎖(update lock)而不是設定共享鎖,該鎖一直保持到這個語句或整個事務結束,使用updlock的作用是允許使用者先讀取資料(而且不阻塞其他使用者讀資料),並且 保證在後來再更新資料時,這一段時間內這些資料沒有被其他使用者修改。

資料庫鎖機制

這段時間由於開發專案,重新學習了資料庫的併發控制和鎖機制。資料庫就是通過鎖機制來解決併發問題的。主要就是兩種鎖,共享鎖和排他鎖 也叫獨佔鎖 在執行select語句的時候需要給操作物件 表或者一些記錄 加上共享鎖,但加鎖之前需要檢查是否有排他鎖,如果沒有,則可以加共享鎖 乙個物件上可以加n個共享鎖 否...

資料庫鎖機制

這段時間由於開發專案,重新學習了資料庫的併發控制和鎖機制。資料庫就是通過鎖機制來解決併發問題的。主要就是兩種鎖,共享鎖和排他鎖 也叫獨佔鎖 在執行select語句的時候需要給操作物件 表或者一些記錄 加上共享鎖,但加鎖之前需要檢查是否有排他鎖,如果沒有,則可以加共享鎖 乙個物件上可以加n個共享鎖 否...

資料庫鎖機制

資料庫就是通過鎖機制來解決併發問題的。主要就是兩種鎖,共享鎖和排他鎖 也叫獨佔鎖 在執行select語句的時候需要給操作物件 表或者一些記錄 加上共享鎖,但加鎖之前需要檢查是否有排他鎖,如果沒有,則可以加共享鎖 乙個物件上可以加n個共享鎖 否則不行。共享鎖通常在執行完select語句之後被釋放,當然...