预写式日志(Write-Ahead Logging (WAL))

 部分转自:http://www.cnblogs.com/wenBlog/p/4423497.html

SQL Server中使用了WAL(Write-Ahead Logging)技术来保证事务日志的ACID特性。而且大大减少了IO操作。

WAL的核心思想是:在数据写入到数据库之前,先写入到日志.再将日志记录变更到存储器中。

SQL Server修改数据的步骤

1.在SQL Server的缓冲区的日志中写入”Begin Tran”记录

2.在SQL Server的缓冲区的日志页写入要修改的信息

3.在SQL Server的缓冲区将要修改的数据写入数据页

4.在SQL Server的缓冲区的日志中写入”Commit”记录

5.将缓冲区的日志写入日志文件

6.发送确认信息到客户端(SMSS,ODBC等)

7.将缓冲区内的页写入到磁盘(Lazy Writer或CheckPoint在这点之前开始)

(1)预写式事务的工作原理

  需要修改数据时,SQL Server先将数据所在的数据页面读入到内存的缓冲区,然后修改缓冲区里面的数据并记录到日志文件中,最后再周期性地将“脏页”回写到硬盘上的数据页面。

  一般情况下,是由检查点(Checkpoint)负责回写“脏页”。

(2)预写事务日志对性能的影响
WAL机制使事务日志的物理文件(一般扩展名为LDF)基本上一直处于一种连续的、小数据量的写入操作。数据页面的数据修改平时存放在内存的缓冲池中,只在某些时候(例如,遇到检查点)才被批量写入到磁盘。这种机制有助于提升数据库系统的性能。
(3)事务日志对可靠性的影响
即使数据文件损坏了,还可以在事务日志中找到其记录的历史事务,通过重做(redo)事务日志实现数据恢复。因此,事务日志有助于将数据丢失的风险降到最低。

本篇着重介绍将缓冲区的数据页写入到磁盘的两个过程:CheckPoint和Lazy Writer。 
     当事务遇到Commit时,仅仅是将缓冲区的所有日志页写入磁盘中的日志文件;而直到Lazy Writer或CheckPoint时,才真正将缓冲区的数据页写入磁盘文件。

CheckPoint:系统会按照恢复间隔 SQL Server 配置选项确定的间隔自动发出检查点。 Checkpoint 方法会立即发出检查点,而无论恢复间隔设置为何。

这个CheckPoint的间隔是一个服务器级别的参数。可以通过sp_config进行配置,也可以在SSMS中进行配置:

需要注意的是CHECKPOINT 权限预设会授予系统管理员 (sysadmin) 固定伺服器角色及 db_owner 與 db_backupoperator 固定资料库角色的成員,並不可加以转让。更短的恢复间歇意味这更短的恢复时间和更多的磁盘IO,而更长的恢复间歇则带来更少的磁盘IO占用和更长的恢复时间.

