首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2016 資料庫範圍設定 (Database Scoped Configuration) 詳細解析:MAXDOP、參數探查、舊版基數估計等實例級選項下放至資料庫層級

     編輯:關於SqlServer

SQL Server 2016 引入 Database Scoped Configuration (資料庫範圍設定),將過去只能在執行個體層級透過 `sp_configure` 或追蹤旗標 (Trace Flags) 設定的關鍵選項,下放至**資料庫層級**獨立配置。這對多租戶、混合負載 (OLTP + 報表)、SharePoint 等共享實例場景極具價值。本文詳細解析四大核心選項與實務應用。

啟用與查看

-- 查看目前資料庫設定
SELECT * FROM sys.database_scoped_configurations;

-- 修改設定 (需 ALTER ANY DATABASE SCOPED CONFIGURATION 權限)
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1;
ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION = ON;
ALTER DATABASE SCOPED CONFIGURATION SET PARAMETER_SNIFFING = OFF;
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON;

四大核心選項詳細解析

選項對應舊機制功能說明典型應用場景
MAXDOP`sp_configure 'max degree of parallelism'`限制平行查詢最大 CPU 核心數。資料庫層級覆蓋實例設定 (0 = 使用實例值)。SharePoint 資料庫設 1 避免 CXPACKET 等待;報表資料庫設 0/高值充分利用核心。
LEGACY_CARDINALITY_ESTIMATIONTrace Flag 9481 (舊版) / 2312 (新版)控制基數估計器版本:ON = SQL Server 2012 之前 (70 版);OFF = SQL Server 2014+ (120+ 版)。升級後查詢計畫退化時,單一資料庫暫時啟用舊版估計器回測,不影響其他資料庫。
PARAMETER_SNIFFINGTrace Flag 4136ON (預設) = 啟用參數探查,依首次參數值編譯計畫;OFF = 忽略參數值,產生平均分佈計畫 (等同 `OPTIMIZE FOR UNKNOWN`)。參數敏感度極高、計畫穩定性優於最佳化效能的資料庫 (如動態搜尋、參數分佈極不均)。
QUERY_OPTIMIZER_HOTFIXESTrace Flag 4199控制查詢優化器修補程式 (Hotfixes) 是否啟用。ON = 啟用所有修補;OFF = 僅啟用 RTM 行為。遇到已知優化器 Bug 導致錯誤計畫時,單一資料庫開啟修補驗證,避免實例級風險。

實戰優勢:SharePoint 混合負載範例

同一實例裝載:

  • SharePoint 內容資料庫:`MAXDOP = 1`、`PARAMETER_SNIFFING = OFF` (避免平行度爭用、計畫震盪)。
  • BI 報表資料庫:`MAXDOP = 0` (全核心)、`QUERY_OPTIMIZER_HOTFIXES = ON` (最新優化器修補)。
  • 核心交易資料庫:預設值 (繼承實例設定)。

無需開啟多個實例、無需資源調控器複雜配置,單一實例即可精細治理各資料庫行為。

查詢優化器熱修補 (Hotfixes) 補充

啟用 `QUERY_OPTIMIZER_HOTFIXES` 後,優化器將包含所有累積更新 (CU) 中的修補邏輯。若特定 CU 引入回歸,可單一資料庫關閉驗證,極大降低生產環境套用 CU 風險。

最佳實務建議

  1. 基準測試先行: 變更前擷取查詢計畫、執行時間、等待統計做基準。
  2. 最小權限變更: 僅對出現問題的資料庫調整,避免全域副作用。
  3. 監控 `sys.database_scoped_configurations` 變更歷程 (搭配 DDL 觸發器或稽核)。
  4. 文件化每個資料庫的非預設設定與理由,利於交接與升級驗證。

資料庫範圍設定是 SQL Server 2016 最具實務價值的功能之一,將「實例級妥協」轉化為「資料庫級精準」,讓 DBA 能在共享實例架構下實現真正的負載隔離與效能治理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved