版本儲存
SQL Server 2005提供了行版本架構用於實現一些特性。如下列出了使用行版本架構的特性。更多關於下列特性的資訊,請參考SQL Server 聯機叢書。
◆觸發器
◆MARS
◆聯機索引
◆基於行版本隔離等級:需要在資料庫級設定選項
行版本需要跨會話共用。當行版本被回收時,行版本的建立者沒有控制權。你需要找到並殺掉阻止行版本清理的運行最長的事務。
下列查詢返回依賴於版本儲存運行最長的2個事務。
select top 2
transaction_id,
transaction_sequence_num,
elapsed_time_seconds
from sys.dm_tran_active_snapshot_database_transactions
order by elapsed_time_seconds DESC
這是樣本的輸入,顯示了序號為3,事務ID為8609的事務已經運行了6523秒。
transaction_id transaction_sequence_num elapsed_time_seconds
-------------------- ------------------------ --------------------
8609 3 6523
20156 25 783
因為第2個事務運行了相對短的時間,你可以通過殺掉第1個事務來釋放大量的版本儲存。可是,沒有方法能評估通過殺掉進能釋放的版本空間。你也許需要殺掉一些事務來釋放更多的空間。
你可以通過改變用於版本儲存的tempdb屬性或通過儘可能的消除在快照隔離等級的長事務,或在read-committed-snapshot下啟動並執行長查詢來減輕這個問題。你能使用下列公式粗略的評估行版本儲存的大小。
[Size of version store] = 2 * [version store data generated per minute] * [longest running time (minutes) of the transaction]