进程结构

server process服务器进程

前台进程(foreground process):server process(服务器进程)

用户连接到数据库实例以后,暂时可以认为是:对每一个用户连接,oracle实例会启动一个进程,专门对这个连接会启动一个进程,这个进程它属于server process这一类,因为server process有好多进程;

server process是用户连接数据库以后诞生的这么一个进程,这个进程叫前台进程,它主要为用户服务,它是整个数据库对外提供服务的一个窗口

server process做什么事情呢?

一个用户在用户端写了一个SQL(DML),然后提交,这个SQL发送到数据库;然后server process接到这个SQL,server process会做所有的事情,哪些事情呢?server process接到这个SQL以后,第一步,接到这个SQL以后,拿着这个SQL在shared pool里面找,看看这个SQL有没有被解析过,也就是此前有没有被执行过(也就是在shared pool里面找sql和sql执行计划这个动作是在server process里面完成的),找到了就产生软解析,没找到就产生硬解析,假设没找着,就要进行硬解析,而硬解析的一系列过程也是在server process里面完成的,解析完了之后,接着要执行,执行就是要修改或者获取数据,这时候server process在buffer cache里面找,没找到数据时,又要到数据库(磁盘)的数据块里找,找到之后把数据读到buffer cache里去(从block里找到,然后读取数据到buffer cache里去产生物理读,物理读这个动作也是server process完成的),读取到buffer cache里面之后,接着要修改它,修改就要产生redo log,redo log在PGA里面产生,产生redo log完了以后接着修改,修改完了以后,server process把redo日志写到log buffer里面去,之后commit提交。

LGWR(log write)进程

提交的时候,有一个进程LGWR(log write),把log buffer里面的日志写到数据库的redo log里面去,这个进程很勤快的,因为log buffer的大小很小,这个进程是一个后台进程,也就是用户连不连接,这个进程都不受影响,

LGWR进程的特点(LGWR被触发的条件):

1、当log buffer里面的日志超过1M的时候,它就往数据库的redo log里面写

2、当log buffer的容量超过1/3的时候,它也往数据库的redo log里面写

3、每隔3秒钟,它也往数据库的redo log里面写

4、commit的时候,也会触发它把log buffer里面的日志往数据库的redo log里面写

PGA

对于每一个server process,oracle都会分配一块工作空间内存给它,这块内存是server process独有的,这块内存叫PGA

有这么一种情况,就是每个server process在工作的时候,所需要的内存大小是不一样的,而且随着时间的变化,这块内存有时候大,有时候小,对于这种情况,oracle预算分配一个总的PGA,然后对于每一个server process来说,需要的内存不够时,oracle会分配,而内存多的话,就释放回去,需要的时候再分配;比如,现在有100个server process,每个server process需要多少内存就分配多少内存给,而如果有1000个server process的话,每个server process需要多少内存它就不会分配多少内存给了,需要10个G,可能它就分配你3个G了,相当于这个PGA超出了预算

oracle有一个限制:对于每个server process分配的内存不会超过200M,还有一个是不会超过PGA预算的5%,两者取最小值

PGA是server process获取到的一块内存,从oracle 9i开始,oracle提供了这么一个PGA的自动管理

DBWR进程

从磁盘块读取到buffer cache的数据块,经过修改,修改之后的数据就和磁盘里的数据不一致了,修改之后的数据块叫做dirty buffer(脏块),这个脏块早晚要写到磁盘上,把脏块写到磁盘的这个动作呢,又由一个后台进程DBWR来完成

DBWR进程可以有多个进程,从进程0~进程9

DBWR进程被触发的条件:

1、脏块太多的时候

2、每隔3秒钟

3、server process在buffer cache里找数据没找到,要到磁盘上找的时候

arch进程(归档进程)

arch进程(归档进程):

当数据库的一个redo log满了之后,要把redo log里的日志写到arch file里去,这个动作由arch进程来完成

arch进程的数量可以由spfile来控制,实现快速拷贝

process monitor(pmonitor进程监控进程)

例如:用户连接到数据库实例以后,产生一个server process,这时候呢,有这么一种情况,就是用户突然网断了,server process还在一直等着这个用户,然后连接超时了,它又去连接这个用户,但是连接不上,这时候,这个server process就成了死进程了,这个时候就需要pmonitor,周期性的启动起来,把类似于server process的这种死进程清理一下,避免占用PGA,或者还占用着buffer cache里面的某些资源

pmonitor进程是主外的

smonitor进程

例如:oracle数据库里面出现了一些碎片,这时候就需要用smonitor来进行整理碎片;还有就是,在数据库正常运行期间,会有很多脏块,这些脏块对应的日志已经写到磁盘了,这时候数据库突然崩了,但是这些脏块还没来得及写入磁盘里,所以数据库重新启动以后,数据库会使用redo log把这些脏块恢复过来,这也需要smonitor来完成

smonitor进程是主内的

oracle后台进程里面的核心进程

1、pmonitor进程

2、smonitor进程

3、DBWR进程

4、LGWR进程

