2023-07-01|閱讀時間 ‧ 約 4 分鐘

[SQL]資料庫正在執行的指令與資訊

    平常在執行SP時,時常會遇到程式執行得特別慢,或已經跑到Time out了都還沒執行成功,SQL Server有提供各種監控的DMV(Dynamic Management View),可查詢資料庫中即時的運作資訊,也包括正在執行的完整指令。
    正在執行指令
    正在執行指令
    可以看到正在執行的的段落
       SELECT 
    	   r.scheduler_id AS '排程器識別碼'
    	  ,r.[status] AS '要求的狀態'
    	  ,r.session_id AS 'SPID'
    	  ,r.blocking_session_id AS 'BlkBy'
    	  ,SUBSTRING(LTRIM(q.[text]),r.statement_start_offset / 2+1,
    		   (CASE WHEN r.statement_end_offset = -1
    			    THEN LEN(CONVERT(NVARCHAR(MAX), q.[text])) * 2
    			    ELSE r.statement_end_offset
    			    END - r.statement_start_offset) / 2
    		      ) AS '正在執行的 T-SQL 命令'
    	  ,r.cpu_time AS 'CPU Time(ms)'
    	  ,r.start_time AS '開始時間'
    	  ,r.total_elapsed_time AS '執行總時間'
    	  ,r.reads AS '讀取數'
    	  ,r.writes AS '寫入數'
    	  ,r.logical_reads AS '邏輯讀取數'
    	  ,q.[text] AS '完整的 T-SQL 指令碼'
    	  ,d.[name] AS '資料庫名稱'
           FROM sys.dm_exec_requests r
    CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS q
      LEFT JOIN sys.databases d 
             ON (r.database_id=d.database_id)
          WHERE r.session_id > 50 
    	AND r.session_id <> @@SPID
       ORDER BY r.total_elapsed_time DESC
    也可以使用sp_who2 這個系統預存程序,查看目前資料庫上的連線 Session、登入名稱、連線資料庫、裝置名稱,看是否有連線被咬住的狀況,不過Command欄位裡面只有一小句,看不到完整的部分。
    執行sp_who2
    在對DMV還不熟的情況下(沒背起來也無法複製時),還是習慣用sp_who2看,也比較快不用還要打一段語法,也可以直接KILL掉,只是就是看不到現在正在跑落落長程式中的哪一段(´・ω・`)
    分享至
    成為作者繼續創作的動力吧!
    從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

    你可能也想看

    發表回應

    成為會員 後即可發表留言
    © 2024 vocus All rights reserved.