可用性组的SOS_SCHEDULER_YIELD峰值

时间:2017-12-28 20:11:52

标签: sql-server sql-server-2016 availability-group

我将在这一点上失去理智。

我们有一个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会出现高峰和高峰。提前感谢您的想法。

Wait Stats Monitor

1 个答案:

答案 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