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

2008年(239)

我的朋友

分类: Oracle

2008-06-18 00:18:29

用户请求处理时的内存使用

在第2.1一节中,我们通过用户请求的处理过程,说明数据库系统包含那些进程模块。这里,我们仍旧使用这个例子,来说明数据库系统内存空间的使用。

1)首先,数据库系统启动的所有进程模块,都需要一块内存空间,存放它的执行代码、堆栈、控制信息等,这块内存空间称为进程缓冲区。代理进程由于需要建立和客户端应用程序的连接,接收和处理用户请求并返回处理结果,因此它的进程缓冲区还需要另外的内存空间,存放用户会话信息,进行数据的排序操作等。

2)代理进程接收到用户请求,在请求被处理之前需要将SQL语句交给优化器进程,进行以下的处理:

语法分析。根据表、索引、视图等数据库对象的定义,检查SQL语句是否存在语法错误。

授权检查。根据数据库系统中的授权信息,决定用户是否有权限执行该SQL语句。

生成执行计划。根据数据库对象上的统计信息,生成该SQL语句费用最低的执行计划。

所有这些要查询的信息存放在数据库的数据字典中。由于数据库系统经常需要访问这些数据,因此系统启动时需要创建一块内存空间,存放这部分数据。这块内存空间被称为数据字典缓冲区。

3)优化器进程在生成SQL语句的执行计划后,可以将该执行计划存放在内存缓冲区中。这样在下一次重新执行该SQL语句时,就不用再次进行分析、优化,提高了用户请求的处理速度。这样的一块内存空间被称为SQL语句缓冲区。

4)代理进程执行用户请求,首先要将相关用户数据读入内存,在内存中完成查询、更新处理、生成各种汇总信息等,所有被更新数据最后由页清除进程写入磁盘。这部分内存空间被称为用户数据缓冲区,在整个系统的内存空间中要占用最大的份额,对系统性能的好坏有着重要的影响。

5)由于数据库中数据为多个用户所共享,可能有多个用户要访问相同的数据。为了保证数据的完整性,任何用户请求在被处理之前,都要根据执行的内容对数据加相应的锁。存放锁的内存空间被称为锁表缓冲区。

6)数据库以事务的方式处理用户请求,所有的处理都要产生日志,这些日志信息最先放置在内存中,最后由日志写进程写入磁盘。存放日志信息的内存空间被称为日志缓冲区。

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