博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 何时将“脏页”回写到硬盘
阅读量:7008 次
发布时间:2019-06-28

本文共 1430 字,大约阅读时间需要 4 分钟。

  SQL Server的工作原理:不能直接修改硬盘上的数据,而是先将数据从硬盘读入到内存的data cache,然后在内存中修改(被修改过的页称为脏数据页),最后再从内存回写到硬盘。下述进程都可能将脏页回写到硬盘。

一、Checkpoint(检查点)

  Checkpoint会搜索整个data cache,将脏页回写到硬盘。

  以下情况通常会触发checkpoint:

1、运行Checkpoint 命令。

2、使用alter database往数据库中添加了文件,或者从数据库中删除了文件。

3、备份数据库。在数据库备份之前,数据库引擎会自动执行检查点,以便在备份中包含对数据库数据页面的全部更改。

4、正常关闭SQL Server,并且不使用NOWAIT选项。

5、SQL Server预计的恢复时间超过了恢复间隔(recovery interval)。该值默认为0,即由SQL Server自动配置,一般为1分钟。一般情况下,按最低每分钟10MB日志进行设计。

  以下特殊情况也会触发checkpoint:

1、当恢复模式为简单时,如果日志文件的空闲空间低于70%。例外的情况是:如果日志文件是由于一个事务长时间执行而且尚未结束(意味着没有空间可释放)导致空闲空间低于70%,则不会触发checkpoint。

2、当恢复模式为大容量日志时,对数据库做了一个大容量操作。

  checkpoint对数据库的影响:

1、当数据库重启时,SQL Server将从checkpoint 完成的这个时间点开始恢复,即在此之后做redo(前滚)。这种机制加速了恢复的进度。

2、当恢复模式为简单时,checkpoint在把脏页回写到硬盘后,就去截断日志(将VLF的状态从2改为0)。

二、Lazywriter(惰性编辑器)

  SQL Server为每一个NUMA(非一致性内存访问)配备一个Lazywriter线程。Lazywriter被定期唤醒后,就去扫描与NUMA节点中的data cache,检查自由列表(free list)。如果列表的大小低于某个阀值(这个阀值取决于data cache的总大小)意味着内存压力,Lazywriter就去扫描data cache,将其中一些页标记到自由列表,表示这是空闲内存;如果这些页中有脏页,就回写到硬盘。

  当Lazywriter察觉到系统有内存压力时,它会增加或减少自由列表上的数据页,使操作系统的可用物理内存保持在4.8~5.2MB,以防止分页。

  Lazywriter自SQL Server 2005被引入。它与checkpoint的主要区别:checkpoint不会去修改自由列表。

  这是一个周期运行的线程,默认情况下,每隔一秒钟运行一次。

三、Worker Thread(工作线程)

  SQL Server 启动时,同时启动30~40个工作线程,用于完成客户端连接提出的各种操作请求。当客户端连接增加时,SQL Server会自动启动新的工作线程。当某个工作线程空闲15分钟,就会被关闭;当空闲内存不够时,某些工作线程也会被关闭(x86环境)。在x86环境,每个工作线程至少占用0.5MB内存;在x64环境,每个工作线程至少占用2MB内存。

  当worker线程察觉内存压力时,它会扫描data cache,把一段时间内未被访问的数据页添加到自由列表;如果这些页中有脏页,就回写到硬盘。

转载地址:http://bmvtl.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
WordPress内外网访问的问题解决
查看>>
centos: 建立git账户
查看>>
Maven|项目命令
查看>>
python filter, map, 和reduce
查看>>
memcached 异常 : 单数据项超过默认值1m
查看>>
mysql创建登录报错ERROR1045(28000)
查看>>
virtualbox(windows环境下)centos虚拟机安装增强工具
查看>>
BZOJ2325[ZJOI2011]道馆之战——树链剖分+线段树
查看>>
MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
查看>>
LAMP简单架构实验:Apache+NFS+MySQL
查看>>
ll命令
查看>>
Linux操作系统68问(下)
查看>>
Windows2008R2跨林迁移用户、计算机(6)
查看>>
Linux怎么添加图形界面组件
查看>>
POJ_1001 Exponentiation
查看>>
邮件附件在线预览——HTML Filter
查看>>
PC桌面右下方QQ托盘图标
查看>>
jenkins执行启动java程序后,会杀掉程序的解决方法
查看>>
日志审计
查看>>