将事务日志刷新到日志文件中的条件

问题描述:

在哪些情况下将T日志从日志高速缓存刷新到日志文件或磁盘?将事务日志刷新到日志文件中的条件

这是否发生在每次提交之后或每隔3秒或仅在检查点之后?

并且当内存不足以容纳缓冲池中的数据(在临时数据库或各个数据库中)时,脏页面存储在SQL服务器中的位置?以及未提交的数据在SQL服务器中保存多久以及在哪里?

Checkp oint是一个内部进程,它将缓冲区缓存中的所有脏页(修改页)写入物理磁盘,除此之外,它还将日志记录从日志缓冲区写入物理文件。

检查点始终写出自上次检查点以来已更改的所有页面(称为已标记为脏)或从磁盘读入页面后的所有页面。无论改变页面的事务是否提交 - 页面写入磁盘都是无关紧要的。唯一的例外是tempdb,其中数据页面不作为检查点的一部分写入磁盘。

当tempdb日志文件达到70%满时,检查点仅针对tempdb执行 - 这是为了防止tempdb日志尽可能增长(请注意,长时间运行的事务仍然可以基本上保持日志为人质并且阻止它清除,就像在用户数据库中一样)。

条件时,事务日志刷新到日志文件:

的日志写的是过程,负责从日志缓存日志写入日志文件。

其中日志缓冲区刷新到磁盘的条件包括:

  1. 会话发出提交或回滚命令。
  2. 日志缓冲区变为1/3满。
  3. 在每个检查点之后。
  4. 每当日志文件变为70%满时。
  5. 这也取决于Target Recovery Time

或是否发生一次提交之后每3秒后或仅 检查点之后?

它发生在每次提交后和每个检查点之后。

检查点出现在用户数据库中,该数据库的所有脏页都被刷新到磁盘(以及其他操作)。这不会发生在tempdb上。 Tempdb在发生崩溃时不会被恢复,因此除了懒惰写入进程(缓冲池的一部分)必须为来自其他数据库的页面留出空间的情况外,不需要强制将脏tempdb页面强制到磁盘。当您发出手册 CHECKPOINT时,所有脏页面都会被刷新,但对于自动检查点而言,它们不是。

Checkpoints

多久提交的数据是SQL Server和地方保存?

SQL Server会将未提交的数据保留在数据和日志文件中,除非和直到事务完成/回滚。

+0

我想问一个问题并重写你的得到所有澄清后的回答不会给人留下好印象 – TheGameiswar

你问两个随机问题

1.Transaction日志缓冲区
2.Buffer池

在什么条件下T-日志从日志高速缓存刷新到日志文件或磁盘?它是在每次提交后还是每隔3秒后或者在检查点之后发生?

考虑下面的更新语句

Update table set id=1 
where id=2 

所有这些修改被写入事务日志buffer..SQLServer首先然后写入此修改到磁盘之前,我们得到全成commit..This被称为预写记录和这种类型的提交不会定期或任何thing..This每条语句

而且在发生在脏页都存储在SQL服务器时内存不够大持有该数据BU (在临时数据库或各个数据库中)?以及未提交的数据在SQL服务器中保存多久以及在哪里?

考虑相同的更新交易,此更新需要抚摸三pages..and一个页面不在缓冲区pool..In这种情况下,SQL从磁盘读取,并将其放置在页面缓冲池和修改它..Now这个页面被称为脏页...

这些类型的页面将被刷新到磁盘,如果检查点occurs..check点的发生是由于下面的链接中提到的各种条件

https://msdn.microsoft.com/en-us/library/ms189573.aspx

+0

检查点将刷新一切,无论是已提交还是未提交,因为此事务写入日志文件..SQLServer将从中读取,在最坏的情况下 – TheGameiswar

+0

谢谢.. TheGameiswar –