9 sql-server transaction transaction-log
我是交易的初学者,只是关于交易日志的问题。我们知道,当我们提交事务时,更改会写入事务日志,但事务日志是在 RAM 中还是物理文件中?如果是在内存中,当系统出现故障时,显然内存会被重新擦除,这样我们就会丢失事务信息,那么我们如何恢复提交呢?
Han*_*dyD 15
您可以在此处找到有关此问题的非常全面的指南,但总而言之,SQL Server 不会将控制权返回给提交事务的应用程序,直到该事务已被硬化到磁盘。具体来说,一旦它被强化到事务日志文件,就可以返回控制权。
此时的数据,可能还没有被固化到数据文件中,它可能还在数据缓冲区缓存中,但是因为它已经被固化到事务日志中然后数据库恢复,一旦出现故障,可以恢复这个事务并安全地保存更改。
内存中有一个日志缓冲区缓存,用于减少对事务日志的顺序写入的性能影响。缓冲区在多种情况下刷新到磁盘,但其中之一是事务提交。在此数据被强化之前,控制权不会返回给调用者,因此即使您在此缓冲区刷新期间出现故障,事务一致性也会得到维护,因为此事务尚未被视为已提交。您将丢失该事务中的数据更改,但由于未提交,您的应用程序已经将这些更改视为丢失,因为提交从未完成。
数据库由两个文件组成:数据文件和事务日志文件。这些都存储在磁盘上。
每个数据库在 RAM 中都有一个日志缓存,当提交事务时,它会被移动到日志缓存中,等待刷新到磁盘。因此,当转换已提交并等待刷新到磁盘时,它暂时位于内存中,但最终它存储在磁盘文件中,而不是 RAM 中。
我在这里过于简单化了,我建议你阅读交易日志,我在这里推荐 Paul Randals 的一场讲座
归档时间: |
|
查看次数: |
1592 次 |
最近记录: |