第九章 进程结构

上传人:pu****.1 文档编号:558425099 上传时间:2022-12-01 格式:DOCX 页数:16 大小:142.31KB
返回 下载 相关 举报
第九章 进程结构_第1页
第1页 / 共16页
第九章 进程结构_第2页
第2页 / 共16页
第九章 进程结构_第3页
第3页 / 共16页
第九章 进程结构_第4页
第4页 / 共16页
第九章 进程结构_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《第九章 进程结构》由会员分享,可在线阅读,更多相关《第九章 进程结构(16页珍藏版)》请在金锄头文库上搜索。

1、第九章 进程结构9、进程结构这一章论述了 Oracle数据库系统的进程和Oracle系统的可用的不同配置。这一章包含下列主题:进程介绍用户进程概述 Oracle进程概述共享服务器架构专用服务器配置程序接口进程介绍所有连接Oracle的用户都运行两个模块的代码来访问一个Oracle数据库实例: 应用程序或Oracle工具:数据库用户可以使用数据库应用程序(例如预编译程序) 或者Oracle工具(如SQL Plus),这些工具将SQL发布给Oracle数据库。 Oracle数据库服务代码:每个用户后面都有Oracle数据库代码执行,它负责解析 和处理应用程序的SQL语句。这些代码模块通过进程运行。

2、一个进程是“线程控制器”或者操作系统中的可以运行一 系列步骤的机制。(某些操作系统使用job或者task这种概念)一个进程通常在它自己的 私有内存空间运行。多进程Oracle系统多进程Oracle(也叫做多用户Oracle)使用服务器进程来运行Oracle代码的不同部分, 使用额外的进程为用户服务(每个连接用户对应一个进程或者多个用户共享一个或多个进 程)。大多数数据库系统都是多用户的,因为一个数据库的一个主要优点就是同时为多个用 户管理数据。Oracle实例的每个进程执行特定的工作。通过将Oracle和数据库应用程序的工作分成 多个进程,多用户或者多个应用程序可以同时连接一个数据库实例,而系

3、统保持优秀的性能。进程类型一个Oracle系统的进程可以分为两个主要的组: 用户进程运行应用程序或者Oracle工具代码 Oracle进程运行Oracle数据库服务代码。它们包括服务器进程和后台进程。 进程结构针对不同的Oracle配置、不同的操作系统和Oracle附件的选择都会有所不同。连接用户的代码可以配置为共享服务器或者专用服务器。在专用服务器情况下,对每个用户来说,数据库应用程序运行的进程(用户进程)和Oracle数据库服务器代码运行的进程(专用服务器进程)不同。在共享服务器下,数据库应用程序运行在和Oracle数据库代码不同的进程上(用户进 程)。每个运行Oracle服务器代码的服务

4、器进程(共享服务器进程)可以对多个用户进程 服务。图9-1显示了一个专用服务器配置。每个连接用户都有一个单独的用户进程,多个进程 运行在Oracle后台。图9-1 一个Oracle实例User图9-1可以描述多个并发用户在同一个计算机上运行一个应用程序(Oracle)。这个特定的配置通常在大型机或微型机上出现。用户进程概述当一个用户运行一个应用程序(例如Pro*C程序)或者一个Oracle工具(比如企业管 理器或者SQL *Plus), Oracle创建一个用户进程来运行用户的应用程序。连接和会话连接和会话跟用户进程紧密联系,但含义上也有不同。连接是用户进程和Oracle实例之间的连接通道。一

5、个连接通道使用进程间通讯机制(在 一台计算机上同时运行用户进程和Oracle)或者网络软件(当数据库应用程序和Oracle运 行在不同的机器上通过网络连接)。一个会话是一个用户通过用户进程到Oracle实例的特定连接。例如,当用户启动SQL *Plus,用户必须提供一个有效用户名和密码,然后会为那个用户创建一个会话。一个会话 从用户连接时开始,用户中断连接或者退出数据库应用程序时终止。多个会话可以通过使用同一个用户名密码的用户创建和并发存在。例如,一个用户使用 SCOTT/TIGER的用户名密码来可以多次连接同一个Oracle实例。不使用共享服务器的情况下,Oracle为每个用户会话创建一个服

