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

SQL Server 2016 Tempdb 重大增強:安裝精靈自動配置、統一區分配與同步成長

     編輯:關於SqlServer

安裝精靈內建 Tempdb 最佳化配置

SQL Server 2016 安裝精靈新增 Tempdb 配置頁面,自動偵測可用邏輯 CPU 核心數並依下列規則預設資料檔案數:

邏輯 CPU 核心數Tempdb 資料檔案數
≤ 8等於核心數
> 88

範例:2 核→2 檔、4 核→4 檔、8 核→8 檔、32 核→8 檔。安裝精靈亦支援指定多個資料夾,以循環方式 (Round-robin) 分散檔案,進一步分散 I/O。

遺憾:預設初始大小 8 MB、自動成長 64 MB,生產環境仍需安裝後依負載調大初始值、改固定成長量 (如 256/512 MB)。

分配機制重大變更:預設統一區分配,無需追蹤旗標 1118

舊版行為

  • 臨時表前 8 頁 (64 KB) 分配於混合區 (共享多物件),後續頁分配於統一區 (專屬單一物件)。
  • 混合區分配需掃描/更新 SGAM 頁,高併發下產生 PAGELATCH_UP 爭用。
  • 啟用追蹤旗標 1118 可強制全執行個體統一區分配,但影響所有資料庫。

SQL 2016 新行為

  • Tempdb 內所有使用者物件 (臨時表、表變數、工作表) 一律採用統一區分配,完全跳過混合區與 SGAM。
  • 非 Tempdb 資料庫維持混合區機制,不受影響。
  • 無需啟用任何追蹤旗標,開箱即用。

驗證腳本

USE tempdb;
CREATE TABLE #t (c1 INT IDENTITY PRIMARY KEY, c2 CHAR(8000) NOT NULL);
INSERT INTO #t VALUES (REPLICATE('a', 8000)); -- 分配 1 頁
DBCC TRACEON(3604);
-- 取得 IAM 頁
DECLARE @iam_page VARCHAR(100);
SELECT @iam_page = CAST(page_id AS VARCHAR) FROM sys.dm_db_database_page_allocations(DB_ID(), OBJECT_ID('tempdb..#t'), NULL, NULL, 'DETAILED') WHERE page_type = 10;
DBCC PAGE(tempdb, 1, @iam_page, 3); -- 觀察 IAM 頁面,確認無 Mixed Extent 位元
DROP TABLE #t;

同步自動成長:內建追蹤旗標 1117 行為

  • 舊版需啟用 1117 確保多檔案同步成長,維持比例填充演算法有效性。
  • SQL 2016 Tempdb 預設同步成長,任何檔案觸發成長時,所有檔案同步擴展相同大小。
  • 同樣無需追蹤旗標,僅限 Tempdb 生效。

實測效益總結

指標SQL 2014 (預設 1 檔)SQL 2016 (預設 N 檔 + 統一區 + 同步成長)
SGAM/PFS 爭用高併發明顯幾乎消除
安裝後即可用需手動調整開箱即用
追蹤旗標依賴1117/1118 必開零依賴

展望

Microsoft 終於在安裝層面落實 Tempdb 最佳實務。期待後續版本能在安裝精靈同步建議 MAXDOP、Cost Threshold for Parallelism、Max Server Memory 等關鍵配置,進一步降低「預設安裝即上線」的風險。

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