2017-05-31 76 views
0

这看起来可能不重要,但我想知道如何使用正确的索引技术避免CXPACKET等待?SQL Server-避免CXPACKET等待的方法

+3

这不是微不足道的,它太宽泛了。 CXPACKET表示服务器没有正确利用并行性。这可能是由过多的扫描引起的(索引可能会帮助将其变为查找),但是当扫描是一个问题时,I/O和执行时间比CXPACKET等待的要紧得多。通常你会担心CXPACKET在你解决了其他任何问题之后等待,到那时索引可能不会解决这种等待问题。你有没有涉及CXPACKET等待的实际问题?如果是这样,是什么让你认为索引是解决方案? –

+0

@JeroenMosert当你提到“索引可能有助于将它变成寻求”时,它究竟指定了什么? –

+1

'SELECT * FROM [T] WHERE X = 1'。如果T有100万行,并且只有一个'X = 1',那么如果没有索引,则可能会得到并行索引扫描,显示CXPACKET在服务器未正确平衡负载时等待。使用索引,您将得到一个无需等待就立即检索该行的查找。但CXPACKET等待不会是明显的症状 - 过多的I/O和执行时间会是。 –

回答

1

您应该检查执行大扫描的查询。如果这些扫描是由缺少索引(当您有足够选择性的谓词但服务器执行扫描时),则可以避免扫描创建适当的索引。但是,如果您正在读取所有数据,例如,我们每天晚上都会加载整个数据库,从另一个数据库(OLTP,从另一个服务器恢复)中读取所有表格,对数据进行非规范化处理,无论如何我们都要进行全表扫描,我们无法避免CXPACKET等待,因为我们唯一的选择是关闭并行性,但它会减慢我们的加载速度。所以它只是在那里,服务器没有问题。我们只是在我们的服务器上排名第一,但效果很好