1、运行如下的监控语句,看当前某个会话的sql运行到哪一步了,找到卡住的sql,然后再有针对的进行优化:
--监控SQL执行到哪一步
SELECT session_id,
b.text,
DB_NAME(b.dbid) AS DBname,
OBJECT_NAME(b.objectid) AS objname,
SUBSTRING( text,
statement_start_offset / 2,
(CASE
WHEN statement_end_offset = -1 THEN
LEN(CONVERT(NVARCHAR(MAX), text)) * 2
ELSE
statement_end_offset
END - statement_start_offset+4
) / 2
) AS query_text,
c.query_plan,
a.*
FROM sys.dm_exec_requests AS a
OUTER APPLY sys.dm_exec_sql_text(sql_handle) b --获取sql文本
OUTER APPLY sys.dm_exec_text_query_plan(plan_handle, a.statement_start_offset, a.statement_end_offset) c
WHERE a.session_id = @@SPID
这里查的是当前会话,也就是 session_id = @@spid。
query_text列 就是当前运行的sql,查询结果如下:
2、复制其中的query_text列,发现整个语句都在1行上,效果如下图:
由于没有格式,这个语句没办法看,而且如果语句中包含了注释符号的话,运行语句也会报错。
3、这个时候只需要在编辑器中右键,选择 查询选项,在弹出框里选择 结果 -》 网格 -》复制或保存时保留 CR/LF:
再次复制text列后,会保留原始sql的格式,效果如下: