2008年(239)
分类:
2008-06-18 00:29:47
页清除进程负责将内存缓冲区中已经被更新的数据页写入磁盘,在系统需要将这些已更新数据写入磁盘时被激活。系统通过页清除进程,使已发生的更新做永久性的保存,同时释放被占用的内存空间。
数据库系统要处理大量的事务,在事务执行完成、被提交后,已经发生更新的数据仍旧存放在内存缓冲区中,并不会立即被写入磁盘。这主要是基于以下的考虑:
(1)最近被访问的数据,很大可能会再次被访问。
(2)减少磁盘的I/O读写,提高系统性能,提高用户请求的响应速度。
然而这些脏数据又不能无限期地积累、存放在内存中,主要是因为:
(1)内存空间是有限的。新的事务处理需要使用空间,存放要处理的数据。
(2)内存中的脏数据页没有写入磁盘,就没有得到永久性的确认。一旦系统崩溃,所有这些更新将全部丢失。
因此,内存中的脏数据页在达到一定的限制后,需要写入磁盘,使这些更新得到永久确认,进而释放内存空间。这些工作就是由页清除进程完成的。页清除进程并不是一直处于活动状态,下列操作或者事件会激活页清除进程的处理:
(1)检查点操作发生时。检查点操作执行时,要将内存中所有更新写入磁盘,这时检查点进程发信号激活页清除进程,由页清除进程将内存中的所有更新写入磁盘。
(2)内存中已被更新的数据量达到系统设定的阀值。数据库系统不断监测内存中数据的更新,一旦内存中脏数据页的数量达到预先设定的阀值,就激活页清除进程,由页清除进程将内存中的更新写入磁盘。
(3)没有足够的空闲空间存放数据。代理进程在处理事务时,首先检查要处理数据是否在内存中。如果要处理数据不在内存中,就要将这些数据读入内存。这时代理进程会搜索内存空间,寻找可用的内存页。在没有找到足够可用空间的情况下,就发信号激活页清除进程,将内存中的更新写入磁盘,从而释放被占用的空间。
任何数据库系统都采取前写日志的方法,即被更新数据从内存写入磁盘之前,和这些更新有关的日志信息必须已经写入磁盘。因此,页清除进程在写已更新数据到磁盘之前,要检查相关的日志信息。如果这些日志信息仍旧存放在内存缓冲区中,就发信号、激活日志写进程,然后等待。在日志写进程完成处理后,页清除进程才会继续处理。
在有大量数据更新的系统运行环境中,可以根据需要,启动多个页清除进程,来加快数据往磁盘上的写速度。