天天看點

SQL Server 2016裡TempDb的提升

幾個星期前,SQL Server 2016的最新CTP版本已經釋出了:CTP 2.4(目前已經是CTP 3.0)。這個預覽版相比以前的CTP包含了很多不同的提升。在這篇文章裡我會談下對于SQL Server 2016,TempDb裡的顯著提升。

TempDb定制

在SQL Server 2016安裝期間,第一個你會碰到的改變是在安裝過程中,現在你能配置TempDb的實體配置。我們可以詳細看下面的截屏。

SQL Server 2016裡TempDb的提升

微軟現在檢測幾個可用的CPU核心,基于這個數字安裝程式自動配置TempDb檔案個數。這個對克服闩鎖競争問題(Latch Contention problem)非常重要,通常當你運作TempDb時,隻有一個資料檔案會發生。這裡安裝向導使用下列公式:

  • 當你有小于等于8個CPU核心,你會獲得和你CPU核心數一樣的TempDb資料檔案數。
  • 如果你有超過8個CPU核心,你會得到開箱即用的8個TempDb資料檔案。

我在不同的配置上測試了安裝向導,下表總結了TempDb資料檔案的不同個數。

CPU核心    TempDb資料檔案

2        2

4        4

8        8

32        8

這是一個巨大的進步!當我進行SQL Server健康檢查時,TempDb隻有一個資料檔案,會有一些闩鎖競争問題(Latch Contention problem)是常見的。

如果在向導裡你提供多個資料路徑,你可以在各個檔案夾之間循環(round-robin)配置設定。有一點我不喜歡的是,新的配置8MB的初始大小和64MB的自動增長率。

配置設定和自動增長

在SQL Server 2016之前,很多人使用1117和1118跟蹤标記來定義SQL Server在資料庫裡如何配置設定頁,和如何在多個資料檔案間處理自動增長操作。在以前的SQL Server版本裡,臨時表的資料頁總配置設定在所謂的混合區(Mixed Extends),它大小是64kb在多個資料庫對象(像表和索引)間共享。

使用這個方法微軟保證小表保持小,因為資料庫的第1個8頁總在混合區配置設定。接下來的頁(第9頁開始)在所謂的統一區(也是64k大小)裡配置設定。每次你給資料庫對象配置設定一個統一區,對象本身立即增長64kb。

當你啟用SQL Server的1118跟蹤标記,對于整個SQL Server執行個體,隻在統一區配置設定,混合區會被忽略。使用這個方法是可以減少在SGAM(共享全局配置設定映射(Shared Global Allocation Map)頁,管理混合區)頁上的闩鎖競争問題(Latch Contention problem)。

在SQL Server 2016裡TempDb配置設定總在統一區裡發生,而不使用混合區——不需要啟用任何跟蹤标記。除臨時表外的配置設定還是使用混合區。下面的例子展示了在臨時表7個配置設定的頁直接存儲在統一區,而完全不使用混合區。

1 USE tempdb
 2 GO
 3 
 4 CREATE TABLE #HelperTable
 5 (
 6     Col1 INT IDENTITY(1, 1) PRIMARY KEY NOT NULL,
 7     Col2 CHAR(8000) NOT NULL
 8 )
 9 GO
10 
11 -- Insert 7 records, this allocates 7 pages in tempdb
12 INSERT INTO #HelperTable VALUES (REPLICATE('a', 8000))
13 GO 7
14 
15 -- Enable DBCC trace flag 3604
16 DBCC TRACEON(3604)
17 GO
18 
19 -- Retrieve the temp table name from sys.tables
20 SELECT name FROM sys.tables
21 WHERE name LIKE '#HelperTable%'
22 GO
23 
24 -- Retrieve the first data page for the specified table (columns PageFID and PagePID)
25 DBCC IND(tempdb, [#HelperTable________________________________________________________________________________________________________00000000000B], -1)
26 GO
27 
28 -- Dump the IAM page of the table TestTable retrieved by DBCC IND previously
29 -- No pages are allocated in Mixed Extents, a complete Uniform Extent is allocated.
30 DBCC PAGE (tempdb, 5, 33, 3)
31 GO
32 
33 -- Clean up
34 DROP TABLE #HelperTable
35 GO      

在過去1117跟蹤标記和TempDb結合進行同時自動增長操作。確定檔案在同個區裡同時增長非常重要。不然成比例的填充算法(proportional fill algorithm)不能發揮應有的作用。使用SQL Server 2016,你就直接有1117跟蹤标記的這個功能,而不需要啟用。

小結

花了很長時間後,微軟終于開始在SQL Server安裝向導裡進行更好的預設配置。根據可用CPU核心數配置TempDb是個巨大的進步。我們來看看下個版本會提供根據實際情況能配置MAXDOP,并行開銷門檻值和伺服器最大記憶體等等...

感謝關注!

參考文章:

https://www.sqlpassion.at/archive/2015/11/09/tempdb-changes-in-sql-server-2016

注:此文章為

WoodyTu

學習MS SQL技術,收集整理相關文檔撰寫,歡迎轉載,請在文章頁面明顯位置給出此文連結!

若您覺得這篇文章還不錯請點選下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝!