SQL Server误区30日谈 第26天 SQL Server中存在真正的“事务嵌套”

2020-07-10 08:13:53易采站长站整理

SELECT COUNT (*) FROM t1;
GO

正如我所期待,得到的结果是1000。这说明内部事务提交是会修改到磁盘的。但是如果这时外部事务回滚的话,那么不应该回滚内部事务…

ROLLBACK TRAN OuterTran;
GO
SELECT COUNT (*) FROM t1;
GO

但运行上面查询后结果是0,这说明外部事务的回滚会影响内部事务。
测试 #3:提交嵌套的事务的内部事务至少可以让我清除日志吧。
在开始这个测试之前我首先清除了日志,然后运行如下代码:

BEGIN TRAN OuterTran;
GO
BEGIN TRAN InnerTran;
GO
INSERT INTO t1 DEFAULT Values;
GO 1000
DBCC SQLPERF (‘LOGSPACE’);
GO

得到结果:

下面我将事务提交后运行CheckPoint(对于简单恢复模式的数据库将会截断日志),得到的结果:

COMMIT TRAN InnerTran;
GO
CHECKPOINT;
GO
DBCC SQLPERF (‘LOGSPACE’);
GO


我们发现日志的使用不减反赠,这是由于日志写入了CheckPoint记录(详情请看:How do checkpoints work and what gets logged)。提交内部事务不会导致日志被清除,这是由于外部事务回滚时也会连同内部事务一起回滚(译者注:所以这部分VLF在外部事务提交之前永远不会被标记位reusable)。所以这部分日志在外部事务提交之前永远不会被截断。为了证明这一点,我提交外部事务,然后再来看日志:

COMMIT TRAN OuterTran;
GO
CHECKPOINT;
GO
DBCC SQLPERF (‘LOGSPACE’);
GO


么样,日志使用百分比大幅下降了吧。
对于嵌套事务来说—Just Say no。(这句话你可以当作来自SQLSkill.com的一个热心的家伙给的福利:-)

您可能感兴趣的文章:SQL Server误区30日谈 第29天 有关堆碎片的误区SQL Server误区30日谈 第28天 有关大容量事务日志恢复模式的误区SQL Server误区30日谈 第27天 使用BACKUP WITH CHECKSUM可以替代DBCC CheckDBSQL Server误区30日谈 第25天 有关填充因子的误区SQL Server误区30日谈 第24天 26个有关还原(Restore)的误区SQL Server误区30日谈 第23天 有关锁升级的误区SQL Server误区30日谈 第22天 资源调控器可以调控IOSQL Server误区30日谈 第21天 数据损坏可以通过重启SQL Server来修复SQL Server误区30日谈 第20天 破坏日志备份链之后,需要一个完整备份来重新开始日志链SQL Server误区30日谈 第19天 Truncate表的操作不会被记录到日志SQL Server误区30日谈 第18天 有关FileStream的存储,垃圾回收以及其它SQL Server误区30日谈 第17天 有关页校验和的误区SQL Server误区30日谈 第16天 数据的损坏和修复SQL Server误区30日谈 第15天 CheckPoint只会将已提交的事务写入磁盘SQL Server误区30日谈 第14天 清除日志后会将相关的LSN填零初始化SQL Server误区30日谈 第13天 在SQL Server 2000兼容模式下不能使用DMVSQL Server误区30日谈 第12天 TempDB的文件数和需要和CPU数目保持一致SQL Server误区30日谈 第11天 镜像在检测到故障后瞬间就能故障转移SQL Server误区30日谈 第10天 数据库镜像在故障发生后 马上就能发现SQL Server误区30日谈 第9天 数据库文件收缩不会影响性能SQL Server误区30日谈 第8天 有关对索引进行在线操作的误区SQL Server误区30日谈 第7天 一个实例多个镜像和日志传送延迟SQL Server误区30日谈 第6天 有关NULL位图的三个误区SQL Server误区30日谈 第5天 AWE在64位SQL SERVER中必须开启SQL Server误区30日谈 第4天 DDL触发器就是INSTEAD OF触发器SQL Server误区30日谈 第3天 即时文件初始化特性可以在SQL Server中开启和关闭SQL Server误区30日谈 第2天 DBCC CHECKDB会导致阻塞SQL Server误区30日谈 第1天 正在运行的事务在服务器故障转移后继续执行SQL Server误区30日谈 第30天 有关备份的30个误区

相关文章 大家在看