SQL Server事务,未提交的数据在哪里举行?

时间:2013-04-03 18:34:13

标签: sql-server memory-management transactions

我的问题涉及如何在SQL Server中处理事务。

假设我有一个包含大量数据的用户定义事务,该数据在该过程中会在哪里存储?如果事务成功但它事先驻留在哪里,它只对数据库文件提交。

  • 是否留在创建交易的程序内存
  • 到SQL服务器内存进程
  • 是否写入数据库的事务日志?
  • 临时文件或其他一些磁盘位置?

2 个答案:

答案 0 :(得分:2)

未提交的数据被写入有问题的表中,在事务提交之前,它不会被标记为已提交。如果事务被回滚,则下次发生需要受影响页面的写入时将覆盖数据。事务提交后,表中的数据将被提交,并且不能被覆盖。该日志包含数据库中正在发生的事件的持续记录,以便在系统崩溃后或事务回滚时可以向后或向前滚动事务。

答案 1 :(得分:2)

SQL Server使用ARIES预写日志记录。详细信息在How It Works: Bob Dorr's SQL Server I/O Presentation中描述。预写日志记录要求对日志记录描述的数据进行每次更改,以便崩溃恢复可以重建数据库。要回滚事务,所有人必须做的是向后遍历日志并为事务生成的每条记录生成补偿操作。这实际上将撤消事务所做的一切。 Two phase locking将确保补偿操作始终可以自由进行。

另请参阅Inside the SQL Server Transaction Log,当然还有ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging