众所周知,SQLServer增删改 数据 最先都是在 内存 中进行的,这可以大大加快 数据 操作的速度;当 内存 中的 数据 被修改了,而 磁盘 中的 数据 还没有被修改时,就产生了所谓的脏页,SQLServer是如何同步 内存 和 磁盘 的 数据 的呢?以下三种 方法 就是为
众所周知,SQLServer增删改 数据 最先都是在 内存 中进行的,这可以大大加快 数据 操作的速度;当 内存 中的 数据 被修改了,而 磁盘 中的 数据
还没有被修改时,就产生了所谓的]脏页[,SQLServer是如何同步 内存 和 磁盘 的 数据 的呢?以下三种 方法 就是为同步 内存 和 磁盘 数据 而产生的。
LazyWrite(惰性 写入 器):
作用:
1.管理SQLServer空闲 内存 :
a. 定期检查空闲缓冲列表的大小,当这个值过低的时候,它会扫描整个 数据 缓存,将一段时间没有使用的页面老化(通过LRU算法),释放 内存 空间;
b. 如果找到一段时间没有被使用的脏页,它会将其 写入 磁盘 ,然后将这个页面的 内存 空间标记为空闲空间;
2.协调Windows与SQLServer 内存 :
a. 监视服务器 内存 ,如果Windows物理 内存 很少,它会从空闲缓冲列表中释放 内存 给Windows;
b. 在SQLServer负载很重时,它还会在分配给SQLServer的 内存 没有达到最大服务器 内存 阀值时,增加空闲缓冲列表的大小,以适应负载的需要。
CheckPoint:
作用:检查点是检查点进程创建的一个时间点,在这个时间点,SQLServer可以确认所有提交的事物所做的修改都已经 写入 磁盘 ,它是一个标记,
这个标记是 数据 库恢复的起始点,大约每分钟运行一次,这样在启动 数据 库时,确保 数据 库在一分钟内就能完成恢复操作;但是如果在这段
时间内 写入 日志的 数据 不到10MB,SQLServer就不会自动发起检查点。
跟踪标记(trace flag)3502在错误日志中记录检查点的开始和结束位置。
与LazyWrite 比较 ,CheckPoint不会从缓存中移出脏页,CheckPoint进程的工作只是保证脏页被 写入 磁盘 ,并且在页头将缓存中的这个页面标记为
干净的页面。
EagerWrite:
通常在BCP、SELECT INTO, WRITETEXT,UPDATETEXT,BULK INSERT等操作时发生,为了加快这些操作的速度,EagerWrite会管理 数据 页
的创建和分配,这些操作不会等待所有的页面创建完成后才将 内存 中的 数据 写入 到页面中,而是以更高的优先级边创建边将缓存中的 数据 写入 页面中,
以保证缓冲池有足够的空间来完成这些操作。
查看更多关于SQLServer内存数据写入磁盘的方法比较的详细内容...