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