6、务器进程。但是,在 共享服务器下,多个用户会话可以共享一个服务器进程。Oracle进程概述这部分描述了运行Oracle数据库服务器代码的两类进程(服务器进程和后台进程)。 它还描述了跟踪文件和警告文件,这些文件记录了 Oracle进程的数据库事件。服务器进程Oracle创建服务器进程来处理连接到这个实例的用户进程的请求。在应用程序和Oracle运行在一台机器的情况下,可以将用户进程和对应的服务器进程合并来降低系统开 销。但是,当应用程序和Oracle在不同的计算机上运行时,用户进程总是通过不同的服务 器进程连接Oracle。为每个用户应用程序创建的服务器进程(或者合并的用户/服务器进程的服务器

7、部分) 可以执行下列任务: 解析和运行应用程序发布的SQL语句 如果SGA中不存在一些数据块的数据,服务器进程会从磁盘上的数据文件读取必要 的数据块到SGA的共享服务器缓存中。 以应用程序可以处理的信息方式返回结果。后台进程为获得最高的性能和适应多用户,一个多进程Oracle系统使用一些叫做后台进程的额 夕卜Oracle进程。一个Oracle实例可以有很多后台进程;但不是所有的都必须存在。后台进程数量很多。 查看视图V$BGPROCESS可以得到关于后台进程的信息。一个Oracle实例中的后台进程可以 包含下列进程:数据库写入进程(Database Writer Process, DBWn)

8、日志写入进程(Log Writer Process, LGWR)检查点进程(Checkpoint Process, CKPT)系统监视进程(System Monitor Process, SMON)进程监视进程(Process Monitor Process, PMON)恢复进程(Recoverer Process, RECO)任务队列进程 Job Queue Processes)归档进程(ARCn)队列监控进程(Queue Monitor Processes, QMNn)其他后台进程在许多操作系统上,后台进程在实例启动时自动创建。图9-2显示了每个后台进程如何和Oracle数据库的不同部分交

9、互,下一部分会描述每 个进程。图9-2多进程Oracle实例的后台进程RECOPMCNSMONSystem Global AreaDatabaseBuffer CacheUserHrocessUser ProcessesShared ServerProcessDedicated Serv&r ProcessDOOORECORecove ner processPMONProcess nonitorSMONSystem moniforCKPTCheckpointARCOArchiverDBWODatibaae writerLGWALog writerD000Dispatcher ProcessLo

10、gend:ARCOCKPTProcessDBWOL GWRDatafilesRedo Log数据库写入进程(Database Writer Process,DBWn)数据库写入进程(DBWn)将缓存中的条目写入数据文件。DBWn进程的责任是将数据库 高速缓存中修改的(脏)缓存写入磁盘。虽然一个数据库写入进程DBW0)对于大多数系统 都足够了,但是如果你的系统数据修改的压力很大,你可以配置额外的进程(DBW1到DBW9 和DBWa到DBWj)来提供写入性能。这些额外的DBWn进程对于单处理器系统来说没什么用 处。当数据库高速缓存的一段缓存修改时,它就被标识为“脏”的。一个“冷”缓存是根据 LRU

11、 (最近最少使用)机制最近没有使用的一段缓存。DBWn进程将冷的、脏的缓存写入磁盘, 所以用户进程能够找到可以使用的冷的、清理的缓存来读取新的块到高速缓存中。随着用户 进程不停的弄“脏”缓存,空闲缓存的数量会减少。如果空闲缓存的数量下降的太多,用户 进程就不能找到新的空闲缓存来从磁盘上读取块到高速缓存中。DBWn管理高速缓存,所以 用户进程总能找到空闲的缓存。通过写入“冷”、“脏”缓存到磁盘,DBWn提高了查找空闲缓存的性能,并在内存中 保持了最近使用的缓存。例如,经常访问的小表或索引的一部分块都保存在高速缓存中,所 以它们不需要从磁盘重新读入。LRU机制确保了最常访问的块保存在高速缓存中,所

