Oracle读书笔记3:进程体系结构

Oracle读书笔记3:进程体系结构

Oracle数据库系统中的进程可以分为两大类:
    运行应用程序或Oracle工具代码的用户进程
    运行Oracle数据库服务器代码的Oracle DB进程(包括服务器进程和后台进程)

如果使用专属服务器结构,对于每个用户会话,运行数据库应用程序的用户进程都由专属的服务器进程提供服务;

如果使用共享服务器结构,调度程序会将多个传入的会话请求引入到共享服务器进程池,然后再由调度程序返回结果给每一个客户机。

专属服务器进程结构示例图


一.用户进程
       当用户运行应用程序或者Oracle工具(如SQL*Plus)时,Oracle将创建一个用户进程来运行用户的应用程序。
       这里要提到两个概念,连接和会话。
       连接是指用户进程与Oracle数据库实例(服务器进程)之间的通信,这个通信通道是通过进程间的通信机制来建立的。
       会话是指用户通过用户进程与Oracle数据库实例之间建立的特定连接,同一个用户可以创建多个会话,从用户开始连接到用户断开连接,会话一直持续。实际上,一个连接可以有多个会话。

二.服务器进程
        Oracle创建服务器进程以处理连接到实例的用户进程的请求,当应用程序和Oracle数据库在同一台计算机上运行时,可以将用户进程和相应的服务器进程合并为一个进程,以减少系统开销。但是当两者在不同的计算机上运行时,用户进程会通过单独的服务器进程与数据库进行通信。

       代表每个用户的应用程序创建的服务器进程可以执行以下操作:
           对通过应用程序发出的SQL语句进行语法分析和运行
           如果所需的数据块不在SGA中,服务器进程会从磁盘上的数据文件将必要的数据块读取到SGA的共享数据库缓冲区中
返回结果给应用程序

三.后台进程
        Oracle数据库实例有很多后台进程,并不是所有进程都会一直存在。在V$BGPROCESS视图中可以看见所有的后台进程

后台进程交互示意图


1.系统监控进程(System Monitor,SMON)
       SMON起初的任务是安装和打开数据库,SMON通过查找和验证数据库控制文件来安装数据库。此后,它通过查找和验证所有数据文件和联机重做日志文件打开数据库,一旦数据库打开并处于使用状态,SMON就负责执行内部管理任务:
       清理临时表空间中不再使用的临时段
       合并数据文件中的可用空间(使用字典方式管理的)
       执行实例恢复。在实例恢复的过程中,SMON的工作包括三个:应用Redo执行前滚,打开数据库,回滚未提交数据
       在自动段空间管理中负责offline不再需要的回滚段
       执行并行恢复


2.进程监控进程(Process Monitor,PMON)
       PMON监视所有服务器进程,并检测会话中的任何问题。在用户进程失败时执行进程恢复,并将未提交的事务回滚。PMON负责清理数据库缓冲区缓存并释放该用户进程使用的资源。例如它重置active的事务表的状态,释放锁,并从进程列表中删除进程ID
       PMON定期检查调度程序和服务器进程的状态,并重新启动任何停止运行的操作PMON还会注册实例和调度程序的信息到监听。

3.数据库写入器进程(Database Writer,DBWn)
      DWBn负责将缓冲区的脏块(dirty buffer)和冷块(cold buffer)写入数据文件。一个实例可能有多个DBWn进程,最多不超过20个,n代表编号(1-9,a-j),默认数量是每8个CPU对应一个DBWR,但是也可以通过设置DB_WRITER_PROCESS参数进行指定,这些附加进程在单处理器系统中没有用。dirty buffer是与数据文件中数据不一致的buffer,而cold buffer是使用LRU算法计算出的最近未使用过的buffer。

       DBWn进程会在下列情况下执行写入操作:
            当服务器进程找不到任何干净可重用的缓冲区
            脏块过多(数量由内部阈值确定)
            每隔三秒对DB buffer cache清理一次
            遇到检查点(包括增量和完全检查点)时会写入所有缓冲区

一个容易出错的点,在提交事务时,DBWn会有什么举动?答案是它什么都不做

4.日志写入器(Log Writer,LGWR)
      LGWR负责管理重做日志缓冲区,将重做日志缓冲区写入磁盘上的重做日志文件,LGWR进程会写入自上次写入以来,复制到缓冲区的所有重做条目。前面在内存体系结构有提到,redo log buffer是一个环形缓冲区,当LGWR在写入之后,服务器进程可以将新的条目复制到缓冲区,以覆盖哪些已经写入磁盘的条目之上。LGWR进程会将缓冲区的一个连续的部分写入磁盘。

LGWR会在以下情况执行写操作:
    用户进程提交事务时
    每隔三秒
    redo log buffer满三分之一
    DBWn进程将脏块写入磁盘前


在DBWn刷出脏块之前,与脏块更改相关的所有重做记录必须先写入磁盘(提前写协议)。
如果DBWn发现一些重做记录没有被写入,则会通知LGWR将重做记录写入磁盘,并且等待LGWR完成写入后,DBWn再刷出脏块。

LGWR进程会同步写入到当前日志组,如果组中某个文件损坏或不可用,LGWR进程将继续写入到组中的其他文件,并在LGWR跟踪文件和系统预警日志中记录错误,如果组中所有文件都已损坏,或者该组由于尚未归档而不可用,则LGWR无法继续工作。

当用户发出COMMIT语句时,LGWR会将提交记录放在redo log buffer中,并且立即将该记录和事务的重做记录写入磁盘,对数据块所做的相应更改将延迟,直到能更高效的写入这些更改时才会执行,这称为“快速提交机制”。包含事务处理提交记录的重做条目的原子写是单个事件,该事件可以确定事务是否提交,Oracle为提交的事务返回一个成功代码,尽管db buffer尚未写入磁盘。

