我想知道是否有办法发送关于死锁的通知?如果是这样,需要什么查询。我知道 SQL Server 会处理死锁,我只是想要有关所涉及查询的信息。
我发现以下内容来确定长时间运行的查询:
SELECT
creation_time
,last_execution_time
,total_physical_reads
,total_logical_reads
,total_logical_writes
, execution_count
, total_worker_time
, total_elapsed_time
, total_elapsed_time / execution_count avg_elapsed_time
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
where total_elapsed_time >= 300000000 --5 min
ORDER BY total_elapsed_time / execution_count DESC;
Run Code Online (Sandbox Code Playgroud)
我想知道上述方法是否正确,或者是否有更好的方法来确定任何查询的时间是否超过特定时间间隔(例如 5 分钟),如图所示?
谢谢
For*_*ine 10
您可以使用 SQL 代理为这两个配置警报。创建一个新警报并选择类型“SQL Server 性能条件警报”
对于长时间运行的查询,选择对象“MSSQL$InstanceName:Transactions”和计数器:最长事务运行时间。配置值和警报通知选项,您就可以开始了。
对于死锁,对象是“MSSQL$InstanceName:Locks”,计数器是“Number of Deadlocks/sec”
如果您想对死锁通知进行更细粒度的控制,请查看:http : //www.sqlservercentral.com/articles/Administration/3243/
在 SQL 2008 中,有一项新功能可用于解决死锁和长时间运行的查询:扩展事件。扩展事件是低级对象,与其他方法(如分析/跟踪、警报等)相比,消耗的资源要少得多……
要使用扩展事件,deadlocks请查看SQL 服务器 MVP Jonathan Kehayias 的这篇文章。
要使用扩展事件来查找long running queries,请查看另一个 SQL 服务器 MVP Pinal Dave 的详细帖子。