一、预写事务日志(WAL)机制
1. 事务日志的作用
每个 SQL Server 数据库都具有事务日志,用于记录所有事务以及每个事务对数据库所做的修改。
事务日志是数据库的重要组件,如果系统出现故障,则可能需要使用事务日志将数据库恢复到一致状态。 删除或移动事务日志以前,必须完全了解此操作带来的后果。
事务日志支持以下操作:
(1) 恢复个别的事务。
(2) 在 SQL Server 启动时恢复所有未完成的事务。
(3) 在还原的数据库、文件、文件组或页时,前滚至故障点。
(4) 支持高可用性、灾难恢复、复制等解决方案:AlwaysOn 可用性组、数据库镜像、日志传送、事务复制等。可以认为传输事务日志记录的成本很低,远远低于传输数据页面(以64KB)的成本。
2. 预写事务日志 需要修改数据时,SQL Server先将数据所在的数据页面读入到内存的缓冲区,然后修改缓冲区里面的数据并记录到日志文件中,最后再将“脏页”回写到硬盘上的数据页面。一般情况下,是由检查点(Checkpoint)负责回写“脏页”。
预写事务日志.png (35.72 KB)
2013-10-29 14:12
二、截断事务日志
必须定期截断事务日志以避免它被填满。 但是,一些因素可能延迟日志截断,因此监视日志大小很重要。 某些操作可以最小日志量进行记录以减少其对事务日志大小的影响。
日志截断释放日志文件的空间,以便由事务日志重新使用。 日志截断主要用于阻止日志填充。
日志截断从 SQL Server 数据库的逻辑事务日志中删除“不活动的”虚拟日志文件,释放逻辑日志中的空间以便物理事务日志重用这些空间。 如果事务日志从不截断,它最终将填满分配给物理日志文件的所有磁盘空间。
日志截断并不减小物理日志文件的大小。 若要减少物理日志文件的物理大小,需要收缩日志文件。
三、最小化事务日志
某些操作可以最小日志量进行记录以减少其对事务日志大小的影响。