RAM或物理文件中的事务日志?

9 sql-server transaction transaction-log

我是交易的初学者,只是关于交易日志的问题。我们知道,当我们提交事务时,更改会写入事务日志,但事务日志是在 RAM 中还是物理文件中?如果是在内存中,当系统出现故障时,显然内存会被重新擦除,这样我们就会丢失事务信息,那么我们如何恢复提交呢?

Han*_*dyD 15

您可以在此处找到有关此问题的非常全面的指南,但总而言之,SQL Server 不会将控制权返回给提交事务的应用程序,直到该事务已被硬化到磁盘。具体来说,一旦它被强化到事务日志文件,就可以返回控制权。

此时的数据,可能还没有被固化到数据文件中,它可能还在数据缓冲区缓存中,但是因为它已经被固化到事务日志中然后数据库恢复,一旦出现故障,可以恢复这个事务并安全地保存更改。

内存中有一个日志缓冲区缓存,用于减少对事务日志的顺序写入的性能影响。缓冲区在多种情况下刷新到磁盘,但其中之一是事务提交。在此数据被强化之前,控制权不会返回给调用者,因此即使您在此缓冲区刷新期间出现故障,事务一致性也会得到维护,因为此事务尚未被视为已提交。您将丢失该事务中的数据更改,但由于未提交,您的应用程序已经将这些更改视为丢失,因为提交从未完成。

  • 此处记录:https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide?view=sql-server-2017 (2认同)

kev*_*hat 4

数据库由两个文件组成:数据文件和事务日志文件。这些都存储在磁盘上。

每个数据库在 RAM 中都有一个日志缓存,当提交事务时,它会被移动到日志缓存中,等待刷新到磁盘。因此,当转换已提交并等待刷新到磁盘时,它暂时位于内存中,但最终它存储在磁盘文件中,而不是 RAM 中。

我在这里过于简单化了,我建议你阅读交易日志,我在这里推荐 Paul Randals 的一场讲座

https://youtu.be/LvlFgxZZOj4

  • Slowjamsm 你所描述的事情不会发生。提交是同步的 - 直到该时间点之前的所有日志记录都已写入磁盘(“硬化”)后才会完成。 (3认同)