【发布时间】:2009-06-08 18:35:23
【问题描述】:
我通常在我的存储过程中使用完全显式的事务(BEGIN TRANSACTION .... COMMIT)。我刚刚遇到一个旧的,它在代码中的某些地方使用“CHECKPOINT”。
这不会做同样的事情,对吧?即使数据库处于简单模式,整个事情仍然会作为一个大事务运行,即使中间卡了一堆 CHECKPOINTS?
【问题讨论】:
标签: sql sql-server tsql transactions
我通常在我的存储过程中使用完全显式的事务(BEGIN TRANSACTION .... COMMIT)。我刚刚遇到一个旧的,它在代码中的某些地方使用“CHECKPOINT”。
这不会做同样的事情,对吧?即使数据库处于简单模式,整个事情仍然会作为一个大事务运行,即使中间卡了一堆 CHECKPOINTS?
【问题讨论】:
标签: sql sql-server tsql transactions
检查点只是将脏页写入磁盘,完全不是一回事。 http://msdn.microsoft.com/en-us/library/ms188748.aspx
【讨论】:
没有。
CHECKPOINT 不同且独立于提交/回滚。
本文演示了“SQL Server 2000 I/O Basics”(对于 SQL Server 2005 等仍然可以)。
您可以检查点并写入磁盘但随后回滚
BEGIN/COMMIT 与恢复模式(完整、简单、批量记录)无关。 TXN 必须完成或失败。
如果发生电源故障,数据可能会因为 CHECKPOINT 而在磁盘上但未提交,因此会在数据库启动过程中回滚。
在过去,它用于try and "empty" the log of committed entries 用于简单的恢复模型。 CHECKPOINT 丢弃了它们。对于 FULL 恢复模式,您需要 BACKUP LOG。
【讨论】: