Azure SQL - 在數據庫範圍級別更改 MAX DOP 值沒有發生
我正在嘗試更改目前設置為零的 Azure 託管 SQL 的 MAX DOP 值。這是我正在執行的腳本:
USE [my-sql-db] GO ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP =5 ;
該腳本工作正常並返回成功,但是當我執行時
SELECT value_in_use FROM sys.configurations WHERE name = 'max degree of parallelism'
我看到數字設置為零
當我執行時,
select * from sys.dm_exec_query_memory_Grants
我可以看到該值設置為1。但是當我檢查 SSMS 中的數據庫設置時,我可以看到 MAXDOP 的正確值
我想知道為什麼當我檢查 SSMS 中的數據庫設置時與我檢查
sys.configurations
或時會得到衝突的數字sys.dm_exec_query_memory_Grants
?
除了 sqL_handle 所說的,你正在執行
ALTER DATABASE SCOPED CONFIGURATION
,關鍵字是database。如果您閱讀文件sys.configurations
,他們會說此系統視圖“包含系統中每個伺服器範圍的配置選項值的一行。 ”所以簡而言之,它們是您正在比較的兩個不同的配置選項,數據庫與伺服器。
給定查詢執行的 MAXDOP 在執行時協商,考慮到許多因素。
2013 年的這篇文章給出了當時涉及的具體細節。
由於撰寫了該文章,因此添加了 MAXDOP 的數據庫範圍配置設置。它不會替換 sys.configurations 中的設置,後者可以通過 SSMS 中的 UI 或通過 sp_configure 進行設置。相反,它是對給定查詢影響 MAXDOP 的另一層。不應期望設置數據庫範圍的配置 MAXDOP 選項會更改儲存在實例範圍的 MAXDOP 設置中的值。
不管通過評估其層次結構內的 MAXDOP 系統設置和對查詢執行的適用性確定的 MAXDOP 候選者如何,都存在可能確定執行 DOP 的額外查詢和執行時注意事項。
例如,使用非內聯標量使用者定義函式可能會導致串列計劃而不是並行(或至少是串列計劃區域)。
影響 DOP 的執行時因素之一是“Max Workers Count”,其中目前執行上下文 ID 為 0 工作人員、目前保留的並行工作人員和所需的並行工作人員保留。如果所需的並行工作人員預留將使該總和超過“最大工作人員計數”,則候選 DOP 將降級,直到所需的預留符合“最大工作人員數量”。
允許的記憶體授予還可以減少查詢的候選 DOP。我最常看到這種情況,而且可能只在列儲存批量插入中看到——如果我想要 DOP 8,但優化器估計查詢執行的允許記憶體授予太小而無法很好地執行批量插入,候選的 dop 將會降低。
當然,在選擇查詢計劃時,如果成本低於並行計劃成本,則可以選擇串列查詢計劃而不是並行計劃。
但是……如果成本太低就不行。有一個實例範圍的設置“Parallelim 的成本門檻值”。預設 CTFP 為 5。如果串列計劃的成本低於 CTFP,則不會選擇並行計劃(不受 ENABLE_PARALLEL_PLAN_PREFERENCE 提示之類的影響)。