我正在一台规格合理的机器上运行一些 Microsoft SQL Server 2014 负载测试。我当然不是 SQL Server 调优细节方面的专家,但根据我从各个地方收集的一些片段,我认为设置非常好。
表演中的一个元素确实令人困惑,因此我在这里伸出援手。我正在测试的数据库是历史上建立的,最初是针对 2008r2 创建的。兼容性设置是从那个版本继承过来的。上周我分两个阶段提高了该设置,但是当我将其从 2012 年提高到 2014 年的兼容性时,突然间 CPU 负载飙升。
当来回更改此设置时,它似乎是系统性的。我可以使用 2012 设置在 8 核数据库上运行 X 个模拟用户(数据库前面的 Web 应用程序)。如果我将其提高到 2014 年,我只能逃脱 60% 的 X 个模拟用户。反之,对于 X 用户,2014 年设置的批量请求数降低了 40%。
据我了解,切换回兼容性级别不会恢复数据库,而只会关闭功能。这种情况似乎表明一个功能在没有明显增益的情况下消耗 CPU,所以我想知道可能是哪个功能以及是否有办法单独打开该特定功能?
serverfault 上的其他帖子指出升级后重建索引,我已经这样做了,但这似乎并没有真正产生影响。
需要注意的是,手头的应用程序会生成许多不是准备好的语句的查询。这可能导致我在 perfmon 中看到大量编译(编译/批处理请求:0.25)。我对此无能为力,所以告诉我先做些什么并不能真正帮助我前进。