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

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