


SQL Server 2005中Tempdb變化分析
tempdb數(shù)據(jù)庫是SQL Server用于臨時(shí)或者開關(guān)操作的數(shù)據(jù)庫。對(duì)tempdb所做的很多優(yōu)化都是在透明的情況下,讓處理加速,本文就介紹tempdb對(duì)SQL Server 2005的影響以幫助大家利用這些來寫出更好的、更先進(jìn)的SQL Server 2005代碼。
SQL Server 2005版本中的所有變化可以寫成一本書,事實(shí)上,已經(jīng)被寫成了好幾本書。其中,最重要的變化不是功能上的變化;這些變化發(fā)生在用戶或者管理員無法立刻感覺到的內(nèi)部的行為上。這就是說,了解到它們是什么,它們?cè)谑裁礌顩r下會(huì)表現(xiàn)出來,將會(huì)很有用。
這些的隱藏起來的性能提升中最好的一個(gè)例子就是tempdb數(shù)據(jù)庫——SQL Server用于臨時(shí)或者開關(guān)操作的數(shù)據(jù)庫。對(duì)tempdb所做的很多優(yōu)化都是在透明的情況下,讓處理加速:
◆當(dāng)臨時(shí)表被創(chuàng)建的時(shí)候,臨時(shí)表會(huì)被緩存起來加速性能。然而,有一些表明確的不會(huì)被緩存:
◆關(guān)聯(lián)著顯式DDL的臨時(shí)表
◆關(guān)聯(lián)著命名的約束的臨時(shí)表
◆作為動(dòng)態(tài)產(chǎn)生的SQL語句的一部分的臨時(shí)表——例如,存儲(chǔ)過程sp_executeSQL的環(huán)境中
◆工作表的緩存得到提升。為了節(jié)約了空間,會(huì)被反復(fù)執(zhí)行的執(zhí)行計(jì)劃中的工作表被截短了;現(xiàn)在只有工作表中的前九個(gè)頁面才會(huì)保留。
◆很多其他類型的臨時(shí)對(duì)象也被緩存以提高速度:當(dāng)在存儲(chǔ)過程、函數(shù)或者觸發(fā)器中使用時(shí),表值函數(shù),表變量和局部臨時(shí)表都會(huì)被緩存。對(duì)于某種特定的臨時(shí)對(duì)象的編目條目不會(huì)被立即丟棄,而是緩存以備將來的重用(一段時(shí)間之后,最少使用的對(duì)象將從緩存中清除)。
◆對(duì)于tempdb中記錄的一些修改將不再被記錄到日志中,這樣可以降低tempdb產(chǎn)生的日志和設(shè)備的I/O流量。INSERT操作只會(huì)記錄插入的記錄,DELETE操作只會(huì)記錄被刪除的記錄。只有UPDATE操作才會(huì)同時(shí)記錄原值和更新之后的值。(根據(jù)Microsoft的內(nèi)部資料,在此之前的版本,三種操作都會(huì)記錄操作之前的值和操作之后的值)
◆重新設(shè)計(jì)tempdb的文件被均衡寫入的方式,減少對(duì)系統(tǒng)資源的競(jìng)爭(zhēng)。均衡寫入意味著每一個(gè)tempdb文件(假設(shè)存在多個(gè)文件)會(huì)被同時(shí)寫入。因此,如果每個(gè)物理文件分散到不同的磁頭上,那么對(duì)這些文件的寫入可以更加有效率的并行處理。建議你為一個(gè)SQL Server在每一個(gè)CPU創(chuàng)建一個(gè)臨時(shí)文件,并且將每個(gè)臨時(shí)文件放在不同的磁頭上。
◆如果一個(gè)臨時(shí)表從tempdb中被丟棄,它會(huì)在后臺(tái)進(jìn)行處理以降低主機(jī)程序的等待時(shí)間。實(shí)際上,它會(huì)被立即處理。
不僅僅是性能,一些變化也影響到了SQL Server 2005的統(tǒng)計(jì)收集操作:
◆SQL Server 2005的動(dòng)態(tài)管理視圖(Dynamic Management Views)報(bào)告關(guān)于tempdb空間使用情況的統(tǒng)計(jì)數(shù)據(jù),可以通過查詢檢索到這些數(shù)據(jù)。例如,SELECT SUM (unallocated_extent_page_count)*8 as [Free Space] FROM sys.dm_db_file_space_usage會(huì)返回tempdb文件中以kilobytes計(jì)算的自由空間總數(shù)。
◆Trace標(biāo)志TF-1118(表示分配整個(gè)的extents給每個(gè)tempdb對(duì)象)已經(jīng)被重新改造,減少資源的競(jìng)爭(zhēng)。你可以用它作trace檢查而不用擔(dān)心對(duì)tempdb性能產(chǎn)生影響。
◆兩個(gè)新的性能指標(biāo),臨時(shí)表新建率(Temp Tables Creation Rate)和臨時(shí)表銷毀計(jì)數(shù)(Temp Tables for Destruction),在SQL Server 2005中出現(xiàn)。它們分別指示每秒鐘新建多少個(gè)臨時(shí)表和多少個(gè)臨時(shí)表在排隊(duì)銷毀。
這些變化可以讓程序員對(duì)tempdb實(shí)際的運(yùn)行方式有一些洞察,而不是被它表面上的行為所蒙蔽——毫無疑問,一個(gè)創(chuàng)新的程序員可以利用這些來寫出更好的、更先進(jìn)的SQL Server 2005代碼。
關(guān)鍵字:SQL Server、數(shù)據(jù)庫
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解