0

我们的生产服务器具有相当高的 CPU,我想知道是否可能的原因是服务器上的高编译率。

每秒大约有 5000 个 SQL 编译(编译到批处理请求的百分比约为 30%)。相比之下,最多每秒只有大约 5 次重新编译。

我想也许 proc 缓存已经填满,但是已经清除了一些冗余的一次性计划,从那时起 proc 没有恢复到它的旧大小(无论是计划计数还是使用的空间)

因此,为了进一步调查,我们做了一个扩展的活动会议:

  • query_post_compilation_showplan事件
  • sp_cache_miss事件

query_post_compilation_showplan事件比编译少得多 - 大约每秒 5-10 个但是大约有5000 sp_cache_miss事件/秒

几乎所有的都显示了以下SQL文本

SET DATEFORMAT YMD; SET DATEFIRST 1;SET ANSI_NULLS ON;SET ANSI_PADDING ON;SET ANSI_WARNINGS ON;SET ARITHABORT ON;SET NUMERIC_ROUNDABORT OFF;SET CONCAT_NULL_YIELDS_NULL ON;SET QUOTED_IDENTIFIER ON;

开发团队正在检查,但看起来我们的 Web 应用程序每次连接到 SQL Server 时都会发送此信息。

该线程https://social.msdn.microsoft.com/Forums/sqlserver/en-US/84860bdf-b0f2-41b1-be5f-165b4787667d/sql-profiler-trace-result?forum=sqldatabaseengine 建议这些 SET 语句通常显示在审计事件中增加 - 这是有道理的。但我不确定为什么它们显示为sp_cache_miss事件 -

这是会话的屏幕截图

我想我有3个问题:

  1. 为什么这些“SET”语句显示为 sp_cache_miss 事件,即 SQL Server 为什么不忽略或缓存它们?
  2. 这些是否解释了我们的编译/秒或者缓存未命中事件并不总是“计数”为编译?
  3. 这些是良性的还是它们可以解释我们的高 CPU。

抱歉,如果这些是愚蠢的问题-我对所有这些都缺乏经验,而且我肯定遗漏了一些东西-因此,我们将不胜感激地获得任何帮助。

4

0 回答 0