1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<code>if exists(</code><code>select</code>
<code>*</code><code>from</code> <code>master.sys.sysprocesses</code><code>where</code>
<code>spid</code><code>in</code> <code>(</code><code>select</code> <code>blocked</code><code>from</code>
<code>master.sys.sysprocesses))</code>
<code>begin</code>
<code>---确定程序被鎖住的其他資源</code>
<code>select</code> <code>spid 程序,STATUS 狀态, 登入帳号=</code><code>SUBSTRING</code><code>(SUSER_SNAME(sid),1,30)</code>
<code>,使用者機器名稱=</code><code>SUBSTRING</code><code>(hostname,1,12)</code>
<code>,是否被鎖住=</code><code>convert</code><code>(</code><code>char</code><code>(3),blocked)</code>
<code>,資料庫名稱=</code><code>SUBSTRING</code><code>(db_name(dbid),1,20),cmd 指令,waittype</code><code>as</code>
<code>等待類型</code>
<code>,last_batch 最後批處理時間,open_tran 未送出事務的數量</code>
<code>from</code> <code>master.sys.sysprocesses</code>
<code>--列出鎖住别人(在别的程序中blocked字段中出現的值)但自己未被鎖住(blocked=0)</code>
<code>Where</code> <code>spid</code><code>in</code> <code>(</code><code>select</code> <code>blocked</code><code>from</code>
<code>master.sys.sysprocesses)</code><code>and</code>
<code>blocked=0</code>
<code>end</code>
<code>else</code>
<code>select</code>
<code>‘沒有被鎖住的程序‘</code>
<code>t1.resource_type [資源鎖定類型],DB_NAME(resource_database_id)</code><code>as</code>
<code>資料庫名</code>
<code>,t1.resource_associated_entity_id 鎖定對象,t1.request_mode</code><code>as</code>
<code>等待者請求的鎖定模式</code>
<code>,t1.request_session_id 等待者SID</code>
<code>,t2.wait_duration_ms 等待時間</code>
<code>,(</code><code>select</code>
<code>TEXT</code><code>from</code> <code>sys.dm_exec_requests r</code><code>cross</code>
<code>apply</code>
<code>sys.dm_exec_sql_text(r.sql_handle)</code><code>where</code>
<code>r.session_id=t1.request_session_id)</code><code>as</code>
<code>等待者要執行的SQL</code>
<code>SUBSTRING</code><code>(qt.text,r.statement_start_offset/2+1,</code>
<code>(</code><code>case</code>
<code>when</code> <code>r.statement_end_offset=-1</code><code>then</code>
<code>DATALENGTH(qt.text)</code><code>else</code>
<code>r.statement_end_offset</code><code>end</code>
<code>-r.statement_start_offset)/2+1</code>
<code>)</code>
<code>from</code> <code>sys.dm_exec_requests r</code><code>cross</code>
<code>apply sys.dm_exec_sql_text(r.sql_handle)qt</code>
<code>where</code> <code>r.session_id=t1.request_session_id) 等待者正要執行的語句</code>
<code>,t2.blocking_session_id [鎖定者SID]</code>
<code>TEXT</code><code>from</code> <code>sys.sysprocesses p</code><code>cross</code>
<code>sys.dm_exec_sql_text(p.sql_handle)</code>
<code>where</code> <code>p.spid=t2.blocking_session_id</code>
<code>) 鎖定者執行語句</code>
<code>from</code> <code>sys.dm_tran_locks t1,sys.dm_os_waiting_tasks t2</code>
<code>where</code> <code>t1.lock_owner_address=t2.resource_address</code>