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是内存达到一个临界值的时候自动发生,确保缓存的使用,而检查点则不关心缓存用了多少,而是自动发生.
posted @ 2016-04-18 12:05  M哥  阅读(1783)  评论(0编辑  收藏  举报