pet*_*rov 14 sql-server-2008 sql-server statistics execution-plan
我们的生产环境有这个问题。
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) - Windows NT 6.1(内部版本 7601:Service Pack 1)上的企业版(64 位)。
SQL Server 正在删除所有(几乎 100%)旧的执行计划,并在每天夜间(从晚上 11:00 到早上 8:00)重新创建它们。当“自动更新统计信息”处于禁用状态时,甚至会发生这种情况。在过去的 2-3 周内,我们已经开启了“自动更新统计信息”。但它仍在发生。
我们真的不知道是什么触发了这种重新生成计划,但我们确信我们不会手动进行。
唯一真正与计划重新生成时间一致的是我们的数据库维护工作:每日索引重组(碎片为 5-30% 时),以及每日索引重建(碎片超过 30% 时) ) 工作。通常这个日常维护工作只做重组(因为每天的索引碎片永远不会超过 30%)。
影响:
这些新创建的计划使一些 UDF 调用/查询调用(从 UI/网页调用)花费更长的时间(分钟而不是不到 1 秒),因此会话只会堆积起来,使 CPU 接近 90% .
当那些卡住的会话被强行删除(在 DB 端)时,问题就会消失,并且 1)当所有相应的执行计划被手动清除(对于查询)或 2)当 UDF 被更改(对于函数)时。从那一刻起,SQL 服务器创建的任何新计划都会在一天中完美运行,直到第二天早上最终出现相同的问题。此外,这种行为并不是 100% 一致的,我们并不是每天早上都能看到它。但是有一段时间我们已经连续 4-5 天看到它了。
问题发生在工作日的早晨,这似乎是更频繁地访问 UI/网页的时候。
有没有人知道是什么导致了这个问题以及如何解决这个问题?任何帮助将非常感激。
嗯,我有一些可能导致这种行为的想法。
optimize for ad hoc workloads
,它只会保存计划存根并在需要时编译它。这将减少计划缓存的负载,从而降低计划缓存刷新的机会。您可以使用启用它sp_configure 'optimize for ad hoc workloads',1; reconfigure
。advanced options
如果您启用了using ,则可以完成此操作sp_configure 'show advanced options',1; reconfigure
。除了所有这些可能性之外,检查日志文件以了解 options 及其 x64 合作伙伴的某些更改可能很有affinity mask
用affinity I/O mask
。另一件事可能是更改MAXDOP
实例的选项。请也检查它们的日志。他们也需要刷新计划缓存。
最后但并非最不重要的一点是,您仍然可以运行服务器端跟踪(只需使用探查器进行设置、启动它、停止它并使用 sql 命令在服务器端再次启动它)。除此之外perfmon
就是你的朋友。它可以暂时观察和监控您的表现值。也许您可以看到压力与服务器上的某些操作的相似之处,这些操作可能会导致这些刷新。
希望这会对您有所帮助,即使答案会晚一些。
归档时间: |
|
查看次数: |
382 次 |
最近记录: |