SQL Server - 使MAXDOP发生变化:如何衡量对性能的影响?

时间:2013-09-26 12:11:46

标签: sql-server database-performance

我正在尝试减少SQL Server 2012数据库中的CXPACKET等待。

为了做到这一点,我将调整并行度的MAXDOP和成本阈值。见布伦特·奥扎尔的article

为了衡量这些变化对等待时间的影响,我使用sys.dm_os_wait_statsthis advice跟踪每15分钟的等待时间。我想在调整之前和2周之后需要2周的读数。

但是,我也对跟踪整体查询性能感兴趣。在更改之前和之后查看查询的执行情况的好方法是什么 - 在时间框架之前的2周/之后的2周内?是否有sprocs会给我这些数据?

3 个答案:

答案 0 :(得分:1)

CXPACKET等待并不一定表示并行性问题 - 它通常是其他问题的症状。

当一个查询并行时,让我们说10个线程,并且这10个线程中的一个比其他线程花费更长的时间来完成其工作,其他9个线程将累积CXPACKET等待。

您还看到了哪些其他高等待类型?

答案 1 :(得分:1)

在运行大量大型查询的环境中,您总是会看到CXPacket位于等待列表的顶部,这不是问题。唯一的问题是,当你的正常等待开始暴涨时。在这些情况下,通常意味着您的统计数据太远,以至于无法获得准确的执行计划,您需要研究更好的索引维护。

根据你的说法,我没有理由单独根据这一点降低MaxDOP。相反,我会使用最多8个的典型建议,不超过OLTP的单个NUMA节点中的核心数。

在您的情况下,我会根据Query Stats开始使用server-side trace查看最昂贵的查询以及最大的查询。如果您能够调整您在此处看到的最大违规者,那么您将拥有更快的服务器以及更低的CXPacket等待类型。

作为一个免责声明,我是您提到的等待统计文章的作者以及此回复中链接的文章。

请随时回复此问题或在我的博客上回复任何其他人。

答案 2 :(得分:1)

基于以上所述,您似乎可以使用一些实用程序来帮助您监控查询性能。

我可以推荐可以存储历史信息的ApexSQL Monitor(商业工具,但提供免费试用),这样您就可以在减少MAXDOP之前和之后查看详细信息 - 您可以查看整体查询性能。

除此之外,您还可以在本文http://www.sqlshack.com/troubleshooting-the-cxpacket-wait-type-in-sql-server/中找到有关CXPACKET和MAXDOP可能原因的详细说明。以下是文章中的一些重要内容:

在诊断高CXPACKET等待统计值的原因时建议的步骤(在做出任何下意识反应和更改SQL Server上的内容之前):

  • 不要将MAXD​​OP设置为1,因为这绝不是解决方案
  • 调查查询和CXPACKET历史记录,以了解并确定它是仅发生过一次或两次的事情,因为它可能只是系统中通常正常工作的例外
  • 检查查询使用的表的索引和统计信息,并确保它们是最新的
  • 检查并行度的成本阈值(CTFP)并确保使用的值适合您的系统
  • 检查CXPACKET是否附带LATCH_XX(可能还有PAGEIOLATCH_XX或SOS_SCHEDULER_YIELD)。如果是这种情况,则应降低MAXDOP值以适合您的硬件
  • 检查CXPACKET是否附带LCK_M_XX(通常附带IO_COMPLETION和ASYNC_IO_COMPLETION)。如果是这种情况,那么并行性不是瓶颈。对这些等待统计信息进行故障排除以找出问题的根本原因和解决方案