预写式日志(Write-Ahead Logging (WAL))
???? SQL Server中使用了WAL(Write-Ahead Logging)技术来保证事务日志的ACID特性。而且大大减少了IO操作。 ???? WAL的核心思想是:在数据写入到数据库之前,先写入到日志.再将日志记录变更到存储器中。 ????????? 1.在SQL Server的缓冲区的日志中写入”Begin Tran”记录 ???? 2.在SQL Server的缓冲区的日志页写入要修改的信息 ???? 3.在SQL Server的缓冲区将要修改的数据写入数据页 ???? 4.在SQL Server的缓冲区的日志中写入”Commit”记录 ???? 5.将缓冲区的日志写入日志文件 ???? 6.发送确认信息到客户端(SMSS,ODBC等) ???? 7.将缓冲区内的页写入到磁盘 ? ???? 当事务遇到Commit时,仅仅是将缓冲区的所有日志页写入磁盘中的日志文件;而直到Lazy Writer或CheckPoint时,才真正将缓冲区的数据页写入磁盘文件。 ???? CheckPoint:自动发出检查点。 Checkpoint 方法会立即发出检查点,而无论恢复间隔设置为何。 ????? 这个CheckPoint的是一个服务器级别的参数。可以通过sp_config进行配置,也可以在SSMS中进行配置: 需要注意的是CHECKPOINT 权限预设会授予系统管理员 (sysadmin) 固定伺服器角色及 db_owner 與 db_backupoperator 固定资料库角色的成員,並不可加以转让。更短的恢复间歇意味这更短的恢复时间和更多的磁盘IO,而更长的恢复间歇则带来更少的磁盘IO占用和更长的恢复时间.
1. 自上次检查点后产生大量日志 2. 服务实例关闭 3. 数据库完整备份或差异备份(日志备份不会触发checkpoint) 4. 数据库恢复模式为简单恢复模式下当日志文件使用超过70%时 Lazy Writer:
1. 缓存区内可用空闲缓存块数据不足 2. Windows系统内存压力
????? Checkpoint目的是减少数据库的恢复时间(服务奔溃或重启服务后的恢复),而Lazy writer的目的是保证SQL OS 有空闲缓存块和系统有一定可用内存。 ????? Checkpoint和LazyWriter都会将缓冲区内脏页写入到磁盘; ????? LazyWriter会更新缓存区空闲可用列表,而checkpoint不会; ????? Checkpoint操作会被记录到数据库日志中,而lazywriter不会; ????? 通过指定CheckPoint后的参数,SQL Server会按照这个时间来完成CheckPoint过程,如果时间指定的短,则SQL Server会使用更多的资源优先完成CheckPoint过程。 ????? 通常情况下,将“脏”页写入磁盘的工作,Lazy Writer要做的比CheckPoint会多出许多。 ??? 本文简单介绍了WAL的概念和最终实现数据实际修改的两种方法。介绍了CheckPoint和Lazy Writer,同时对比了两种方法的机制和触发条件,这对我们将来进一步讲解事务日志的基本原理和恢复机制提供了良好的基础。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |