歷來 DBA 想知道某個工作階段正在執行什麼 SQL 陳述式,只能用 DBCC INPUTBUFFER(spid),但它無法在 T-SQL 中直接呼叫、無法與其他 DMV 串接查詢。SQL Server 2016 引入 sys.dm_exec_input_buffer 動態管理函數 (DMF),徹底解決這些痛點。
sys.dm_exec_input_buffer ( session_id, request_id )
session_id:工作階段識別碼 (SPID)。request_id:要求識別碼,通常為 0 表示目前作用中要求。SELECT * FROM sys.dm_exec_input_buffer(55, 0);
回傳欄位:event_type、parameters、event_info (實際 SQL 文字)。
SELECT
r.session_id,
s.login_name,
s.host_name,
ib.event_info AS current_sql_text
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_input_buffer(r.session_id, r.request_id) ib
WHERE s.is_user_process = 1;
即可一次列出所有使用者工作階段正在執行的 SQL 陳述式,方便即時效能監控與阻塞排查。
| 特性 | DBCC INPUTBUFFER | sys.dm_exec_input_buffer |
|---|---|---|
| 可在 T-SQL 查詢中使用 | ❌ | ✅ |
| 可與其他 DMV JOIN / APPLY | ❌ | ✅ |
| 可納入自動化監控腳本 | ❌ | ✅ |
| 回傳格式 | 訊息頁面 | 標準結果集 |
升級至 SQL Server 2016 後,請直接改用 sys.dm_exec_input_buffer 建立更強大的即時監控與診斷方案。