參考資料來(lái)自:
http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/tempdb/
從SQLServer2005開(kāi)始引入了版本存儲(chǔ)區(qū),用于存儲(chǔ)不同版本的數(shù)據(jù)和索引行。行版本通常是舊的數(shù)據(jù)或索引行的副本,用來(lái)實(shí)現(xiàn)現(xiàn)有的觸發(fā)器以及基于快照的隔離級(jí)別、MARS和在線索引創(chuàng)建等SQL Server2005新功能。下面讓我們看一下這些功能是如何使用行版本的:
l??觸發(fā)器:觸發(fā)器對(duì)被刪除和被插入的行進(jìn)行操作,這是原表的?DML?操作的一部分。SQL Server2005之前,觸發(fā)器通過(guò)遍歷撤消/重做日志邏輯構(gòu)造這些行。因?yàn)?SQL Server?需要遍歷的舊的記錄,這會(huì)導(dǎo)致磁盤頭來(lái)回移動(dòng),從而損害的日志所在磁盤的?IO?吞吐量。通常事務(wù)回滾并不常見(jiàn),日志所在磁盤一般都是有順序地寫入。如果應(yīng)用程序大量使用觸發(fā)器就有可能導(dǎo)致日志磁盤上的?IO?瓶頸。自SQL Server 2005開(kāi)始,觸發(fā)器改為使用行版本。于是被刪除的和被插入的行將使用行版本,這些行的句柄將附加到該事務(wù)中。使用行版本避免了SQL Server遍歷日志,從而減小了日志磁盤壓力,但同時(shí)行版本增加了TempDB的使用量。
l??在線索引:索引可以在線創(chuàng)建,但創(chuàng)建的同時(shí)行的數(shù)據(jù)可能會(huì)發(fā)生改變。SQL Server使用行版本保證創(chuàng)建索引參考的數(shù)據(jù)不被改變。
l??MARS:MARS全稱為Multiple Active Result Sets(多個(gè)活動(dòng)結(jié)果集)。SQL Server通過(guò)行版本實(shí)現(xiàn)它。這是一個(gè)較為復(fù)雜的功能。概括的說(shuō)就是因?yàn)镸ARS允許同一事務(wù)內(nèi)的多個(gè)語(yǔ)句在同一時(shí)間處于活動(dòng)狀態(tài),SQL Server?就必須使用行版本控制來(lái)提供語(yǔ)句級(jí)別的一致性。
l??快照隔離級(jí)別和使用行版本控制的已提交讀隔離級(jí)別:行版本是實(shí)現(xiàn)這些新隔離級(jí)別的基礎(chǔ)。SQL Server?創(chuàng)建已修改的行版本,使這些隔離級(jí)別下運(yùn)行的事務(wù)不會(huì)讀到臟數(shù)據(jù)。
以上這些功能除了觸發(fā)器之外都是SQL Server2005的新功能,而升級(jí)到SQL Server2005版本后觸發(fā)器也開(kāi)始使用行版本了,效果比之前要好。SQL Server能夠較好地監(jiān)視和解決版本存儲(chǔ)區(qū)問(wèn)題。
接下來(lái)的博文中將討論版本存儲(chǔ)區(qū)中存儲(chǔ),數(shù)據(jù)遍歷和垃圾數(shù)據(jù)處理等詳細(xì)內(nèi)容。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
