tempdb數據庫簡介及優化
ps:msdn摘
tempdb數據庫是一個特殊的數據庫,它和其他數據庫最大的不同之處在於SQL SERVER每次重啓的時候它會被重建(不是恢復).
tempdb的特點:
1.總是使用簡單恢復模式.日誌不斷的被截斷,因爲需不要備份.它記錄的信息只能用來回滾事務(只有最初數據,不包含更新後的新行),擔不是恢復事務.
2.某些數據庫選項無法設置,比如OFFLINE READONLY CHECKSUM
3.無法被刪除
4.無法爲其創建快照,因爲不能恢復TEMPDB
tempdb的對象:
1.用戶對象:局部和全局的臨時表,表變量,表值函數中返回的表等;
2.內部對象:元數據存儲在內存中.
a.工作表:用於存儲假脫機中間結果的工作表;運行DBCC CHECKDB 等;使用XML及varchar(max);處理SQL SERVER Broker對象;使用靜態或者鍵集遊標
b.工作文件:SQL SERVER處理一個使用哈希操作符的查詢時
c.排序單元:在使用ORDER BY 子句;建立索引;某些類型的鏈接;排序單元在數據排序時被創建在tempdb中保持那些數據.
3.版本庫:在以下情況下,更新的數據行的老版本將保存在tempdb中.
a.當AFTER 觸發器觸發的時候;
b.當一個DML命令在一個允許快照級別的食物的數據庫中執行時;
c.當客戶端調用多個活動結果集;
d.新建或者重建一個索引期間,在該索引上進行DML操作.
下面列出了 SQL Server 中創建 tempdb 的用戶對象、內部對象或行版本的功能。只要有可能,便會提供估計磁盤空間使用量的方法
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_1devconc/html/3065e567-dbeb-4770-9835-c6e1b44595b8.htm(2008SQL MSDN本地)
tempdb的優化:
1.將 tempdb 的恢復模式設置爲 SIMPLE。此模式自動回收日誌空間以保持較小的空間要求。
2.使 tempdb 文件的大小可以根據需要自動增大。這可以使文件的大小增大到磁盤變滿爲止
3.將文件增量設置爲合理的大小以避免 tempdb 數據庫文件的增量過小。如果文件的增量與寫入 tempdb 的數據量相比過小,則 tempdb 可能需要不斷擴大。這將影響性能
建議爲 tempdb 文件設置 FILEGROWTH 增量時遵循以下通用原則:
tempdb 文件大小 FILEGROWTH 增量
0 至 100 MB 10 MB
100 至 200 MB 20 MB
200 MB 或更多 10%
4.通過將文件大小設置爲足夠容納環境中典型工作負荷的值來預分配所有 tempdb 文件的空間。這可以避免 tempdb 因擴展得過於頻繁而影響性能。
5.根據需要創建足夠多的文件以使磁盤寬度最大化。使用多個文件可以減少 tempdb 存儲爭用並獲得更大的可伸縮性。
但是,請勿創建過多的文件,因爲此操作可能降低性能並增加管理開銷。
作爲通用原則,爲服務器中的每一個 CPU 創建一個數據文件,然後根據需要上下調整文件的數量。
6.使每個數據文件的大小相同,這樣可以優化比例填充的性能。
7.將 tempdb 數據庫放置在快速 I/O 子系統中。如果有許多直接連接的磁盤,則請使用磁盤條帶化。
8.將 tempdb 數據庫放置在用戶數據庫使用的磁盤以外的磁盤中。
查看 tempdb 大小和增長參數:
SELECT
name AS FileName,
size*1.0/128 AS FileSizeinMB,
CASE max_size
WHEN 0 THEN 'Autogrowth is off.'
WHEN -1 THEN 'Autogrowth is on.'
ELSE 'Log file will grow to a maximum size of 2 TB.'
END,
growth AS 'GrowthValue',
'GrowthIncrement' =
CASE
WHEN growth = 0 THEN 'Size is fixed and will not grow.'
WHEN growth > 0 AND is_percent_growth = 0
THEN 'Growth value is in 8-KB pages.'
ELSE 'Growth value is a percentage.'
END
FROM tempdb.sys.database_files;
GO