• sqlserver内存管理之lazy writer


      任何在缓冲区被修改的页都会被标记为“脏”页。将这个脏页写入到数据磁盘就是CheckPoint或者Lazy Writer的工作.前面就大体说了一下checkpoint,这会就简单的理解一下这个lazy writer.

        Lazy Writer存在的目的是对缓冲区进行管理。当缓冲区达到某一临界值时,Lazy Writer会将缓冲区内的脏页存入磁盘文件中,而将未修改的页释放并回收资源。
    我们知道,当执行一条语句的时候
    比如:
    begin  tran
            insert  into table_name(age)  values(1111)
    commit  
    --rollback

    暂且分析一下语句的执行过程

    1:begin train写入缓冲区的日志
    2:缓冲区日志写入操作
    3:将数据插入到缓冲区修改页
    4:缓冲区日志写入commit
    5:提交到事务日志
    当commit提交事物的时候,sqlserver的预写机制是先将操作写入事务日志(上一篇文章关于这块还是写的有错的,因为事务日志是commit的时候提交到日志文件的,所以说缓冲区是不存在事务日志的操作的,也就是说checkpoint和lazy writer发生的时候,只会将脏页写入到MDF文件当中)
    下面搬一张宋大神的图来看一下,稍作修改,很直观:
     
    4:sqlserver内存管理之lazy <wbr>writer
    下面主要列举一下检查点和懒惰写之间的差别,其实这些差别已经是众所周知了,但是我们还是列举一下两者之间的区别供大家学习一下:
    Checkpoint和lazyWriter都会将缓冲区内脏页写入到磁盘;
    lazywriter会更新缓存区空闲可用列表,而checkpoint不会;
    checkpoint操作会被记录到数据库日志中,而lazywriter不会;
    lazywriter是内存达到一个临界值的时候自动发生,确保缓存的使用,而检查点则不关心缓存用了多少,而是自动发生.
  • 相关阅读:
    设计模式一 Simple Factory, Factory Method, Abstract Factory以及Builder模式简述
    SQL Server中对XML操作
    开发常用小工具介绍
    强制休息程序 EyeGuardian 眼睛守护者 Beta测试版
    定时计划任务方案比较以及通过脚本创建计划任务(SchTasks命令)
    在Myeclipse中配置Maven
    Jena的环境配置
    0x01_go代码简单示例
    0x00_go语言安装
    信息收集工具
  • 原文地址:https://www.cnblogs.com/shengdimaya/p/5403931.html
Copyright © 2020-2023  润新知