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

2008年(239)

我的朋友

分类:

2008-06-18 00:33:00

用户请求的处理过程

在了解数据库系统各进程模块的功能之前,我们首先要明白系统有那些进程,这些进程又是如何协同处理的。这可以通过系统对用户请求的处理过程来简单说明,其处理过程可见图2-1

 

 

客户端应用程序在能够访问数据库中的数据之前,必须要建立和数据库系统的连接,这是通过图2-1中的第1到第3步完成的。

1)监听进程接收到来自客户端应用程序的连接请求。

2)监听进程选定一个代理进程,将连接请求交给该代理进程处理。

3)代理进程建立和客户端应用程序的连接。

在建立和数据库系统的连接后,用户就可以通过客户端应用程序发出处理请求。代理进程在处理前,需要优化器进程对SQL语句进行语法分析和优化处理。

4)代理进程接收到客户端应用程序的请求,将请求交给优化器进程处理。

5)优化器进程分析、优化SQL语句,生成最终的执行计划,返回代理进程。

代理进程开始处理请求。在处理时,要求所操作数据处于内存中。如果需要处理大批量的数据(例如:通过表扫描查询数据),异步预取进程被激活,将代理进程随后需要的数据事先读入内存,这样可以保证代理进程进一步处理数据时,这些数据已经处于内存中,避免代理进程再次的、直接的I/O处理,从而提高了请求的处理效率。

6)代理进程发出I/O请求,将当前所需数据读入内存。

7)异步预取进程被激活,将随后需要的数据事先读入内存。

在代理进程、异步预取进程读数据到内存中时,系统发现内存中没有空闲的、可替代的空间。也就是说,内存中的所有空间都写满了数据,这些数据已经被更新过。在代理进程、异步预取进程能够读数据到内存中之前,需要将内存中已更新的数据必须写入磁盘,以释放空间。

8)页清除进程被激活,将内存中已更新数据写入磁盘。

数据库系统使用前写日志原则,在内存中的更新数据被写入磁盘之前,和这些更新相关的日志信息需要首先从内存写入磁盘。

9)页清除进程发信号给日志写进程,日志写进程完成内存中日志信息到日志文件的写操作。

在日志写进程完成后,页清除进程继续处理,内存中被修改的数据写入磁盘,内存空间得到释放。

在得到可用的内存空间后,代理进程、异步预取进程将所需数据读入内存。然后代理进程开始处理数据。

在代理进程完成处理之前,死锁检测进程、检查点进程时间间隔到。

10)死锁检测进程时间间隔到。死锁检测进程查看代理进程拥有的资源,检查是否由于资源竞争而引起多个代理进程之间的死锁。如果发现死锁,就采取相关算法,解除死锁。

11)检查点进程时间间隔到。检查点进程阻断所有的代理进程,将内存中的日志信息、已更新的数据全部写入磁盘,在日志文件中记入检查点信息。

代理进程完成请求处理,提交事务,释放相关资源。

12)代理进程将结果返回客户端应用程序。

以上展示了系统对一个客户端用户请求的处理过程,其目的在于说明数据库系统拥有那些进程以及它们如何工作。在实际的用户请求处理过程中,一般不会按照这个顺序执行。例如:代理进程在处理请求时,内存中已经存在要执行SQL语句的执行计划,不再需要分析、优化;所需数据已经读入内存,不需要磁盘的I/O操作;异步预取进程读数据到内存时,内存中存在满足需要的空闲空间,不需要页清除进程进行内存空间的释放;代理进程在处理过程中,死锁检查进程和检查点进程没有被激活,等等。

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