八、IO优化(6)优化tempdb性能
一、tempdb簡介
1. 概念
tempdb是一個系統(tǒng)數(shù)據(jù)庫,可供連接到SQL Server實例的所有用戶使用。
每次啟動 SQL Server 時都會重新創(chuàng)建 tempdb,從而在系統(tǒng)啟動時總是保持一個干凈的數(shù)據(jù)庫副本。在斷開聯(lián)接時會自動刪除臨時表和存儲過程,并且在系統(tǒng)關閉后沒有活動連接。因此 tempdb 中不會有什么內(nèi)容從一個 SQL Server 會話保存到另一個會話。
不允許對 tempdb 進行備份和還原操作。
2. tempdb保存的對象
(1)顯式創(chuàng)建的用戶對象
這些對象由用戶顯式創(chuàng)建。存在于用戶會話的作用域中,也可位于創(chuàng)建對象所用的例程(存儲過程、觸發(fā)器或用戶定義函數(shù))的作用域中。
包括:表和索引(系統(tǒng)的,或用戶定義的)、臨時表和索引(全局的,或局部的)、表變量、表值函數(shù)中返回的表。
(2)數(shù)據(jù)庫引擎創(chuàng)建的內(nèi)部對象
這些內(nèi)部對象由數(shù)據(jù)庫引擎根據(jù)需要而創(chuàng)建,用于處理SQL Server語句。可以在語句的作用域中創(chuàng)建和刪除。每個內(nèi)部對象至少使用9個頁面:1個IAM頁,1個連續(xù)8頁的區(qū)。
包括:用于游標或假脫機操作以及臨時大型對象(LOB)存儲的工作表;用于HASH連接或HASH聚合操作的工作表;用于創(chuàng)建或重新生成索引等操作(如果指定了SORT_IN_TEMPDB)的中間排序結果,或者某些GROUP BY、ORDER BY或UNION查詢的中間排序結果。
(3)版本存儲區(qū)
版本存儲區(qū)是數(shù)據(jù)頁的集合,它包含支持使用行版本控制的功能所需的數(shù)據(jù)行,主要用來支持快照事務隔離級別,以及一些其它提高數(shù)據(jù)庫并發(fā)性能的新功能。主要分為2類:公用版本存儲區(qū)、聯(lián)機索引生成版本存儲區(qū)。
包括:由使用快照隔離級別或已提交隔離級別(基于行版本控制)的數(shù)據(jù)庫中的數(shù)據(jù)修改事務生成的行版本;由數(shù)據(jù)修改事務為實現(xiàn)聯(lián)機索引操作、多個活動的結果集(MARS)以及AFTER觸發(fā)器等功能而生成的行版本。
3. tempdb 的性能提高
在 SQL Server 中,tempdb 性能以下列方式進行提高:
(1)可能緩存臨時表和表變量。緩存允許刪除和創(chuàng)建臨時對象的操作非常快速地執(zhí)行,并減少頁分配的爭用問題。
(2)分配頁閂鎖協(xié)議得到改善。從而減少使用的 UP(更新)閂鎖數(shù)。
(3)減少了 tempdb 的日志開銷。從而降低了 tempdb 日志文件上的磁盤 I/O 帶寬占用。
(4)在 tempdb 中分配混合頁的算法得到改善。
二、監(jiān)視tempdb大小
tempdb 數(shù)據(jù)庫的大小和物理位置可能會影響系統(tǒng)的性能。tempdb 的大小可以影響系統(tǒng)性能。例如,如果 tempdb 的大小太小,則每次啟動 SQL Server 時,系統(tǒng)處理可能忙于數(shù)據(jù)庫的自動增長,而不能支持工作負荷要求。可以通過增加 tempdb 的大小來避免此開銷。
如果 tempdb 中磁盤空間不足,則可能會嚴重破壞 SQL Server 生產(chǎn)環(huán)境,并會使正在運行的應用程序無法完成操作。
可以使用 sys.dm_db_file_space_usage 動態(tài)管理視圖來監(jiān)視 tempdb 文件中的這些功能使用的磁盤空間。
此外,若要在會話級或任務級監(jiān)視 tempdb 中的頁分配或頁釋放活動,可以使用動態(tài)管理視圖 sys.dm_db_session_space_usage 和 sys.dm_db_task_space_usage。這些視圖可用于標識使用 tempdb 中大量磁盤空間的大型查詢、臨時表或表變量。
還可以使用若干個計數(shù)器來監(jiān)視 tempdb 中的可用空間以及使用 tempdb 的資源。
http://technet.microsoft.com/zh-cn/library/ms176029(v=sql.105).aspx
每次創(chuàng)建 tempdb 時都要使用文件大小和文件增長參數(shù)的值。例如,如果您將 tempdb 數(shù)據(jù)文件的大小增加到 20 MB 并將文件增量增加到 15%,則新的值將立即生效。如果后續(xù)事務活動使 tempdb 的大小增大,則每次重新啟動 SQL Server 實例時,數(shù)據(jù)文件的大小都將返回到 20 MB。
三、tempdb的通用原則
1. 文件數(shù)量
根據(jù)需要創(chuàng)建足夠多的文件以使磁盤寬度最大化。使用多個文件可以減少 tempdb 存儲爭用并獲得更大的可伸縮性。但是,請勿創(chuàng)建過多的文件,因為此操作可能降低性能并增加管理開銷。
作為通用原則,為服務器中的每一個 CPU 創(chuàng)建一個數(shù)據(jù)文件(用于解釋任何關聯(lián)掩碼設置),然后根據(jù)需要上下調(diào)整文件的數(shù)量。
2. 恢復模式
將 tempdb 的恢復模式設置為 SIMPLE。此模式自動回收日志空間以保持較小的空間要求。
3. 自動增長
通過將文件大小設置為足夠容納環(huán)境中典型工作負荷的值來預分配所有 tempdb 文件的空間。這可以避免 tempdb 因擴展得過于頻繁而影響性能。
本文結語:
規(guī)劃tempdb數(shù)據(jù)庫的大小,根據(jù)CPU數(shù)量使用多個文件。
總結
以上是生活随笔為你收集整理的八、IO优化(6)优化tempdb性能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ibatis - Open quote
- 下一篇: Delphi TStream 详细介绍