[SQL]為什麼 Select 出很少的資料,卻使用 平行處理?

環境: SQL 2005 STD, RAM  64G,CPU 24  

最近跟同事一起看SQL的效能問題,

透過 SQL Profiler 工具,錄出 5 秒以上的SQL。

查看它們的執行計畫,幾乎都用到了 平行處理。

奇怪的是, Select 出很少的資料,卻使用 平行處理。

而且 SQL 的效能,忽快忽慢。執行計畫如下,

筆者覺得Select 出很少的資料,應該不會用到 平行處理才對。

於是在最後加入 OPTION (MAXDOP 1) 讓它不要跑 平行處理,

執行效能都穩定在 3 秒以內。

把其他錄到的 SQL 都加上  OPTION (MAXDOP 1) 後,

效能有提升,而且時間都還蠻穩定的。

但總不能每個 SQL 都加上那一段吧。

於是請教百敬老師,百敬老師建議如下,

提升 cost threshold for parallelism (預設是5秒),

max degree of parallelism (每個SQL最多可用的CPU數,預設是0表示 沒限制)可以限制成 4 或 8 。

所以後來我們的調整如下,

後來SQL的效能就穩定多了。

 

參考資料

cost threshold for parallelism 選項

設定 max degree of parallelism 伺服器組態選項

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^