平台:SQL 2000 Enterprise 带 SP4,在 Windows 2003 Enterprise 上运行,8 核,8GB RAM 和内部 (!) 存储。数据库总共大约 100GB。
设想:waitstats严重偏向硬件:
CXPACKET - 35.9%
WRITELOG - 18.4%
LCK_M_S - 13.2%
PAGEIOLATCH_SH - 10.9%
NETWORKIO - 10.4%
LATCH_EX - 5.6%
PAGEIOLATCH_EX - 2.6%
LCK_M_IX - 1.5%
LCK_M_IS - 1.2%
PAGELATCH_UP - 0.1%
我暂时忽略了 LATCH 和 LCK 类型,因为我们在 SQL 2005 升级期间很快就会迁移到 SAN,而且内部驱动器无论如何都会严重碎片化。
但是,我担心 CXPACKET 类型。在某些情况下,我有 80% 的等待时间与此有关。是否需要检查并行执行计划设置?(目前设置为 5)。迁移到 SAN 是否也能解决这个问题?我首先应该担心吗?
提前致谢!
答案1
CXPACKET 等待状态与并行性有关 - 这是将查询拆分到多个处理器的成本。通过在处理器之间划分为较小的块并合并结果,报告查询可以从并行性中受益。
如果您的应用程序是 OLTP,您可以尝试将实例范围的“最大并行度”设置为 1(仅使用一个处理器执行查询)或更高。默认值为 0(所有处理器)。
http://msdn.microsoft.com/en-us/library/aa196725(SQL.80).aspx
答案2
CXPACKET 也与 I/O 相关,因此迁移至 SAN 至少可以减轻这个问题。