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

2008年(239)

我的朋友

分类: Oracle

2008-06-18 00:29:06

日志写进程

日志写进程负责将内存缓冲区中的事务日志信息写入磁盘,在系统需要写日志信息到磁盘时被激活。

数据库系统以事务的方式操作数据库中的数据,用户请求以一个个的事务形式被提交。事务中的所有操作要么都执行,要么都不执行。事务中的任何更新操作都会产生相关的日志信息,以便于事务的回退、系统的恢复。有关事务、数据库日志的详细信息,可参看第67两章。

事务产生的日志信息最初存放在内存缓冲区中,然后由日志写进程写入磁盘。在数据库系统中,下列操作或者事件会激活日志写进程:

1)事务或者一组事务被提交。

2)检查点进程执行。

3)页清除进程将脏数据写入磁盘,和脏数据有关的日志仍旧在内存中。

4)内存中日志缓冲区满或者使用率达到已设定的百分比。

5)日志文件切换。当前使用的日志文件已写满,系统开始使用下一个日志文件。

在现有的数据库系统中,日志写进程可以采用以下两种方式,执行日志信息的磁盘写操作:

1)事务提交前必须将日志信息写入磁盘

这种方式,要求一个事务的所有操作在执行完成后,和事务相关的所有日志信息必须写入磁盘,事务才能正常完成,客户端应用程序才会收到返回信息。这种方式保证了所有已提交事务的日志信息都已经保存在可永久存储的设备上。这样,一旦系统出现故障,可以使用日志信息重做所有已经提交的事务,不会丢失事务的处理。

在交互式的联机事务处理环境中,数据库系统要同时处理很多的事务,每一个事务都必须等待其日志信息写入磁盘之后,才能提交。由于不停地对磁盘进行I/O操作,这不但影响了系统性能,而且降低了用户处理的响应时间。另外,在交互式处理环境中,事务一般比较小,产生的日志信息也较少,而内存中的数据是以页为单位向磁盘中写(UNIX平台:页尺寸为4K WINDOWS平台:页尺寸为2K),这样每一页中将会有很多剩余空间,从而造成磁盘存储空间的浪费。

2)事务提交前不要求将日志信息写入磁盘

使用这种方式,一个事务在所有操作执行完成后就进行提交,客户端应用程序就会收到返回信息,和事务相关的所有日志信息仍旧存放在内存缓冲区中。数据库系统不断检查已经提交的事务数目,如果达到设定的数值,或者存放日志信息的内存空间使用率达到已设定的百分比,日志写进程就开始将日志信息写入磁盘。

这种日志处理方式,在交互式的联机事务处理环境中,避免了不停地对磁盘进行I/O操作,既提高了系统性能、用户处理的响应时间,又可以节省磁盘空间。但美中不足的是,一旦系统崩溃,存放在内存缓冲区、还没有写到磁盘中的事务日志就要丢失,从而就造成和这些日志相关、已提交事务的丢失,系统不会自动进行恢复。在这种情况下,系统维护人员必须和业务处理人员一同进行人工检查,发现并重新执行那些丢失的事务。

由于日志写进程顺序地访问磁盘,而且大多数情况下是由内存向磁盘上写入日志信息,这和数据库中其它数据的磁盘随机访问,有着明显的区别。因此将日志信息和数据库的其它数据分开存放在不同的磁盘上,避免两种访问方式之间的互相影响,将有助于提高系统的性能。这一点,对采用事务提交前必须将日志信息写入磁盘的数据库应用系统,尤其有用。

阅读(922) | 评论(0) | 转发(0) |
0

上一篇:2.2.6 检查点进程

下一篇:2.2.4 页清除进程

给主人留下些什么吧!~~