【体系结构】Oracle进程架构

Client Process的介绍

Client and Server Processes

Client Process代表着客户端进程,每一个客户端进程关联着一个Server Process(服务器进程)。并且客户端进程包含着一个私有的PGA内存。

客户端的进程

  1. 可以通过代码的方式(JAVA,C或者其他语言)来和数据库建立进程连接。
  2. SQL*Plus的方式建立。
  3. 通过远程的plsqldev等客户端工具建立连接。

举例:用一个SQL*Plus连接数据库,如下:

1.本地连接
[oracle@db1 ~]$ sqlplus "/as sysdba"
SYS@prod> 
[oracle@db1 ~]$ sqlplus scott/tiger
SCOTT@prod> 
2.远程主机连接
[oracle@db2 admin]$ sqlplus scott/tiger@prod
SCOTT@prod> 

效果图如下:

在本地主机和远程主机,对应的每一个client process的建立情况如下:

1.本地的client process
[root@db1 ~]# ps -ef |grep sqlplus |grep -v grep
oracle   13474 13455  0 10:38 pts/3    00:00:00 rlwrap sqlplus /as sysdba         
oracle   13538 13503  0 10:43 pts/5    00:00:00 rlwrap sqlplus scott/tiger
2.远程的client process
[root@db2 ~]# ps -ef |grep sqlplus |grep -v grep
oracle    2962  2916  0 10:45 pts/0    00:00:00 rlwrap sqlplus scott/tiger@prod

在数据库的主机下,可以查看服务器进程的建立情况,(LOCAL=NO)代表非本地连接,(LOCAL=YES)代表本地连接。