如果需要更多的缓冲区空间,LGWR有时候会在提交事务前写入重做日志条目,但只有在提交事务后,这些条目才会永久生效。

当用户提交事务时,将为该事务分配一个系统变更号(SCN),Oracle将SCN与事务的重做条目一起记录在重做日志中,以便可以在RAC和分布式数据库之间同步恢复操作。

当活动比较频繁时,LGWR会使用组提交来写入重做日志文件。例如,假设用户提交一个事务,LGWR必须将事务的重做条目全部写入磁盘。与此同时,其他用户也发出COMMIT语句,但是LGWR在完成上一个写入操作之前,是无法写入重做日志文件以提交这些事务处理的。在第一个事务被写入重做日志文件后,可以在一次操作中将尚未提交的事务处理的整个重做条目列表写入磁盘,这比分别处理各个事务所需的I/O要少。如果COMMIT的速率一直较高,则从重做日志缓冲区进行的每个写操作都可能包含多个提交记录。

5.检查点进程(Checkpoint Process,CKPT)

什么是检查点?
上面有提过,当事务提交时,DBWn并不会马上刷出脏块到磁盘。但是当数据库崩溃时,并不能保证缓存里的脏块全部写入到数据文件中,这样就要使用日志文件执行实例恢复,将数据库恢复到崩溃之前,以保证数据的一致性。而检查点就是这个过程中的重要机制,通过它来确定恢复时哪些重做日志应该被应用于恢复,从而缩短实例恢复的时间。

一般所说的checkpoint是一个event,由LGWR/CKPT进程发出,当event发生时,DBWn会将脏块写入到磁盘,同时更新数据文件和控制文件的文件头的checkpoint信息。当前检查点位置,也称RBA(redo byte address,重做字节地址),是发生实例故障时重做流中必须由此开始的恢复位置,CKPT使用当前检查点位置不断更新控制文件,实例恢复的终点是redo log。

这篇文章对检查点做了详细的解析

https://blog.csdn.net/cymm_liu/article/details/7337020
而这篇则是对checkpoint RBA和on disk RBA做了说明
https://blog.csdn.net/wenhuiqiao/article/details/6078270

6.可管理性监视器(Manageability Monitor/Memory Monitor,MMON)
         数据库实例收集有关活动和性能的大量统计数据,收集到SGA中,MMON从SGA定期捕获统计数据(默认是每小时一次),并将它们写入到数据字典中,在数据字典中,可以无限期的存储它们(默认存储8天)
      每次MMON收集一组统计数据(称为快照)时,它还启动Automatic Database Diagnostic Monitor(ADDM),它观察当前快照和先前的一个快照,并得出有关性能的观察结果和建议
       MMON还持续监视数据库和实例,来确定是否发出任何警报

7.易管理轻量性监控进程(Manageability Monitor Light,MMNL)
         MMNL是MMON的辅助进程,如果在MMON预定执行转储前,用于收集统计数据信息的内存缓冲区变满,那么MMNL将担当起转储数据的责任。同时也可执行与轻量可管理性相关的频繁任务,例如会话历史记录捕获和度量计算。

8.内存管理器(Memory Manager,MMAN)
            DBA仅需为内存使用情况确定一个总体目标,MMAN将观察PGA内存和SGA内存的需要,并根据需要将内存分配给会话和SGA结构,同时将内存分配总量保持在DBA设定的限制范围内

9.归档进程Archiver(ARCn)
          就数据库而言,这是一个可选的进程,但对于企业通常是必需的,数量在1~30之间
          LGWR会将变更向量从日志缓冲区写出到联机重做日志文件中,但联机重做日志文件的大小和数量固定不变,一旦变满,LGWR将用更多的重做数据覆盖它们,这意味着,联机重做日志仅存储最近发生的活动的变更向量,为了保留一份应用于数据的所有更改的完整历史纪录,就必须在联机日志变满和被重用前制作副本,这正是ARCn的职责,在ARCn成功将联机日志文件成功归档到归档日志文件前,将不允许LGWR重写相应的联机日志文件。
      必须监视ARCn进程的进度和写入目标的状态,如果归档操作失败,数据库最终将会挂起,可以通过警报系统完成监视操作

10.恢复进程(Recoverer Process)
           在分布式事务中,需要两阶段提交,每个数据库中的提交都必须进行协调:如果一个失败了,而另一个要成功了,那么整体看来,数据将处于不一致状态
           两阶段提交在准备数据库时,指示其LGWR将日志缓冲区转储到磁盘中(第一阶段),一旦得到确认,就在每处都将事务标记为已提交(第二阶段),如果在两个阶段之间,在任何位置发生了错误,那么RECO进程将采取措施来取消提交

11.一些其他的进程

RBAL:协调ASM中磁盘组的重新平衡活动
ABRn:实际执行ASM实例中重新平衡操作的进程,可能存在多个这样的进程
ASMB:用于与ASM实例通信的进程
VKTM:用于提供一个数据库的时钟,每秒更新,可以作为时间计数器,在系统时间出现异常或变化时,VKTM进程还会检测这些变化,提醒用户。

运行查询来查看在实例中运行的后台进程
     (1)确定哪些进程正在进行,以及每个进程的数量有多少
       SELECT program FROM v$session order by program;
       SELECT program FROM v$process order by program; 
     (2)ps -ef|grep ora|wc -l
          该语句将计算出名称中包含"ora"字符串的运行进程的数量,将包括所有会话服务器进程



猜你喜欢

转载自blog.csdn.net/lrxcmwy2/article/details/80476604