Chinaunix首页 | 论坛 | 博客
  • 博客访问: 435463
  • 博文数量: 239
  • 博客积分: 8010
  • 博客等级: 中将
  • 技术积分: 2431
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-02 21:12
文章分类
文章存档

2008年(239)

我的朋友

分类:

2008-06-18 00:29:47

页清除进程

页清除进程负责将内存缓冲区中已经被更新的数据页写入磁盘,在系统需要将这些已更新数据写入磁盘时被激活。系统通过页清除进程,使已发生的更新做永久性的保存,同时释放被占用的内存空间。

数据库系统要处理大量的事务,在事务执行完成、被提交后,已经发生更新的数据仍旧存放在内存缓冲区中,并不会立即被写入磁盘。这主要是基于以下的考虑:

1)最近被访问的数据,很大可能会再次被访问。

2)减少磁盘的I/O读写,提高系统性能,提高用户请求的响应速度。

然而这些脏数据又不能无限期地积累、存放在内存中,主要是因为:

1)内存空间是有限的。新的事务处理需要使用空间,存放要处理的数据。

2)内存中的脏数据页没有写入磁盘,就没有得到永久性的确认。一旦系统崩溃,所有这些更新将全部丢失。

因此,内存中的脏数据页在达到一定的限制后,需要写入磁盘,使这些更新得到永久确认,进而释放内存空间。这些工作就是由页清除进程完成的。页清除进程并不是一直处于活动状态,下列操作或者事件会激活页清除进程的处理:

1)检查点操作发生时。检查点操作执行时,要将内存中所有更新写入磁盘,这时检查点进程发信号激活页清除进程,由页清除进程将内存中的所有更新写入磁盘。

2)内存中已被更新的数据量达到系统设定的阀值。数据库系统不断监测内存中数据的更新,一旦内存中脏数据页的数量达到预先设定的阀值,就激活页清除进程,由页清除进程将内存中的更新写入磁盘。

3)没有足够的空闲空间存放数据。代理进程在处理事务时,首先检查要处理数据是否在内存中。如果要处理数据不在内存中,就要将这些数据读入内存。这时代理进程会搜索内存空间,寻找可用的内存页。在没有找到足够可用空间的情况下,就发信号激活页清除进程,将内存中的更新写入磁盘,从而释放被占用的空间。

任何数据库系统都采取前写日志的方法,即被更新数据从内存写入磁盘之前,和这些更新有关的日志信息必须已经写入磁盘。因此,页清除进程在写已更新数据到磁盘之前,要检查相关的日志信息。如果这些日志信息仍旧存放在内存缓冲区中,就发信号、激活日志写进程,然后等待。在日志写进程完成处理后,页清除进程才会继续处理。

在有大量数据更新的系统运行环境中,可以根据需要,启动多个页清除进程,来加快数据往磁盘上的写速度。

阅读(940) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~