2017-05-31 57 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等待,因爲我們唯一的選擇是關閉並行性,但它會減慢我們的加載速度。所以它只是在那裏,服務器沒有問題。我們只是在我們的服務器上排名第一,但效果很好