亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL Server中TempDB管理(版本存儲(chǔ)區(qū)的一個(gè)exam

系統(tǒng) 2166 0
原文: SQL Server中TempDB管理(版本存儲(chǔ)區(qū)的一個(gè)example)

原文來自:

http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/tempdb/

http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/12/31/managing-tempdb-in-sql-server-tempdb-basics-version-store-simple-example.aspx

我們從一個(gè)例子開始來了解版本存儲(chǔ)區(qū)。本例中數(shù)據(jù)庫啟用RCSI(使用行版本控制的已提交讀隔離級別)和SI(快照隔離級別)。

當(dāng)數(shù)據(jù)庫啟用了RCSI或者SI時(shí),每當(dāng)行有更新時(shí)就會(huì)創(chuàng)建一個(gè)行版本。此行版本在版本存儲(chǔ)器保存到不需要為止。那么SQL Server什么時(shí)候不再保存這個(gè)行版本呢?您可能聯(lián)想到一些相關(guān)的問題,比如,如果不回收(刪除)行版本會(huì)有什么影響?一次回收一個(gè)還是一組行版本?每個(gè)用戶表都有不同的結(jié)構(gòu),那么SQL Server是不是分別存儲(chǔ)每個(gè)表的行版本的?行版本控制的開銷大不大?

首先,我們創(chuàng)建一個(gè)數(shù)據(jù)庫并開啟SI/RCSI

create ? database ? snapshottest

go

?

-- S etting? database ? for ? snapshot ?based isolations. AS you can

-- see that enabling SI/RCSI is a simple DDL operation.

alter ? database ?snapshottest? set ? read_committed_snapshot ? ON

go

?

alter ? database ?snapshottest? set ? allow_snapshot_isolation ? ON

go

?

-- check the snapshot state of the database and it will

-- show that both SI and RCSI have been enabled.

select ??is_read_committed_snapshot_on ,

? ??snapshot_isolation_state_desc ,

????????snapshot_isolation_state

from ? sys . databases

where ?name = 'snapshottest'

go

?

--create a table with each row > 1000 bytes

create ? table ??t_version ? ( c1? int , ?c2? char ( 1000 ))

go

?

--Load 50 rows. Note,I start the transaction but did not

--commit it yet.

Begin tran

declare ?@i? int

select ?@i? = ?0

while? ( @i? < ?50 )

begin

insert ? into ?t_version? values? ( @i , ? 'hello' )

set ?@i? = ?@i? + ?1

end

?

接下來可以通過DMV查看版本存儲(chǔ)區(qū),你會(huì)發(fā)現(xiàn)顯示版本存儲(chǔ)區(qū)行數(shù)為0,這是我們實(shí)驗(yàn)的第一個(gè)結(jié)論,插入(Insert)命令不會(huì)產(chǎn)生行版本,因?yàn)楦緵]有之前的版本可言(有一個(gè)特例使插入產(chǎn)生行版本,我們將稍后討論)。這同時(shí)意味著批量導(dǎo)入也不會(huì)產(chǎn)生行版本。

select ? COUNT (*) ? from ? sys . dm_tran_version_store

-- Now commit the transaction

commit

?

接下來讓我們更新表格中的前50行。因?yàn)樾袛?shù)據(jù)被更新了,SQL Server將復(fù)制舊版本進(jìn)入版本存儲(chǔ)區(qū)。所以版本存儲(chǔ)區(qū)中將有50行行版本。

-- update all the rows in the table

update ?t_version? set ?c2? = 'test10'

?

-- the following statement returns the count of versioned row.

-- And, for the case here, it will return 50

select ? COUNT (*) ? from ? sys . dm_tran_version_store

?

請注意,我們沒有使用顯式事務(wù),因此這個(gè)Update語句是一個(gè)隱式事務(wù),并且是這個(gè)隱式事務(wù)中唯一的語句。同時(shí)沒有并發(fā)的事務(wù)需要使用行版本,所以這些行版本會(huì)被SQL Server當(dāng)做垃圾數(shù)據(jù)處理。如果過幾分鐘在運(yùn)行下面語句,就能發(fā)現(xiàn)行版本被回收處理了。

?

-- the following statement returns 0 if run after a minute or so

select ? COUNT (*) ? from ? sys . dm_tran_version_store

?????????SQL Server根據(jù)事務(wù)狀態(tài)判斷版本是否不再需要,從而決定垃圾處理該版本。在最差的情況下,如果有一個(gè)長事務(wù)正在運(yùn)行,而且這個(gè)長事務(wù)要么創(chuàng)建了行版本要么需要用到它,那么這個(gè)行版本就不能被刪除,版本存儲(chǔ)區(qū)就會(huì)一直增長甚至?xí)帽MTempDb的空間,就像長事務(wù)可以用盡事務(wù)日志空間一樣。關(guān)于這一點(diǎn)我們會(huì)在稍后詳述。

?????????和UPDATE操作一樣,如果行被刪除也會(huì)創(chuàng)建行版本。

?

SQL Server中TempDB管理(版本存儲(chǔ)區(qū)的一個(gè)example)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 在线亚洲欧美性天天影院 | 九天玄帝诀免费完整观看 | 欧美黑人乱大交ⅹxxxxx | 久久99热不卡精品免费观看 | 99热这里只有免费国产精品 | 四库国产精品成人 | 欧美激情视频网址 | 性成人动作片在线看 | 99re这里只有热视频 | 伊人久久香蕉 | 二区国产| 欧美中文字幕视频 | 69一级毛片 | 日本欧美一区二区三区在线观看 | 国产精品88 | 亚洲精品久久久久影 | 亚洲国产精品xo在线观看 | 99久久久国产精品免费播放器 | 日本操比 | 亚洲视频一二区 | 四虎影视永久免费观看地址 | 中国欧美一级毛片免费 | 兽皇在线观看 | 国产成人高清亚洲一区91 | 五月婷婷社区 | 一本色道久久综合亚洲精品高清 | 亚洲一区二区三区久久 | 色婷婷一区二区三区四区成人 | 国产精品96久久久久久久 | 热久久只有精品 | 奇米网狠狠干 | 精品国产综合 | 日韩在线2020专区 | 国产成人亚洲精品乱码在线观看 | 欧美激情在线 | 亚洲精品国产成人专区 | ww亚洲ww亚在线观看 | 国产成人精品一区二三区在线观看 | 成人美女隐私免费 | 亚洲一级黄色 | 免费看成人频视在线视频 |