SQL SERVER的鎖機制(二)——概述(鎖的兼容性與可以鎖定的資源)


接上SQL SERVER的鎖機制(一)——概述(鎖的種類與范圍)

 

 

 

二、完整的鎖兼容性矩陣(見下圖)

 

 對上圖的是代碼說明:見下圖。

 

三、下表列出了數據庫引擎可以鎖定的資源。

名稱

資源

縮寫

編碼

呈現鎖定時,描述該資源的方式

說明

數據行

RID

RID

9

文件編號:分頁編號:Slot編號

用於鎖定堆中的單個行的行標識符。

索引鍵

KEY

KEY

7

6字節哈希值

索引中用於保護可序列化事務中的鍵范圍的行鎖。

分頁

PAGE

PAG

6

文件編號:分頁編號

數據庫中的 8 KB 頁,例如數據頁或索引頁。

范圍

EXTENT

EXT

8

文件編號:范圍的第一個分頁的編號

一組連續的八頁,例如數據頁或索引頁。

 

HoBT

     

堆或 樹。 用於保護沒有聚集索引的表中的 樹(索引)或堆數據頁的鎖。

數據表

TABLE

TAB

5

數據表IDOBJID字段)

包括所有數據和索引的整個表。

文件

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')

begin

drop table #temp

create table #temp(spid int,dbid int ,objid int,indid int,type varchar(3),resource varchar(20)

,mode varchar(20),status varchar(5))

end

begin tran

update WBK_PDE_head set [COP_EMS_NO]='abcde' where wbook_no='BE404942850177'

insert #temp exec sp_lock @@spid

commit tran

 

-----獲取dbid

--select DB_ID('Test')

--只查看定制的數據庫的相關資源,sql 2008

select 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=28

order 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=28

order 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的鎖機制(一)——概述(鎖的種類與范圍)中的“示例代碼二”相內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM