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