在 SQL Server 2008R2 中限制查询的 CPU/内存利用率

Beg*_*DBA 4 performance sql-server sql-server-2008-r2 resource-governor

我们有一个来自应用程序团队的 AD-HOC 流程,该流程从我们在 SQLserver 中频繁使用的 OLTP 数据库之一获取数据,以将数据迁移到 MongoDB。

在性能测量期间,我们可以看到,当从这个 sql server 获取数据时,他们运行的那部分 CPU 峰值出现了将近一个小时,几乎达到 60-80%。

因此,为了减少这种影响,我们正在考虑使用资源调控器来限制 CPU/内存资源。我从未使用过 RG,但阅读博客似乎是理想的选择。

请建议是否可以实现这一点,或者根据您的经验提出更好的建议。

上述活动是每月一次在 SQL Server 2008R2 中的 5 TB 数据库上获取约 8000 万条数据

SQL*_*tor 6

简短的回答是“是”。您可以使用 RG 来限制该进程的 CPU 消耗。请注意,RG 仅在 SQL Server 2008R2 的企业版和数据中心版中可用。使用 Microsoft 文档出色的演练了解如何使用 RG:资源调控器操作方法主题

更长的答案 - RG 并没有解决根本原因,它是一种帮助症状的创可贴,并减少疾病对其他用户的干扰。如果我在你的位置上,在诉诸 RG 解决方案之前,我会投入一些时间来尝试优化流程本身。虽然“访问8000万行”意义不大,只是访问数据行应该不会消耗大量CPU。我的经验一次又一次地证明,许多需要数小时的过程可以减少到几分钟(在某些情况下,减少到几秒钟),并且消耗的资源比原来少几个数量级。优化工作不仅应包括技术细节,例如适当的索引、模式调整、查询语法和计划调查,还应包括对流程架构和流程的更高级别评估,它是完全刷新还是增量更新?你访问同一张表多少次?是否涉及许多临时表?步骤太多?也许正在做一些多余的工作?如果您提供有关该过程的更多详细信息,以及为什么需要这么多 CPU,这里的人将很乐意为您提供帮助。

当然,不能保证你一定会成功,最终你可能会求助于 RG,但恕我直言,这种努力是非常值得的。