12、以当一 个缓存写入磁盘,它一般不包括最近经常使用的数据。初始化参数DB_WRITER_PROCESSES指定了 DBWn进程的数量。最大的DBWn进程数量为 20。如果用户在启动时没有指定这个参数,Oracle根据CPU和处理器组的数量来设置 DB_WRITER_PROCESSES 参数。DBWn进程在下列情况下将“脏”缓存写入磁盘: 当一个服务器进程搜索了极限数量的缓存也没有找到干净可用的缓存之后,它发信 号给DBWn来写入。DBWn异步的将脏缓存写入磁盘,同时不影响其他进程执行。 DBWn定期写入缓存来推进检查点(checkpoint),检查点是实例恢复时重做日志 的开始位置。这个日志位置

13、由高速缓存中的最旧的“脏”缓存决定。在所有的情况下,DBWn执行批量(多块)写入来提供效率。多块写入的块数量因操作 系统而异。日志写入进程(Log Writer Process,LGWR)日志写入进程(LGWR)的职责是重做日志缓存管理:将重做日志缓存写入到磁盘的重做 日志文件中。LGWR将上次写入以来已经拷贝到缓存中的所有重做条目写入重做日志文件。重做日志缓存是一个循环缓存。当LGWR将重做日志缓存的重做条目写入重做日志时, 服务器进程可以在已经写入到磁盘的重做日志缓存的条目上拷贝新的条目。LGWR通常写入 速度很快,即使在重做日志访问很繁忙的情况,也可以确保总有新的缓存空间来容纳新的条 目

14、。LGWR将缓存中的一段连续部分写入磁盘。LGWR在下列情况下写入磁盘:当用户进程提交一个事务产生了提交记录重做日志缓存每3秒钟当重做日志缓存1/3满时当一个DBWn进程在需要时将修改的缓存写入磁盘时注意:在DBWn写入修改的缓存到磁盘之前,所有缓存修改的相关重做日志必须写入到 磁盘(先写入协议)。如果BWn发现某些重做记录没有写入磁盘,它会fGWR发信号要求 LGWR将重做记录写入磁盘,并且等待LGWR将重做日志缓存完全写入磁盘之后DBWn才将数 据缓存写入到磁盘。LGWR同时写入镜像组的重做日志文件。如果组中的一个文件损坏或者不可用,LGWR继 续写入到组的其他文件中,并在LGWR跟踪文件

15、和系统警告文件中记录一个错误日志。如果 组内的所有文件都损坏了,或者因为组还没有被归档导致组不可用,LGWR就不能继续发挥 作用。当用户发布一个COMMIT语句,LGWR在重做日志缓存中放入一个提交记录,并立即将它 和事务重做条目写入到磁盘中。数据块的对应的改变会在以后写入效率较高的时候再写入。 这叫做快速提交机制。将包含事务提交记录的重做条目写入磁盘是个原子操作,它代表着事 务已经提交。Oracle会返回一个事务成功提交的代码,虽然缓存的数据还没有写入到磁盘。注意:有时候,如果需要更多缓存空间LGWR会在一个事务提交之前写入重做日志条 目。这些条目只有在事务以后提交的时候才是持久性的。当一个用户提交一个事务,事务会被分配一个系统修改号(system change number, SCN),SCN和事务重做条目一起写入到重做日志中。SCN记录在重做日志中,所以恢复操作可以在 真正应用集群(RAC)和分布式数据库中同步。在系统非常活跃时,LGWR可以使用组提交的方式写入重做日志文件。例如,假设一个 用户提交一个事务。LGWR必须将事务重做条目写入到磁盘,但同时,另一个用户也发布

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号