【体系结构】Oracle进程架构
Client Process的介绍
Client and Server Processes
Client Process
代表着客户端进程,每一个客户端进程关联着一个Server Process
(服务器进程)。并且客户端进程包含着一个私有的PGA内存。
客户端的进程
- 可以通过代码的方式(JAVA,C或者其他语言)来和数据库建立进程连接。
- SQL*Plus的方式建立。
- 通过远程的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 process
和server 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
协调各种空间管理相关任务的执行,如空间主动分配和空间回收。
文献参考
【体系结构】Oracle进程架构的更多相关文章
- Oracle体系结构之进程
Oracle体系结构之进程 一.概述 Oracle中的每个进程都要执行一个特定的任务(或者一组任务),每个进程都会为自己分配内存(PGA)来完成它的任务.一个Oracle实例主要有以下3类进程: (1 ...
- Oracle数据库体系结构之进程结构(4)
Oracle进程结构包括用户进程,服务进程,后台进程. 1. 用户进程 用户进程在数据库用户要求连接到Oracle服务器时开始启动. 用户进程是要求Oracle服务器交互的一种进程 它必须首先建立一个 ...
- Oracle11g温习-第一章:Oracle 体系架构
2013年4月27日 星期六 10:20 1.oracle 网络架构及应用环境 1. ORACLE 实例——包括内存结构与后台进程 2. ORACLE 数据库——物理操作系统文件的集合 3. 了解内存 ...
- Oracle 数据库架构
Oracle 数据库架构 查看数据库在linux系统的安装目录路径情况: [root@localhost ~]# cd /u01/app/oracle/oradata/orcl/ [root@loca ...
- Oracle rac架构和原理
Oracle RAC Oracle Real Application Cluster (RAC,实时应用集群)用来在集群环境下实现多机共享数据库,以保证应用的高可用性:同时可以自动实现并行处理 ...
- Oracle学习笔记—oracle体系架构及状态(nomount、mount和open)简介
oracle体系架构简介 先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)和数据库(database)组成.实例(instance ...
- 架构-软件系统体系结构-B/S架构:B/S架构
ylbtech-架构-软件系统体系结构-B/S架构:B/S架构 B/S架构即浏览器和服务器架构模式.它是随着Internet技术的兴起,对C/S架构的一种变化或者改进的架构.在这种架构下,用户工作界面 ...
- Oracle数据库的文件以及Oracle体系架构
第一部分.Oracle数据库的文件 1.参数文件:控制实例的行为的参数的集合 参数文件的作用 设定数据库的限制 设置用户或者进程的限制 设定数据库资源的限制 调整系统的性能 主要的参数文件 SGA_T ...
- Oracle 组织架构(转)
原文地址:Oracle 组织架构 我们先来看一下实际生活中的集团组织架构. 下图是一个典型的投资集团组织架构. 集团在各个国家有独立的法人. 每个法人会负责若干个业务进行,比如石油开采,汽车制造,软件 ...
随机推荐
- LWIP再探----内存池管理
这这里是接上一篇内存池管理部分的,这里如果读者一打开memp.c的话会感觉特别那一理解原作者在干嘛,但是看懂了就明白原作者是怎么巧妙的使用了宏.废话不多说先说了下我分析是一下宏的条件是 前提条件MEM ...
- webpack remove console.log
webpack remove console.log https://stackoverflow.com/questions/41040266/remove-console-logs-with-web ...
- TypeScript constructor public cause duplicate bug
TypeScript constructor public cause duplicate bug constructor public const log = console.log; // con ...
- 使用 js 实现十大排序算法: 归并排序
使用 js 实现十大排序算法: 归并排序 归并排序 refs js 十大排序算法 All In One https://www.cnblogs.com/xgqfrms/p/13947122.html ...
- React Slingshot
React Slingshot React 弹弓 https://github.com/coryhouse/react-slingshot https://decoupledkit-react.rea ...
- React & Special Props Warning
React & Special Props Warning key & ref demo index.js:1 Warning: Comment: key is not a prop. ...
- 钓鱼教程 All In One
钓鱼教程 All In One youtube https://www.youtube.com/results?search_query=钓鱼教程&sp=CAM%3D 钓鱼证 https:// ...
- GitHub rename the default branch from master to main
GitHub rename the default branch from master to main master => main Repository default branch Cho ...
- 如何在 macOS 上进行滚动截屏
如何在 macOS 上进行滚动截屏 Shift-Command-5 https://support.apple.com/zh-cn/guide/mac-help/mh26782/mac demo Xn ...
- js & void() & void(0)
js & void() & void(0) https://www.runoob.com/js/js-void.html void() <a href="javascr ...