5、arch进程

CKPT(check point)检查点进程

它会每隔3秒钟会启动一下,会把数据库的一些相关的一些信息,写到控制文件里去,记录着一些数据文件和redo log的新旧的信息

控制文件记录着数据库的物理结构,也就是数据文件、redo log文件

4、oracle进程讲解的更多相关文章

  1. 强制杀oracle进程

    强制杀oracle进程: for p in `ps -ef| grep ora| awk '{print $2}'`;do kill -9 $p;done 修改 oracle xe 默认中文字符集成为 ...

  2. Oracle进程与系统进程

    --Oracle进程与系统进程 --------------------------2013/11/25 这里讨论Linux/Unix环境下,oracle v$process与操作系统对应的关系. 系 ...

  3. Linux 系统 杀Oracle 进程

    Linux 系统 杀Oracle 进程 杀掉进程用此方法比较好,能保证杀得干净,而不是用SQL  alter system kill kill -9 `ps -ef|grep "oracle ...

  4. oracle进程

    http://blog.csdn.net/leshami/article/details/5529239 Oracle实例和Oracle数据库(Oracle体系结构) 几类进程:用户进程,服务进程,后 ...

  5. 常用Oracle进程资源查询语句(运维必看)

    (一)根据程序名称查找相关信息select A.process,B.spid,A.sid,A.serial#,A.sql_address,A.username,A.program,A.status,A ...

  6. 一则ORACLE进程都在但是无法进入实例的问题

    [oracle@localhost ~]$ ps -ef|grep smonoracle 14809 1 0 Sep25 ? 00:13:02 ora_smon_mailp3[oracle@local ...

  7. Oracle进程中的 LOCAL=NO 和 LOCAL=YES

    我们在服务器上用sqlplus 连接数据库,在查看进程,会多出一条记录: oracle 16007 16006 0 10:27 ? 00:00:00 oraclenewccs (DESCRIPTION ...

  8. 用oradebug short_stack及strace -p分析oracle进程是否dead或出现故障

    1,可以采用oradebug或者strace -p跟踪后台或前台进程是否dead或hang住2,如果进程出现故障,必会在对应的TRC文件写入最新信息,基于此可以获取非常重要的信息进一步分析与诊断    ...

  9. Oracle 定时任务讲解

    前几天,公司的job调度出现了问题,由于权限管的严,没有查看oracle 一些重要的数据字典,后面联系DBA,是由于数据库切换到备机时,参数设置不对,导致db job没有正常调度. 今天刚好有时间,想 ...

  10. 【原创】查询占CPU高的oracle进程

    1:首先使用TOP命令传到占用CPU高的SPID号 PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND3575 oracle 1 12 ...

随机推荐

  1. 全网最适合入门的面向对象编程教程:43 Python 常用复合数据类型-扩展内置数据类型

    全网最适合入门的面向对象编程教程:43 Python 常用复合数据类型-扩展内置数据类型 摘要: 在 Python 中,内置数据类型(如列表.字典.集合等)非常强大,但在某些情况下,可能需要扩展这些数 ...

  2. android 访问域名接口报错

    1. 移动端访问https域名及接口,显示 java.net.UnknownHostException: Unable to resolve host "xxx" : No add ...

  3. Word在不同电脑排版异常

    Word在不同电脑排版异常 问题描述 今天又有同学向我抱怨用 word 写的论文明明在自己的电脑格式调的好好的,怎么在导师那格式又乱了,害的挨批. 笔者也遇到过该问题,正好趁这次机会简单整理一下. 注 ...

  4. Qemu - 介绍

    Ref: QEMU支持3种运行模式 -- 理解 https://www.minitool.com/partition-disk/qemu-for-windows.html

  5. 物体检测序列之一:NMS

    IoU (Intersection over Union),交并比,是衡量物体检测模型在特定数据集上检测效果好坏的一个常用的标准,通常情况下,想要通过IoU来衡量物体检测模型好坏需要具备以下几点: 1 ...

  6. chainLink vrf实验

    目标 用vrf写一个随机红包 数据结构 红包: struct Envelope { Type t; // 类型,只是erc20 和eth红包 ERC20 token; // erc20 ,如果是erc ...

  7. Angular 18+ 高级教程 – Component 组件 の Query Elements

    前言 Angular 是 MVVM 框架. MVVM 的宗旨是 "不要直接操作 DOM". 在 Component 组件 の Template Binding Syntax 文章中 ...

  8. migration to end point routing

    花了几个小时,记入一下吧. 1. odata https://devblogs.microsoft.com/odata/enabling-endpoint-routing-in-odata/ 找着弄就 ...

  9. c# 常用反射和表达式树整理

    更新: 2021-06-19 反射 local function https://stackoverflow.com/questions/43348128/reflection-how-do-i-fi ...

  10. 深入C++引用及其注意事项、对引用取地址时的内存模型、const数组等

    const int f[10] = { 1,2,3,4,5,6,7,8,9,10 }; int main() { // test1 const int i = 3; int& j = cons ...