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

【体系结构】Oracle进程架构的更多相关文章

  1. Oracle体系结构之进程

    Oracle体系结构之进程 一.概述 Oracle中的每个进程都要执行一个特定的任务(或者一组任务),每个进程都会为自己分配内存(PGA)来完成它的任务.一个Oracle实例主要有以下3类进程: (1 ...

  2. Oracle数据库体系结构之进程结构(4)

    Oracle进程结构包括用户进程,服务进程,后台进程. 1. 用户进程 用户进程在数据库用户要求连接到Oracle服务器时开始启动. 用户进程是要求Oracle服务器交互的一种进程 它必须首先建立一个 ...

  3. Oracle11g温习-第一章:Oracle 体系架构

    2013年4月27日 星期六 10:20 1.oracle 网络架构及应用环境 1. ORACLE 实例——包括内存结构与后台进程 2. ORACLE 数据库——物理操作系统文件的集合 3. 了解内存 ...

  4. Oracle 数据库架构

    Oracle 数据库架构 查看数据库在linux系统的安装目录路径情况: [root@localhost ~]# cd /u01/app/oracle/oradata/orcl/ [root@loca ...

  5. Oracle rac架构和原理

        Oracle RAC Oracle Real Application Cluster (RAC,实时应用集群)用来在集群环境下实现多机共享数据库,以保证应用的高可用性:同时可以自动实现并行处理 ...

  6. Oracle学习笔记—oracle体系架构及状态(nomount、mount和open)简介

    oracle体系架构简介 先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)和数据库(database)组成.实例(instance ...

  7. 架构-软件系统体系结构-B/S架构:B/S架构

    ylbtech-架构-软件系统体系结构-B/S架构:B/S架构 B/S架构即浏览器和服务器架构模式.它是随着Internet技术的兴起,对C/S架构的一种变化或者改进的架构.在这种架构下,用户工作界面 ...

  8. Oracle数据库的文件以及Oracle体系架构

    第一部分.Oracle数据库的文件 1.参数文件:控制实例的行为的参数的集合 参数文件的作用 设定数据库的限制 设置用户或者进程的限制 设定数据库资源的限制 调整系统的性能 主要的参数文件 SGA_T ...

  9. Oracle 组织架构(转)

    原文地址:Oracle 组织架构 我们先来看一下实际生活中的集团组织架构. 下图是一个典型的投资集团组织架构. 集团在各个国家有独立的法人. 每个法人会负责若干个业务进行,比如石油开采,汽车制造,软件 ...

随机推荐

  1. LWIP再探----内存池管理

    这这里是接上一篇内存池管理部分的,这里如果读者一打开memp.c的话会感觉特别那一理解原作者在干嘛,但是看懂了就明白原作者是怎么巧妙的使用了宏.废话不多说先说了下我分析是一下宏的条件是 前提条件MEM ...

  2. webpack remove console.log

    webpack remove console.log https://stackoverflow.com/questions/41040266/remove-console-logs-with-web ...

  3. TypeScript constructor public cause duplicate bug

    TypeScript constructor public cause duplicate bug constructor public const log = console.log; // con ...

  4. 使用 js 实现十大排序算法: 归并排序

    使用 js 实现十大排序算法: 归并排序 归并排序 refs js 十大排序算法 All In One https://www.cnblogs.com/xgqfrms/p/13947122.html ...

  5. React Slingshot

    React Slingshot React 弹弓 https://github.com/coryhouse/react-slingshot https://decoupledkit-react.rea ...

  6. React & Special Props Warning

    React & Special Props Warning key & ref demo index.js:1 Warning: Comment: key is not a prop. ...

  7. 钓鱼教程 All In One

    钓鱼教程 All In One youtube https://www.youtube.com/results?search_query=钓鱼教程&sp=CAM%3D 钓鱼证 https:// ...

  8. GitHub rename the default branch from master to main

    GitHub rename the default branch from master to main master => main Repository default branch Cho ...

  9. 如何在 macOS 上进行滚动截屏

    如何在 macOS 上进行滚动截屏 Shift-Command-5 https://support.apple.com/zh-cn/guide/mac-help/mh26782/mac demo Xn ...

  10. js & void() & void(0)

    js & void() & void(0) https://www.runoob.com/js/js-void.html void() <a href="javascr ...