SQL Server does not purge row versioning records even the transaction are committed if there are oth...

本文详细解析了SQLServer中读已提交快照隔离级别的行为,特别是在跨数据库事务处理中的工作原理。通过具体示例说明了SQLServer如何在不同会话间管理行版本记录,以及这些记录何时被清理。

This is a by-design behavior. There is only one allocation unit in tempdb that is
tracking the versioned records across the server. Cleanup of this allocation
unit is decided by the oldest transaction of READ_COMMITTED_SNAPSHOT enabled
database.  SQL Server won’t remove row
versioning records of all databases greater than the oldest transaction until
it commits or rollback.

 

Here is an example

Database db1 and db2 have read_committed_snapshot enabled.

1)session 1

use db1

begin tran

select *From table1DB1

 

2)session 2

use db2

update table1DB2 set c1=c1+1

 

Then the SQL Server does not remove the row versioning records of session 2 until session 1 transaction commit rollback.

 

Then we start an new transaction

3)Session 3

use db1

begin tran

select * from table2DB1

 

4)Session 4

use db2

update table1DB2 set c1=c1+1

 

 

if Session 1 is commit right now.

The row versioning records of session 2 will be removed by SQL Server.

However,The row versioning records of session 4 will not be removed by SQL Server, because transaction in session 3 is still there.

转载于:https://www.cnblogs.com/stswordman/p/10416191.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值