[SQL SERVER] 實戰紀錄 處理大量平行處理(Parallelism)、鎖定(lock)等待

  • 5189
  • 0

摘要:[SQL SERVER] 實戰紀錄 處理大量平行處理(Parallelism)、鎖定(lock)等待

 

協助使用者的SQL SERVER處理效能問題

該主機24core / 32G ram

CPU長期處於70以上

 

1. 檢視報表可發現隨時都有Parallelism跟Lock等待 (常常暴增上百個)

2. 檢視最耗CPU的幾個語法及執行計畫,cost約17~18不等

3. 先修改平行處理原則的成本臨界值,修改為20 (預設為5),修改完後檢視報表,已無Parallelism,Lock等待,且CPU馬上降至40~50

 

4. 檢視最耗CPU語法等等,加上適當索引,協助AP使用者修改TSQL查詢語法後,最後CPU降至10

 

資料庫效率不好,常常是無適當索引,或是不好的查詢語法造成的

了解執行計畫以及適當索引的建置,可以大幅改善機器效能

 

 

平行處理原則的成本臨界值(Cost Threshold for Parallelism):

代表cost超過多少就使用平行處理,也就是多顆CPU來執行語法,看執行計畫可以知道用了多少core跑該語法,

這個案例的執行計畫用了17core,所以才會有大量的平行處理,先修改為20,讓他不使用平行處理,也就是只用1個core來跑,可以降低Parallelism等待。

 

平行處理原則的最大程度(Max Degree of Parallelism):

代表當使用平行處理的時候,最多用幾個core,0代表不限制,若是2代表最多只會有2core