MS Sql Server获取与“暂停”查询,主要是读取重载。 有任何解决这个问题的方法吗?

我有一个Microsoft Sql服务器,处理一个由java和c#中的多个客户端组成的公司软件套件的stream量适中的stream量。

它正在被“暂停”查询超载。 他们最终通过,但有些是超时(尤其是写)。 查询主要是读取。

有什么办法可以加快速度,还是以其他方式修复?

这里是我的活动监视器的图片 ,以显示我在说什么:

http://i.imgur.com/9ADDASf.png

附注:我们已经计划在一段时间内迁移到MySql。 那会有帮助吗? 我知道MS Sql是强大的,但它是默认的Read-Committed,可以伤害任何东西吗?

截图中显示的等待types是:

  • LCK_M_X – 在任务正在等待获取排他锁时发生。
  • CXPACKET – 尝试同步查询处理器交换迭代器时发生并行查询计划。 如果等待过多而无法通过调整查询来减less(如添加索引),则考虑调整并行度的成本阈值或降低并行度。

(这两个都是MSDN的 C&Ped。)

MSDNbuild议调整您的查询和/或上面添加索引。 这可能是一个更好的第一步,而不是只是枯萎的SQL Server和切换到别的东西。 (如果问题在于你的查询,那么在MySql,恕我直言,他们仍然效率低下)。所以,我会build议看看Brent Ozar的等待统计资源 ,寻找前十个昂贵的查询 。 希望这会指出你正确的方向。

好的,找出问题所在。

MS Sql的默认设置使用服务器的所有内核执行大型查询。 我们有大量的读取,所以它堆积了一大串等待处理的查询。

为了解决这个问题,我把最大并行度设置为2个核心,而不是无限制的(我们的服务器是8个),并且我把并行度的成本阈值从5(平行度踢的时间)设置为10(秒)在查询中。

两者都可以在Sql Server Management Studio中find,方法是右键单击服务器并select“属性”,然后单击“高级”选项卡。

我发现这篇文章解释和解决了这个问题:

http://www.brentozar.com/archive/2013/08/what-is-the-cxpacket-wait-type-and-how-do-you-reduce-it/