[root@db1 ~]# ps -ef |grep LOCAL |grep -v grep
oracle   13476 13475  0 10:38 ?        00:00:00 oracleprod (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   13540 13539  0 10:43 ?        00:00:00 oracleprod (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   13590     1  0 10:46 ?        00:00:00 oracleprod (LOCAL=NO)

Connections and Sessions

  • 什么是Connections

    一个Connection代表着client proces和数据库实例之间的一条物理连通路径。

  • 什么是Sessions

    一个session是在数据库实例内存中的一个逻辑实体。代表着一个当前用户连接数据库的状态。

所以,一个connection可以有0,1或者更多的sessions的建立。

Oracle的网络连接有两种形式:dedicated server Shared server

下图表示:一个session对应一个connection的情况:[一般在dedicated server模式下]

下图表示:两个session在一个connection的情况:[一般在Shared server模式下]

Server Processes的介绍

Oracle数据库会创建Server Process用于处理来自于客户端进程连接数据库的请求。一个client process会对应一个独立的Server Process用于和数据库之间的通信。

Server Processes完成如下工作:

  • 解析和运行SQL语句,包括创建和运行执行计划query plan,官方文档介绍SQL执行的过程“Stages of SQL Processing”
  • 运行PL/SQL代码块
  • data files中读取数据块,然后去修改database buffer cache的数据。(DBWn后台进程,用于把已修改过的blocks写入至磁盘)
  • 将结果返回给应用程序。

Dedicated Server Processes

专用模式下,client processserver process是一一对应的。在linux操作系统下,20个连接数据库实例的client processes就会有20个server processes

每一个client process是直接与server process通信的。在会话存续期间,这个server process是专属于client process,server process在PGA中存储其特定的进程信息和UGA。

UGA:User global area。一个会话内存,存储会话变量,例如登录信息,同时包括OLAP池

Shared Server Processes

共享模式下,多个client process共享一个server process。它是通过dispatcher process进行调度。这种连接方式很少见,不过多讨论。

Background Processes的介绍

一个数据库实例有许多后台进程,可以通过如下查询语句,查看数据库正在运行的后台进程:

SELECT PNAME 
FROM   V$PROCESS 
WHERE  PNAME IS NOT NULL 
ORDER BY PNAME;

操作系统的命令

[oracle@oradb ~]$ ps -ef |grep ora_

Mandatory Background Processes

这些强制性,标志性的进程。在最小话配置的初始化参数文件启动的数据库实例中运行。

Process Monitor Process (PMON)系统监控

pmon是监控其他后台进程并且检测会话中的问题。

1.会话异常终止时,PMON 销毁对应服务器进程。 释放所有当前挂起的锁定。释放服务器端使用的资源(PGA 内存等)。回滚正在进行的未完成的事务。

2.监控其他进程,如果进程异常终止时执行进程恢复,亦或者终止数据库实例。

3.动态注册实例到监听器(listener)。

System Monitor Process (SMON)进程监控

SMON在实例启动时执行实例恢复instance recovery。具体的操作:

  • 在线redo日志做前滚的修改。
  • 打开数据库让用户可以访问。
  • 回滚未提交的事务。
  • 合并空闲资源。
  • 释放不再使用的临时段。

Database Writer Process (DBWn)数据库写进程

写脏块。将修改后的缓冲区(脏 buffer) 数据写入数据文件中。

DBWn写入的时机:

  • 触发Checkpoint
  • Dirty buffers达到了阈值
  • 没有多余的空闲buffers。
  • 超时触发。
  • RAC ping request is made
  • 表空间的操作OFFLINE,READ ONLY,BEGIN BACKUP下线,只读,备份
  • 表的操作DROP,TRUNCATE

Log Writer Process (LGWR)日志写进程

log writer process (LGWR) 管理着redo日志缓存区,负责将日志缓冲区中的日志条目(redo entries)写入日志文件。dirty buffer(修改database buffer的脏块) to disk是分散写入,redo to disk是快速频繁写入。皮面数据库的频繁IO操作,提升数据库的性能。

dbwn 是lazy write,lgwr 是速写,频繁写。

由于是lazy write所以dbwn有多个线程,而lgwr是一个线程。保证一个平衡

LGWR写入的时机:

  • commit提交的时候。
  • 三分之一满(或 1M 满)。
  • 每3秒触发一次写入。
  • dbwr 写之前(先记后写,先记日志后写脏块,保证未提交数据都能回滚)

LGWR and Commits

Oracle数据库使用快速提交机制 (fast commit) 来提高提交事务的性能。当用户发起一个commit语句,事务会分配一个system change number (SCN)。LGWR会把commit记录放置在redo log buffer中,同时快速写入至磁盘。这里面包括commit SCN and transaction’s redo entries.

Checkpoint Process (CKPT)检查点进程

checkpoint process (CKPT)会更新数据文件头部和控制文件中的检查点信息。并发出一个信号通知或督促 dbwr 写脏块。

检查点信息(Checkpoint information ) 包含

  • the checkpoint position,
  • SCN
  • location in online redo log to begin recovery等等。

CKPT不会把data blocks写入至数据文件中,不会把 redo blocks写入至redo日志文件中。

完全检查点 full checkpoint:保证数据一致性。
增量检查点 incremental checkpoint:不断更新控制文件中的检查点位置,当发生实例崩溃时,可以尽量缩短实例恢复的时间。其部分目的是避免在联机重做日志交换机上写入大量块。
局部检查点 tablespace/datafile checkpoint:特定的操作下,针对某个表空间的。

Manageability Monitor Processes (MMON and MMNL)管理监控进程

manageability monitor process (MMON) 执行许多与自动工作负载存储库(AWR)相关的任务。例如,当度量值违反阈值时,MMON就会写入,为最近修改的SQL对象获取快照和统计值。

manageability monitor lite process (MMNL) 将SGA中的活动会话历史(ASH)缓冲区中的统计信息写入磁盘。当ASH缓冲区满时,MMNL写入磁盘。

Recoverer Process (RECO)

在分布式数据库中,恢复进程(RECO)自动解决分布式事务中的故障。节点的RECO进程会自动连接到涉及可疑分布式事务的数据库。当RECO在数据库之间重新建立连接的时候,它会自动处理所有可疑的事务,从每个数据库的挂起事务表中删除与已解析事务对应的任何行。

Optional Background Processes

Archiver Processes (ARCn)

归档模式下,发生日志切换时,把当前日志组中的内容写入归档日志,作为备份日志。ARCn只有在数据库开启归档模式下才会启用。

Job Queue Processes (CJQ0 and Jnnn)

Oracle数据库使用job queue processes来运行用户作业,通常采用批处理模式。作业是计划运行一次或多次的用户定义任务

Flashback Data Archiver Process (FBDA)

**flashback data archiver process (FBDA) **对被跟踪表的历史修改信息存入至闪回数据归档中。这个需要设置某个表有闪回归档区。才有此特性。

Space Management Coordinator Process (SMCO)

SMCO process协调各种空间管理相关任务的执行,如空间主动分配和空间回收。

文献参考

Process Architecture

给TA买糖
共{{data.count}}人
人已赞赏
经验教程

一款检测代码中TODO的eslint插件

2021-3-17 11:13:00

经验教程

Blind Super-Resolution Kernel Estimation using an Internal-GAN (KernelGAN) 论文解读

2021-3-17 11:30:00

⚠️
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。 本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。本站部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 momeis6@qq.com 或点击右侧 私信:momeis 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索