我将在这一点上失去理智。
我们有一个3服务器可用性组,我们的应用程序从这3个服务器读取。 99.9%的时间运行很棒。我们偶尔会在SOS_SCHEDULER_YIELD中获得一个峰值。当发生这种情况时,我们的许多查询会超时。通常不会持续超过一分钟。我们有一项任务,每2分钟捕获一次等待统计数据(如下图所示)。
8a是可用性组中的主服务器。正如你所看到的,SOS_SCHEDULER_YIELD在10点40分从122,000点上升到10:42点到4,000,000点,并在10:44点回到85,000点。其他服务器飙升至2,000,000左右。
这些服务器都是虚拟的。 8a和8c位于同一主机上,而8b位于不同的本地数据中心。服务器在它们所在的数据中心中使用SAN,因此8a和8c使用相同的SAN。
当时没有工作。服务器管理员在服务器本身上没有看到任何问题。主机的8b CPU使用率从10点40分的43%飙升至1045点的70%,而另外2点的主机同时从42%飙升至62%。两人都在10点50分回落。
我需要关于可能导致此类行为和/或如何排除故障的想法的想法。我理解SOS_SCHEDULER_YIELD可能是一个指标,而不是问题本身。我只知道当我开始在这些服务器上获得超时时,SOS_SCHEDULER_YIELD会出现高峰和高峰。提前感谢您的想法。
答案 0 :(得分:0)
我建议保罗兰德尔read this article。它解释了SOS_SCHEDULER_YIELD
等待类型。导致SOS_SCHEDULER_YIELD
出现的原因是什么?阅读here。
大约在上午1042时,尝试执行以下查询。从那里检查查询和查询计划并从那里进行分析。
SELECT
[er].[session_id],
[es].[program_name],
[est].text,
[er].[database_id],
[eqp].[query_plan],
[er].[cpu_time]
FROM sys.dm_exec_requests [er]
INNER JOIN sys.dm_exec_sessions [es] ON
[es].[session_id] = [er].[session_id]
OUTER APPLY sys.dm_exec_sql_text ([er].[sql_handle]) [est]
OUTER APPLY sys.dm_exec_query_plan ([er].[plan_handle]) [eqp]
WHERE
[es].[is_user_process] = 1
AND [er].[last_Wait_type] = N'SOS_SCHEDULER_YIELD'
ORDER BY
[er].[session_id];
GO