標籤:sql提示查詢處理器未能為執行並行查詢啟動必要的線程資源
最近SQL經常提示“查詢處理器未能為執行並行查詢啟動必要的線程資源”反應速度變慢。
SQL環境為兩台伺服器做容錯移轉叢集,一主一備,主為48核心,64G記憶體,備為24核心,64G記憶體。
經檢查探索服務已轉移到備用節點(轉移原因後續排查),因之前未出現過此問題,故障鎖定在了電腦硬體,SQL配置問題上:我們的伺服器CPU是4核(48個邏輯CPU),作業系統會將這些邏輯CPU進行分組。每個分組有分多少個邏輯CPU這個由作業系統決定。(每次重啟電腦分組的數量可能會變的)假設,12個邏輯cpu一組,如果你的“最大並行度”是12那麼這個sql只需要在這一組邏輯cpu裡執行就可以了,這12個邏輯cpu共用同一塊記憶體空間。也就是說,如果設定的“最大並行度”超出12,例如設定為13,那麼就會出現“跨NUMA問題”。
當第二個組運算好之後,當一個組運算好之後,如果第二個組的另外兩個邏輯cpu還沒有運算好,那麼就需要等待B、又或者第二個組已經運算好,出結果了,但是由於線程切換,或者伺服器忙不過來
先檢查伺服器的CPU設定
屬性--處理器--展開
650) this.width=650;" title="1.jpg" alt="wKiom1RYeszD7-9_AAHpc7Q-OdI246.jpg" src="http://s3.51cto.com/wyfs02/M01/4D/BB/wKiom1RYeszD7-9_AAHpc7Q-OdI246.jpg" />
CPU每次重啟都會分組,而且每次分組的數量可能不同,查看備用機上SQL設定CPU分為了4組,每組6個核心,因此我們設定最大並發數的時候盡量不要超過6,否則就會出現查詢跨NUMA問題
解決方案:
最大並行度改為5,單擊運行值(點擊後,最大並行度會顯示灰色,不用管),點確定,不需要重啟,等待十幾秒生效。
650) this.width=650;" title="2.jpg" alt="wKiom1RYfO2w6-ukAAKMgrXL9-o083.jpg" src="http://s3.51cto.com/wyfs02/M01/4D/BB/wKiom1RYfO2w6-ukAAKMgrXL9-o083.jpg" />
備忘: 並發跟並行是不一樣,不是同一樣東西。一個sql語句 /查詢 的某個運算子如果需要多線程執行,sqlserver就會開啟多線程來處理這個運算子。這個由sqlserver判斷如果你沒有設定並行度,假設你的cpu是四線程的那麼sqlserver會用4個線程去執行如果你設定了並行度為2那麼sqlserver只會用2個線程去執行你的查詢而另外2個資源就給其他軟體/作業系統使用並行度只是一個開關,決定是由sqlserver來決定的–查看哪些sql線程屬於哪個處理器編組select [thread_address],[started_by_sqlservr],[creation_time],[processor_group],[scheduler_address] FROM sys.dm_os_threads
本文出自 “李向前” 部落格,請務必保留此出處http://lixiangqian.blog.51cto.com/2848430/1571714
SQL提示查詢處理器未能為執行並行查詢啟動必要的線程資源