请问 SQL Server 显示锁或是超时,但在 session 都查不到有卡的 sql,请问如何还原追踪当时是哪些sql跟参数造成的问题?
举例: 系统在11-12点显示几个事务锁或是超时
事务(进程 ID 97)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
或是
事务(进程 ID 98)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
或是
执行超时已过期。完成操作之前已超时或服务器未响应。
我用以下SQL查询DB session都没看到有卡的 sql
SELECT r.scheduler_id ,
status ,
r.session_id as SPID,
r.blocking_session_id as BlockBy,
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 [正在執行SQL命令],
r.cpu_time as [CPU Time(ms)],
r.start_time as [Start Time],
r.total_elapsed_time as [Execute Total Time],
r.reads as [Reads],
r.writes as [Writes],
r.logical_reads as [Logical Reads],
-- q.text, /* 完整的 T-SQL 指令碼 */
d.name as [DataBase]
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
是否能追出当时发生原因,跟能调查出是谁下哪个指令,被谁下的指令卡住