SQL Server簡潔查詢正在運行SQL(等待事件)


通常我們可以使用

sp_who2

       我們希望更加簡潔的信息,下面這個查詢使用系統表sys.sysprocesses,以及sys.dm_exec_sql_text做OUTER APPLY. T-SQL是這樣的:      

SELECT   spid,
         blocked,
         DB_NAME(sp.dbid) AS DBName,
         program_name,
         waitresource,
		 sp.waittime,
		 sp.stmt_start,
         lastwaittype,
         sp.loginame,
		 sp.Status,
         sp.hostname,
         a.[Text] AS [TextData],
         SUBSTRING(A.text, sp.stmt_start / 2,
         (CASE WHEN sp.stmt_end = -1 THEN DATALENGTH(A.text) ELSE sp.stmt_end
         END - sp.stmt_start) / 2) AS [current_cmd]
FROM     sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS A
WHERE    spid > 50 and lastwaittype='HADR_SYNC_COMMIT'             
ORDER BY blocked DESC, DB_NAME(sp.dbid) ASC, a.[text];

  上面可以查看正在執行的sql,他的等待事件 

         您可能注意到過濾了spid小於50的,這里有TextData,Current_cmd兩列,可以列出當前DataBase執的SQL文本,當然您拿到spid就可以使用更多的查詢。 

      以便於您定位阻塞的進程。

        

視圖中主要的字段:
1. Spid:Sql Servr 會話ID
2. Kpid:Windows 線程ID
3. Blocked:正在阻塞求情的會話 ID。如果此列為 Null,則標識請求未被阻塞
4. Waittype:當前連接的等待資源編號,標示是否等待資源,0 或 Null表示不需要等待任何資源
5. Waittime:當前等待時間,單位為毫秒,0 表示沒有等待
6. DBID:當前正由進程使用的數據庫ID
7. UID:執行命令的用戶ID
8. Login_time:客戶端進程登錄到服務器的時間。
9. Last_batch:上次執行存儲過程或Execute語句的時間。對於系統進程,將存儲Sql Server 的啟動時間
10.Open_tran:進程的打開事務個數。如果有嵌套事務,就會大於1
11.Status:進程ID 狀態,dormant = 正在重置回話 ; running = 回話正在運行一個或多個批處理 ; background = 回話正在運行一個后台任務 ; rollback = 會話正在處理事務回滾 ; pending = 回話正在等待工作現成變為可用 ; runnable = 會話中的任務在等待獲取 Scheduler 來運行的可執行隊列中 ; spinloop = 會話中的任務正在等待自旋鎖變為可用 ; suspended = 會話正在等待事件完成
12.Hostname:建立鏈接的客戶端工作站的名稱
13.Program_name:應用程序的名稱,就是 連接字符串中配的 Application Name
14.Hostprocess:建立連接的應用程序在客戶端工作站里的進程ID號
15.Cmd:當前正在執行的命令
16.Loginame:登錄名


免責聲明!

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



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