众所周知,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会管理数据页的创建和分配,这些操作不会等待所有的页面创建完成后才将内存中的数据写入到页面中,而是以更高的优先级边创建边将缓存中的数据写入页面中,以保证缓冲池有足够的空间来完成这些操作。
,美国空间