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. 9. Lock wait timeout exceeded

    一. 现象 用户打开消息推送有概率报错,后续发现推送消息阅读数.点赞数无法正常更新,mysql报警有行锁, DBA抓到有锁表语句,kill该语句未正常恢复,elk日志有大量的java.sql.SQLE ...

  2. SPOJ REPEATS Repeats (后缀数组 + RMQ:子串的最大循环节)题解

    题意: 给定一个串\(s\),\(s\)必有一个最大循环节的连续子串\(ss\),问最大循环次数是多少 思路: 我们可以知道,如果一个长度为\(L\)的子串连续出现了两次及以上,那么必然会存在\(s[ ...

  3. Monorepo All In One

    Monorepo All In One monorepos 只是一种思想,或设计模式,架构风格 https://trunkbaseddevelopment.com/monorepos/ Lerna h ...

  4. 如何使用 Python 编写后端 API 接口

    如何使用 Python 编写后端 API 接口 get API Python3 # coding:utf-8 import json # ModuleNotFoundError: No module ...

  5. TypeScript 4.1 Quick Start Tutorials

    TypeScript 4.1 Quick Start Tutorials TypeScript 4.1 快速上手教程 https://typescript-41-quick-start-tutoria ...

  6. Recoil & React official state management

    Recoil & React official state management Redux Recoil.js https://recoiljs.org/ A state managemen ...

  7. 如何用 js 实现一个 sleep 函数

    如何用 js 实现一个 sleep 函数 原理 实现方式 总结 refs js sleep xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  8. NGK DeFi Baccarat怎么玩能赚钱?

    市面上大多数DeFi项目都是基于以太坊来开发的,除了吞吐量低.存储量小以及交易速度慢等问题以外,高额的Gas手续费将不少终端用户拒之门外. 基于此NGK.IO推出了低门槛的DeFi项目-- Bacca ...

  9. 08.手写KNN算法测试

    导入库 import numpy as np from sklearn import datasets import matplotlib.pyplot as plt 导入数据 iris = data ...

  10. mybatisPlus中的模糊查询问题

    不能查询中文 记得在数据库的配置中写明编码格式characterEncoding=utf-8