这里发生了很多事情,其中大多数是相当广泛和模糊的。
2008R2 RTM于2010年4月21日问世。它完全不受支持。您需要优先考虑大约3年前才发布的最新Service Pack。这样一来,如果您遇到奇怪的错误或其他问题,您将受到保护。头部在这里找出你需要下载的内容。
由于您添加了vCPU(从1到4)并且没有更改任何设置,因此查询现在可以并行进行。我知道这听起来会更快,但是请稍等!
您可能添加了RAM,但可能没有更改“最大服务器内存”,因此服务器可以利用它。
找出您的服务器正在等待什么。我正在研究的一个开源项目提供了免费的脚本来帮助您评估SQL Server。如果您想尝试一下,请直接过去。
您将想要获取sp_BlitzFirst来查看服务器的等待状态。您可以通过几种方式运行它。
这将向您显示服务器自启动以来一直在等待什么。
EXEC dbo.sp_BlitzFirst @SinceStartup = 1;
这将在30秒的窗口中显示您正在等待什么查询。
EXEC dbo.sp_BlitzFirst @Seconds = 30, @ExpertMode = 1;
一旦弄清楚正在等待什么查询(那里有大量有关等待统计的信息),就可以开始进行更改以使事情得到控制。
如果您看到它们正在等待CXPACKET
,则表示您的查询正在并行进行,并且可能会相互干扰。如果您达到此目标,则可能需要考虑将“并行性”的“成本阈值”提高到50,并可能将MAXDOP降低到2。
完成此步骤后,您便想使用诸如sp_WhoIsActive或sp_BlitzWho之类的东西(后者在前面的GitHub存储库中)来开始捕获查询计划。除了等待统计信息外,它们还是找出问题所在的最重要内容之一。
您可能还想查看Jonathan Kehayias撰写的有关VMWare Counters的文章,以了解有关SQL Server的信息。
更新资料
回顾等待统计数据,男孩是他们很奇怪。CPU肯定有问题。您的服务器通常无聊,但是当事情变热时,事情就会变糟。我会尽力将其分解。
您正在打一个叫的毒药等待THREADPOOL
。您没有很多,但这很有意义,因为您的服务器不是非常活跃。一分钟后,我将解释原因。
你有很长的平均等待SOS_SCHEDULER_YIELD
和CXPACKET
。您使用的是VM,因此要确保SQL Server有保留,或者该框没有被严重超额使用。一个吵闹的邻居真的会毁了你在这里的日子。您还将要确保服务器/ VM guest虚拟机/ VM主机未在“平衡电源”模式下运行。这会使您的CPU降到不必要的低速运行,并且不会立即恢复到全速运行。
他们如何搭配?使用4个CPU,您有512个工作线程。请记住,一个CPU的使用量是相同的,但是现在您的查询可以并行进行,因此它们可以消耗更多的工作线程。在您的情况下,并行查询的每个并行分支有4个线程。
并行的是什么?最有可能的一切。并行性的默认“成本阈值”为5。该数字在90年代后期的某个类似桌面上工作时成为默认值。
诚然,您的硬件比大多数笔记本电脑都要小,但您仍然领先于此。
当大量并行查询开始时,您将用完这些工作线程。发生这种情况时,查询只是在等待线程开始。这也是需要解决的SOS_SCHEDULER_YIELD
问题。查询正在逐步退出CPU,并且很长一段时间都没有恢复。我看不到任何阻塞等待,因此您很可能只是将所有查询都塞在了查询内并行等待中。
你能做什么?
- 确保平衡电源模式下没有任何东西
- 将MAXDOP更改为2
- 将并行性的成本阈值更改为50
- 按照上面的Jon K.文章验证VM运行状况
- 使用调用的脚本
sp_BlitzIndex
来查找任何缺少的索引请求。
有关更彻底的故障排除,请查看我为Google写的白皮书,其中介绍了云计算中的硬件大小。
希望这可以帮助!