查看當前數據庫正在運行的Session


當數據庫運行比較緩慢時,我們需要實時查看當前有什么Session在運行,獲得信息越完整,對於分析低性能的原因越有幫助。根據之前調優的經歷,簡單幾步分析如下:

1.通過SQL Server內置的Sp_who查詢

2.更深入的可以通過Sp_who2查詢

3.比第2點更豐富的,可以通過下面的語句,不但可以查詢出當前executing_statement,還可以獲取到當前語句的執行計划

 

--語句如下:

 1 SELECT des.session_id ,
 2 
 3 des.status ,
 4 
 5 des.login_name ,
 6 
 7 des.[HOST_NAME] ,
 8 
 9 der.blocking_session_id ,
10 
11 DB_NAME(der.database_id) AS database_name ,
12 
13 der.command ,
14 
15 des.cpu_time ,
16 
17 des.reads ,
18 
19 des.writes ,
20 
21 dec.last_write ,
22 
23 des.[program_name] ,
24 
25 der.wait_type ,
26 
27 der.wait_time ,
28 
29 der.last_wait_type ,
30 
31 der.wait_resource ,
32 
33 CASE des.transaction_isolation_level
34 
35 WHEN 0 THEN 'Unspecified'
36 
37 WHEN 1 THEN 'ReadUncommitted'
38 
39 WHEN 2 THEN 'ReadCommitted'
40 
41 WHEN 3 THEN 'Repeatable'
42 
43 WHEN 4 THEN 'Serializable'
44 
45 WHEN 5 THEN 'Snapshot'
46 
47 END AS transaction_isolation_level ,
48 
49 OBJECT_NAME(dest.objectid, der.database_id) AS OBJECT_NAME ,
50 
51 SUBSTRING(dest.text, der.statement_start_offset / 2,
52 
53 ( CASE WHEN der.statement_end_offset = -1
54 
55 THEN DATALENGTH(dest.text)
56 
57 ELSE der.statement_end_offset
58 
59 END - der.statement_start_offset ) / 2)
60 
61 AS [executing statement] ,
62 
63 deqp.query_plan
64 
65 FROM sys.dm_exec_sessions des
66 
67 LEFT JOIN sys.dm_exec_requests der
68 
69 ON des.session_id = der.session_id
70 
71 LEFT JOIN sys.dm_exec_connections dec
72 
73 ON des.session_id = dec.session_id
74 
75 CROSS APPLY sys.dm_exec_sql_text(der.sql_handle) dest
76 
77 CROSS APPLY sys.dm_exec_query_plan(der.plan_handle) deqp
78 
79 --WHERE des.session_id <> @@SPID
80 
81 ORDER BY des.session_id

 

 

 

---------------------------------------------------------------------------------------------------------

SameZhao


免責聲明!

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



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