正文
【体系结构】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
协调各种空间管理相关任务的执行,如空间主动分配和空间回收。
文献参考
Process Architecture