SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)
?
?
?
二、完整的鎖兼容性矩陣(見下圖)
?
?對上圖的是代碼說明:見下圖。
?
三、下表列出了數據庫引擎可以鎖定的資源。
| 名稱 | 資源 | 縮寫 | 編碼 | 呈現鎖定時,描述該資源的方式 | 說明 |
| 數據行 | RID | RID | 9 | 文件編號:分頁編號:Slot編號 | 用于鎖定堆中的單個行的行標識符。 |
| 索引鍵 | KEY | KEY | 7 | 6字節哈希值 | 索引中用于保護可序列化事務中的鍵范圍的行鎖。 |
| 分頁 | PAGE | PAG | 6 | 文件編號:分頁編號 | 數據庫中的?8?KB?頁,例如數據頁或索引頁。 |
| 范圍 | EXTENT | EXT | 8 | 文件編號:范圍的第一個分頁的編號 | 一組連續的八頁,例如數據頁或索引頁。 |
| ? | HoBT | ? | ? | ? | 堆或?B?樹。?用于保護沒有聚集索引的表中的?B?樹(索引)或堆數據頁的鎖。 |
| 數據表 | TABLE | TAB | 5 | 數據表ID(OBJID字段) | 包括所有數據和索引的整個表。 |
| 文件 | FILE | FIL | 3 | 文件編號 | 數據庫文件。 |
| 應用程序 | APPLICATION | APP | 10 | 6字節哈希值 | 應用程序專用的資源。 |
| ? | METADATA | ? | ? | ? | 元數據鎖。 |
| ? | ALLOCATION_UNIT | ? | ? | ? | 分配單元。 |
| 數據庫 | DATABASE | DB | 2 | 數據庫代碼(DBID字段) | 整個數據庫。 |
| 索引 | ? | IDX | 4 | Db_id:object_id:index_id相關的其他資源 | 索引中的數據行鎖定, |
?
?
?
?
四、SQL?SERVER要鎖定資源時,默認是從最底級開始鎖起,例如,索引鍵值,數據行,以避免大范圍鎖定,以避免影響其他人同時訪問該范圍內的其他數據,但是當內存不足時,SQL?SERVER會自動擴大鎖定范圍以減低管理鎖定的負荷。下面我們來看一個示例。
?
--建立SP_LOCK輸出緩存表if exists( select * from tempdb..sysobjects where name like '#temp%' and type ='u')begindrop table #tempcreate table #temp(spid int,dbid int ,objid int,indid int,type varchar(3),resource varchar(20),mode varchar(20),status varchar(5))endbegin tranupdate WBK_PDE_head set [COP_EMS_NO]='abcde' where wbook_no='BE404942850177'insert #temp exec sp_lock @@spidcommit tran-----獲取dbid--select DB_ID('Test')--只查看定制的數據庫的相關資源,sql 2008select spid,數據庫=DB_NAME(dbid),對象=OBJECT_NAME(objid),索引=(select name from sysindexes where ID=OBJID and indid=t.indid ),TYPE,resource,mode,status from #temp t where dbid=28order by dbid,objid,indid------以SQL 2005的sys.indexes表查詢相關數據select spid,數據庫=DB_NAME(dbid),對象=OBJECT_NAME(objid),索引=(select name from sys.indexes where object_id=OBJID and index_id=t.indid ),TYPE,resource,mode,status from #temp t where dbid=28order by dbid,objid,indid?
說明:
1.建立臨時表#Temp用以存儲系統存儲過程sp_lock輸出的數據
2.開啟事務,然后更新數據(update),但不去確認事務,數據庫會鎖定相關對象,將sp_lock所呈現的相關數據插入到#Temp表中,并將結果查詢出來。
?
在查詢分析器中執行以下代碼?
?
select a.*,b.name from #temp a left join sysobjects b on a.objid=b.id order by a.type?
圖如下示:
?
?
另外的示例可以參見SQL SERVER的鎖機制(一)——概述(鎖的種類與范圍)中的“示例代碼二”相內容。
轉載于:https://www.cnblogs.com/mwming/p/3489335.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: {ldelim},{rdelim} -
- 下一篇: 测试报告M2