Answers:
事务日志文件(LDF)由内部的许多虚拟日志文件(VLF)组成。可以将它想象成一个带有多个可拉式抽屉的橱柜。您可以选择一个大柜子,也可以选择一个小柜子-但是它仍然是固定大小的,只有不同数量的抽屉。
当SQL Server工作时,它将事务放入抽屉(VLF)。它从机柜的一端开始,填满第一个抽屉,然后当该抽屉中的空间用完时,它将移至下一个抽屉。
备份事务日志时,您真正要做的是:
备份不会更改机柜的大小(日志文件)。
备份事务日志与截断事务日志文件不同,截断事务日志文件与缩小事务日志文件不同。哦,是的,并且备份事务日志文件不必触发截断。根据当前负载,数据库引擎可能会决定设置一个检查点,但要等待一点时间。
事务日志文件是数据库引擎在其中存储对数据库中的数据所做的修改的位置,而不管数据库是在SIMPLE恢复模型中还是在FULL恢复模型中。(重要)
现在,数据库的事务日志文件不仅是一个连续的存储容器,而且是虚拟日志文件(VLF)的集合,这些虚拟日志文件是在事务日志(TLog)文件内按顺序创建的。VLF的大小取决于当前使用的SQL Server版本以及在创建TLog文件时选择的初始大小以及为自动增长设置选择的大小(如果有)。 TLog文件。
参考文献:
- 重要变化VLF创建算法在SQL Server 2014(SQLSkills.com)
- 初始VLF序列号和默认日志文件大小(SQLSkills.com)
- 里面的存储引擎:更多关于日志的循环特性
(SQLSkills。 com)
...可能顺序相反
在数据库中修改数据后,数据库引擎会将这些更改写入相应数据库的TLog中,以保持事务一致性。这也称为ACID-原子性,一致性,隔离性,耐久性。这些更改的实际交易存储在TLog(文件)的VLF中。当VLF已满时,最新的交易将按顺序存储在下一个可用的VLF中。
但是,如果到达TLog文件的结尾,则修改将存储在TLog文件开头的第一个VLF中。(在内部存储引擎中进行了解释:有关日志循环性质的更多信息)
如果没有可用的VLF空闲来存储新事务,并且配置了自动增长设置,则数据库引擎将按定义的数量增长TLog文件,并根据自动增长设置和公式中定义的大小创建其他VLF。在SQL Server 2014中的VLF创建算法的重要更改中解释了该问题。然后,可以将其他事务存储在TLog文件内的下一个VLF中。
触发TLog文件的备份时,您要做的就是告诉数据库引擎执行以下操作:
到目前为止,TLog文件内部尚未释放任何空间以供数据库引擎重用...
...但是,如果数据库引擎有一些空闲周期,并且承受的压力不是很大,它有时会查看TLog文件,注意检查点并释放VLF以供重用。TLF文件中的空间仍由VLF使用(相同大小,相同位置),但可以自由地重用它们。
记录在事务日志截断中:
除非由于某些原因而延迟,否则日志截断将自动发生,如下所示:-在简单恢复模式下,在检查点之后。
- 在完全恢复模式或大容量日志记录的恢复模式下,在日志备份之后,如果自上次备份以来已发生检查点。有关更多信息,请参阅本主题后面的“完整和批量记录的恢复模型下的日志截断”。
在某些情况下,这种情况不会发生:
尽管是自动的,但日志截断可能会由于多种因素而延迟。有关可以延迟日志截断的内容的信息,请参阅可以延迟日志截断的因素。
使用SQL语句或SSMS UI中的数据库空间报告查询TLog大小时,可以观察到日志截断。您可能会观察到,TLog文件内部的已用空间可能仅为可用TLog文件大小的1%。
一般建议不要缩小TLog文件,因为它由于某种原因而增长,并且可能会再次增长到以前的大小。但这是另一个帖子的故事。有一些很好的理由,其中之一是当您在TLog文件中重新创建VLF的大小时。
根据您的假设和问题进行内联
我的理解是备份数据库:
- 截断事务日志,并
这是一个错误的假设。备份数据库(FULL,DIFFERENTIAL)对TLog文件没有任何作用。完整备份将与TLog文件中的已提交事务一起创建数据库的一致状态。DIFF备份将创建自数据库的上一次FULL备份以来所有过去的TLog备份的一致状态。
但是,TLOG备份会从TLog文件创建已提交事务的备份,设置检查点,并可能(当负载不重时)释放VLF以供重用。
- 缩小尺寸
不,在考虑完整备份和不同备份时。不可以,在考虑TLOG备份时,但是如果数据库引擎有空闲时间,它将释放TLog文件中的VLF。
截断日志实际上对日志文件(LDF)有什么作用?该过程应防止磁盘装满。
截断日志允许重复使用VLF。就这样。
如果已设置自动增长设置,则此过程的好处是可以防止TLog文件增长。
如果未设置自动增长设置,因为您的需求工程流程确定TLog文件的大小固定,那么最糟糕的情况是TLog已填满,因为没有TLog备份发生,因此没有VLF被释放。TLog无法增长,VLF也无法释放,以允许将其他事务写入TLog文件(或内部的VLF)。
布伦特·奥扎尔(Brent Ozar)已经为您提供了有关事务日志文件的解释,我将重点关注您的某些问题
我的理解是备份数据库:
- 截断事务日志,并
- 缩小尺寸
完全备份对任何恢复模型中的事务日志均不起作用。在完全恢复模式下,当您进行事务日志备份时,它将截断日志。请注意,如果仍然存在持有VLF的长期交易,或者按照Brent的解释仍然需要出票人,则其他交易不能重新使用出票人,或者从技术角度讲,它不会被截断以便可以重新使用。
它还不会缩小事务日志。要缩小日志,您必须使用dbcc shrinkfile
命令
截断日志实际上对日志文件(LDF)有什么作用?该过程应防止磁盘装满。
它使日志文件可重复使用,以便其他事务可以使用它,或者按照布伦特的类比,其他人可以使用抽屉将文件保留在其中。
经过回答之后,我强烈建议您阅读SQLSKILLS.com上的事务日志。