checkpoint的触发条件(深入了解checkpoint出发条件:checkpoint的误区

1. 自上次检查点后产生大量日志

2. 服务实例关闭

3. 数据库完整备份或差异备份(日志备份不会触发checkpoint)

4. 数据库恢复模式为简单恢复模式下当日志文件使用超过70%时

Lazy Writer:lazywriter是一个系统进程,其主要任务是成批刷新老化的脏缓冲区(指包含更改的缓冲区,这些更改必须写回磁盘,才能使该缓冲区由其它页重新使用),并使之可由用户进程使用。

lazywriter的触发条件

1. 缓存区内可用空闲缓存块数据不足

2. Windows系统内存压力

区别:

Checkpoint目的是减少数据库的恢复时间(服务奔溃或重启服务后的恢复),而Lazy writer的目的是保证SQL OS 有空闲缓存块和系统有一定可用内存。

Checkpoint和LazyWriter都会将缓冲区内脏页写入到磁盘;

LazyWriter会更新缓存区空闲可用列表,而checkpoint不会;

Checkpoint操作会被记录到数据库日志中,而lazywriter不会;

通过指定CheckPoint后的参数,SQL Server会按照这个时间来完成CheckPoint过程,如果时间指定的短,则SQL Server会使用更多的资源优先完成CheckPoint过程。

通常情况下,将“脏”页写入磁盘的工作,Lazy Writer要做的比CheckPoint会多出许多。

2.备份

  (1)完整备份    

完整备份包含了数据库中的所有数据,以及可以恢复这些数据的足够的日志(以便恢复到该备份的结尾)。
1. 备份的过程
(1)锁定数据库,阻塞所有的事务。
(2)在事务日志中放置一个标志1。
(3)释放数据库锁。
(4)提取数据文件的所有包含数据的数据页面,把它们写入备份设备。不包含数据的数据页面被跳过,因此备份的文件大小永远不会大于该数据库的数据文件。
(5)锁定数据库,阻塞所有事务。
(6)在事务日志中放置一个标志2。
(7)释放数据库锁。
(8)提取标志1与标志2之间的所有事务,把它们追加到备份中。

总结

本文简单介绍了WAL的概念和最终实现数据实际修改的两种方法。介绍了CheckPoint和Lazy Writer,同时对比了两种方法的机制和触发条件,这对我们将来进一步讲解事务日志的基本原理和恢复机制提供了良好的基础。

(2.4)备份与还原--WAL与备份原理的更多相关文章

  1. mysql备份与还原,增量备份;使用ibd和frm文件恢复数据

    主要用的:binlog.mysqldump.mysqlbinlog 参考: https://www.cnblogs.com/Cherie/p/3309456.html https://blog.csd ...

  2. Oracle 备份与还原

    oracle 备份与还原 一.备份数据库(exp) 1.完全备份 exp demo/demo@orcl buffer=1024 file=d:\back.dmp full=y demo:用户名.密码 ...

  3. [SQL SERVER 2005]数据库差异备份及还原

    因为之前遇到还原差异备份,最开始遇到SQLServer报错:”无法还原日志备份或差异备份,因为没有文件可用于前滚“.查阅很多资料后,终于得到解决.收集整理成这篇随笔. 问题原因:出现这种错误绝大多数是 ...

  4. SQL Server 备份和还原

    SQL Server 备份和还原   SQL Server 备份 恢复模式 SQL Server 数据恢复模式分为三种:完整恢复模式.大容量日志恢复模式.简单恢复模式. 完整恢复模式 默认的恢复模式, ...

  5. SQL Server 备份和还原全攻略

    原文:SQL Server 备份和还原全攻略 一.知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份, ...

  6. MySQL的备份与还原

    原文:MySQL的备份与还原 MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | c ...

  7. MySQL的备份与还原以及常用数据库查看命令

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serv ...

  8. sql server 备份与恢复系列四 大容量模式下的备份与还原

    一. 概述 在sql server 备份与恢复系列的第一篇里,有讲到大容量模式下备份与还原的相关知识.这篇重点来演示在大容量模式下常用的备份与还原模式“完整备份+差异备份+日志备份”. 在大容量恢复模 ...

  9. MySQL具体解释(20)-----------数据库备份和还原

    数据备份: 使用mysqldump命令备份 mysqldump命令能够讲数据库中的数据备份成一个文本文件. 表结果和表中的数据将存储在生成的文本中.mysqldump的工作原理非常easy. 他先查出 ...

随机推荐

  1. Datatable添加数据,提示该行已经属于另一个表的解决方法

    一.DataTable.Rows.Add(DataRow.ItemArray); 二.DataTable.ImportRow(DataRow) 三.设置DataTable的tablename,然后.R ...

  2. Android——Android Studio的一些小技巧(转)

    ndroid课程---Android Studio的一些小技巧   APK瘦身 在Android Studio中我们可以开启混淆,和自动删除没有Resources文件,来达到给APP瘦身的目的,这对于 ...

  3. nginx的 keepalive_timeout参数是一个请求完成之后还要保持连

    keepalive_timeout参数是一个请求完成之后还要保持连接多久,不是请求时间多久,目的是保持长连接,减少创建连接过程给系统带来的性能损耗,类似于线程池,数据库连接池. [root@web01 ...

  4. python的卸载方式和运行yum报错:No module named yum

    公司测试机环境不知道给我卸了什么包,导致yum运行报错状况: 系统版本:Red Hat Enterprise Linux Server release 6.2 (Santiago) 内核版本:2.6. ...

  5. php -- php的事务处理

    MYSQL的事务处理主要有两种方法. 1.用begin,rollback,commit来实现 begin 开始一个事务 rollback 事务回滚 commit 事务确认 2.直接用set来改变mys ...

  6. android从放弃到坚持放弃第二课(下)

    续第二课( 下) 续第二课 下 活动的生命周期 返回栈 活动状态 活动的生存期 体验活动的生命周期 活动被回收怎么办 活动的启动模式 standard singleTop singleTask sin ...

  7. uc 调试

    UC浏览器开发者版 目录[隐藏] 1 关于RI 2 准备工作 3 调试方式 相关下载 1 关于RI 目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机 ...

  8. 编程之美 set 17 拈游戏分析 (2)

    题目 有 N 块石头河两个玩家 A 和 B. A 先将石头分成若干堆, 然后按照 BABABA... 的顺序轮流取石块, 能将剩下的石头依次取光的玩家获胜. 每次取石头时, 每个玩家只能取一堆的 m( ...

  9. 剑指 offer set 21 圆圈中最后剩下的数字

    思路 1. 经典解法是用环形链表模拟圆圈, 然后每次减少一个节点. 时间复杂度为 o(mn), 空间复杂度为 o(n) 2. 转化成数学问题, 递推公式决定下一个元素. 时间复杂度为 o(n), 空间 ...

  10. OSG简单测试框架

    #include <osgDB/ReadFile> #include <osgDB/FileUtils> #include <osg/ArgumentParser> ...