天天看點

查詢鎖事務及語句

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>