点击蓝字
关注我们
Oracle DB服务器体系结构
Oracle DB服务器体系结构包含以下三种主要结构:内存结构、进程结构和存储结构。基本的Oracle DB系统由Oracle DB和数据库实例组成。数据库包括物理结构和逻辑结构。由于物理结构和逻辑结构是分开的,因此管理数据的物理存储时不会影响对逻辑存储结构的访问。实例由与该实例关联的内存结构和后台进程构成。每当启动一个实例时,都会分配一个称为系统全局区(SGA)的共享内存区,并启动后台进程。进程是在计算机的内存中运行的作业。进程被定义为操作系统中可运行一系列步骤的“控制线程”或机制。启动数据库实例后,Oracle软件会将该实例与特定数据库相关联。该操作称为“装载数据库”。之后用户可以打开数据库,即授权用户可以对其进行访问。
注:Oracle自动存储管理(ASM)在管理内存和进程组件时使用实例概念,不与特定数据库关联。
进程结构
进程体系结构 Oracle DB系统中的进程可以主要分为三组:• 运行应用程序或Oracle工具代码的用户进程。• 运行Oracle DB服务器代码的Oracle DB进程(包括服务器进程和后台进程)。• 非特定于单个数据库的Oracle守护程序和应用程序进程。当用户运行应用程序或Oracle工具(如SQL*Plus)时,将使用术语“用户进程”来指代用户的应用程序。用户进程可以位于 数据库服务器计算机上,也可以不位于该计算机上。Oracle DB还会创建“服务器进程”以执行该用户进程发出的命令。此外,Oracle服务器还为一个实例提供了一组“后台进 程”。这些进程不仅彼此交互,还与操作系统交互,以便管理内存结构,异步执行I/O将数据写入磁盘,并执行其它需要完 成的任务。对于不同的Oracle DB配置,进程结构也有所不同,具体取决于操作系统和选择的Oracle DB选件。已连接用户的 代码可以配置为专用服务器或共享服务器。• 专用服务器:对于每个会话,运行数据库应用程序的用户进程都由执行Oracle DB服务器代码的专用服务器进程提供服 务。• 共享服务器:不必为每个连接都提供一个专用服务器进程。分派程序会将多个传入网络会话请求定向到共享服务器进 程池。共享服务器进程为所有客户机请求提供服务。
进程结构 服务器进程 Oracle DB创建服务器进程以处理连接到实例的用户进程的请求。用户进程代表连接到Oracle DB的应用程序或工具。它可以 与Oracle DB在同一台计算机上,也可以在远程客户机上利用网络来访问Oracle DB。用户进程首先与一个监听程序进程通信, 在专用环境中该进程会创建一个服务器进程。所创建的代表每个用户的应用程序的服务器进程可以执行以下一项或多项操作:• 对通过应用程序发出的SQL 语句进行语法分析并运行语句 • 从磁盘上的数据文件中将必要的数据块读取到SGA 的共享数据库缓冲区中(如果这些数据块目前尚未在SGA中) • 返回结果,使应用程序可以处理信息 后台进程 为了最大限度地提高性能并满足多个用户的需要,多进程Oracle DB系统使用一些称为“后台进程”的附加Oracle DB进程。一个Oracle DB实例可以有多个后台进程。非RAC、非ASM 环境中的常见后台进程包括:
01
数据库写进程(DBWn)
数据库写进程(DBWn) 数据库写进程(DBWn)可以将buffer cache的内容写入数据文件。DBWn进程负责将buffer cache中经过修改的buffers(灰数据 缓冲区)写入磁盘。虽然对于大多数系统来说,一个数据库写进程(DBW0)已经足够;但是,如果系统需要频繁修改数据, 也可以配置附加进程(DBW1到DBW9以及DBWa到DBWz)来改进写性能。这些附加DBWn进程在单处理器系统中没有用。当buffer cache中的某个buffer被修改时,系统会将其标记为灰数据缓冲区,并将其添加到按SCN顺序排列的检查点队列的头 中。因此,该顺序与这些更改的buffer的重做条目写入重做日志的顺序一致。当buffer cache中的可用缓冲区的数量低于某个 内部阈值(达到服务器进程认为很难获取可用缓冲区的程度)时,DBWn会将不经常使用的缓冲区写入数据文件,写入顺序 是从LRU列表的尾部开始,从而使进程可以在需要缓冲区时替换它们。DBWn也会从检查点队列的尾部写入,以保护检查点 向前推进。SGA中有一个内存结构保存了重做流中位置的重做字节地址(RBA),当实例发生故障时,将从该位置开始恢复。此结构充当 指向重做的指针,并且由CKPT进程按照每三秒一次的频率写入控制文件。由于DBWn按照SCN顺序写入灰数据缓冲区,而 重做按照SCN顺序执行,因此每当DBWn从LRUW列表写灰数据缓冲区时,还会将SGA内存结构中保持的指针前移,以便实 例恢复(如果需要)从近似正确的位置开始读取重做,并避免不必要的I/O。这称为“增量检查点”。注:还有其它一些DBWn可能执行写操作的情况(例如,当表空间被设置为只读或被置于脱机状态时)。在这些情况下,不 会出现增量检查点,因为仅属于相应数据文件的灰数据缓冲区在写入数据库时的顺序与SCN顺序无关。LRU算法将更频繁访问的块保存在buffer cache中,以尽可能地减少磁盘读取。可对表使用CACHE选项,以帮助延长块 在内存中的保留时间。DB_WRITER_PROCESSES初始化参数指定了DBWn进程的数量。DBWn进程的最大数量为36。如果用户在启动过程中 未指定该进程数,Oracle DB将根据CPU和处理器组的数量来决定如何设置DB_WRITER_PROCESSES。在以下情况下,DBWn进程将灰数据缓冲区写入磁盘:• 当服务器进程在扫描阈值数目的缓冲区之后找不到干净的可重用缓冲区时,会通知DBWn执行写操作。DBWn在执行 其它处理的同时,将灰数据缓冲区异步写入磁盘。• DBWn写缓冲区以推进检查点。检查点是重做线程(日志)中用于执行实例恢复的起始位置。该日志位置由缓冲区高 速缓存中最旧的灰数据缓冲区确定。在所有情况下,DBWn均执行成批(多块)写操作以提高效率。多块写操作中写入的块数因操作系统而异。
02
日志写进程(LGWR)
日志写进程(LGWR) 日志写进程(LGWR)负责管理重做日志缓冲区,即将重做日志缓冲区条目写入磁盘上的重做日志文件。LGWR会将上次写入 后复制到缓冲区中的所有重做条目写入重做日志文件。重做日志缓冲区是循环缓冲区。当LGWR将重做日志缓冲区中的重做条目写入重做日志文件时,服务器进程随后可以复制 新条目,覆盖重做日志缓冲区中的那些已写入磁盘的条目。LGWR的写入速度通常足够快,可以确保缓冲区中始终有空间 可供新条目使用,即使对重做日志的访问量很大时也是如此。LGWR将缓冲区的一个连续部分写入磁盘。LGWR 在以下情况下执行写操作:• 用户进程提交事务处理时 • 重做日志缓冲区的三分之一已满时 • DBWn进程将经过修改的缓冲区写入磁盘(如果需要)之前 • 每隔3秒 在DBWn可以写入经过修改的缓冲区之前,必须先将与缓冲区更改相关联的所有重做记录写入磁盘(先行写协议)。如果 DBWn发现一些重做记录尚未写入,则会通知LGWR将这些重做记录写入磁盘,并等待LGWR 完成重做日志缓冲区的写入 操作,然后才会写出数据缓冲区。LGWR将向当前的日志组进行写入。如果该组中的某个文件已损坏或不可用,LGWR 将继续写入到该组中的其它文件,并在LGWR跟踪文件和系统预警日志中记录一个错误。如果某个组中的所有文件均已 损坏,或者该组由于尚未归档而不可用,则LGWR无法继续工作。当用户发出COMMIT语句时,LGWR会将一条提交记录放在重做日志缓冲区中,并立即将该记录随同事务处理的重做 日志一起写入磁盘中。对数据块进行的相应更改将延迟,直到能够更为高效地写入这些更改时才会执行。这称为“快速 提交机制”。包含事务处理提交记录的重做条目的原子写是单个事件,该事件可以确定事务处理是否已提交。Oracle DB为提交的事务处理返回一个成功代码,尽管数据缓冲区尚未写入磁盘中。如果需要更多缓冲区空间,LGWR有时会在提交事务处理之前写入重做日志条目。仅当稍后提交了该事务处理之后,这 些条目才会成为永久条目。当用户提交事务处理时,该事务处理将被分配一个系统更改号(SCN),Oracle DB将该号码与 事务处理的重做条目一起记录在重做日志中。SCN 记录在重做日志中,以便可以在Real Application Cluster和分布式数 据库之间同步恢复操作。当活动比较频繁时,LGWR可以使用组提交来写入重做日志文件。例如,假设一个用户提交了一个事务处理。LGWR必 须将该事务处理的重做条目写入磁盘。但在此时,又有其他用户发出了COMMIT语句。但是,LGWR在完成其上一个 写操作之前,无法将这些事务处理的重做条目写入重做日志文件以提交这些事务处理。在第一个事务处理的条目写入重 做日志文件之后,正在等待(尚未提交)的事务处理的整个重做条目列表将通过一次操作写入磁盘,这比分别处理各个 事务处理条目所需的I/O要少。因此,Oracle DB可以将磁盘I/O降至最少,并最大限度地提高LGWR的性能。如果提交请 求的速率一直较高,则从重做日志缓冲区(由LGWR)进行的每个写操作都可能包含多个提交记录。
03
(CKPT)&(SMON)&(PMON)
检查点进程(CKPT) “检查点”是一种数据结构,它定义了数据库的重做线程中的系统更改号(SCN)。检查点记录在控制文件和每个数据文件头 中。它们是恢复操作的关键元素。遇到检查点时,Oracle DB必须更新所有数据文件的头,以记录该检查点的详细信息。这是由CKPT进程完成的。CKPT进程不会将块写入磁盘;该工作始终由DBWn执行。文件头中记录的SCN可保证在该SCN之前对数据库块进行的所有更改都已写入到磁盘中。
系统监视器进程(SMON) 系统监视器进程(SMON)可在实例启动时执行恢复(如果需要)。SMON还负责清除不再使用的临时段。如果在实例恢复过 程中由于文件读取错误或脱机错误而跳过了任何已终止的事务处理,则SMON将在表空间或文件重新联机时恢复这些事务 处理。SMON会定期检查,以查看是否需要该进程。其它进程在检测到需要SMON时也可以调用它。
进程监视器进程(PMON) 进程监视器进程(PMON)在用户进程失败时执行进程恢复。PMON负责清除buffer cache和释放该用户进程占用的资源。例如, PMON会重置活动事务处理表的状态,释放锁,并从活动进程列表中删除该进程ID。PMON定期检查分派程序和服务器进程的状态,并重新启动任何已停止运行(除了Oracle DB故意终止)的分派程序和服务 器进程。PMON 还会在网络监听程序中注册有关实例和分派程序进程的信息。与SMON一样,PMON定期检查以查看是否需要运行;如果其它进程检测到需要该进程,也可以调用它。
04
(RECO) & (CJQ0) &(Jnnn) & (ARCn) &(QMNn)
恢复器进程(RECO) 恢复器进程(RECO)是一个用于分布式数据库配置的后台进程,它可以自动解决涉及分布式事务处理的故障。实例的RECO 进程会自动连接到有问题的分布式事务处理中涉及的其它数据库。当RECO进程在涉及到的数据库服务器之间重新建立连接 后,它会自动解决所有有问题的事务处理,并从每个数据库的暂挂事务处理表中删除所有对应于已解决的有问题事务处理 的行。如果RECO进程无法与远程服务器连接,RECO会在某个计时间隔之后自动尝试重新连接。但是,RECO在再次尝试另一个 连接之前,会等待一段时间,该时间会随尝试次数不断增加(呈幂指数增长)。
归档进程(ARCn) 发生日志切换之后,归档进程(ARCn)会将重做日志文件复制到指定的存储设备。仅当数据库处于ARCHIVELOG模式且已启 用自动归档时,才会存在ARCn进程。如果您预计归档的工作负荷很重(例如在成批加载数据期间),可以增加最大归档进程数。此外,也可以有多个归档日志 目标位置。建议每个目标位置至少有一个归档进程。默认设置是四个归档进程。
05
其他进程
更高级的配置(如RAC)中可能会有其它后台进程。有关后台进程的详细信息,请参见V$BGPROCESS视图。有些后台进程是在启动实例时自动创建的,而另外一些则是根据需要创建的。其它进程结构不是特定于单个数据库的,而是可以在同一个服务器上的多个数据库间共享的。Grid Infrastructure进程和 网络进程即属于此类。Linux和UNIX系统上的Oracle Grid Infrastructure进程包括:• ohasd:Oracle高可用性服务守护程序,负责启动Oracle Clusterware进程 • ocssd:集群同步服务守护程序 • diskmon:磁盘监视守护程序,负责监视Storage Server的输入和输出 • cssdagent:启动、停止和检查CSS守护程序ocssd的状态 • oraagent:扩展集群件以支持Oracle特有的要求和复杂资源 • orarootagent:一种专用的Oracle代理进程,可帮助管理root用户所拥有的资源(如网络)




