进程结构

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. Axure 0基础实战入门 模拟一个app页面

    Axure 0基础实战入门 模拟一个app页面 第一次接触axure9,尝试模拟一个app页面与交互 页面原型 我选择了一个免费的日程app,下载rp文件后导入到axure 模拟实现登录页面 新建两个 ...

  2. locale 设置

    locale 介绍 在终端中,locale(本地化)设置是指与本地语言.国家和文化偏好有关的环境变量的配置.这些设定决定了程序如何处理和显示字符.时间.日期格式.货币等. 在类 Unix 系统(比如 ...

  3. Linux | Ubuntu 16.04.4 通过docker安装单机FastDFS

    Ubuntu 16.04.4 通过docker安装单机fastdfs 前言 很久没有写技术播客了,这是一件很不应该的事情,做完了事情应该有沉淀的. 我先说一点前情提要,公司的fastdfs突然就挂了, ...

  4. C#项目—彩票选号

    C#彩票选号软件 今天做了一个彩票选号的小软件,将学到的知识点总结如下(新手小白,多提意见): 1.写程序的思路 实体类(属性.方法) No1. 随机数组集合(属性) No2. 创建集合对象(构造方法 ...

  5. 用描述程序的方式emo,扎心了...

    用描述程序的方式emo,扎心了... 众所周知写程序是个枯燥无聊的过程,再加上生活的不顺与坎坷,当程序语言与emo结合起来,看谁还说程序员不懂感情! 首当其冲的就是循环语句了 世界上最寂寞的感觉,是我 ...

  6. Dell R920 服务器iDrac口默认账号密码和IP

    Dell服务器iDrac口默认账号密码和IP   账号:root 密码:calvin IP:192.168.0.120/24

  7. MYSQL数据库设计1

    简单记录一下如何设计MySQL数据库 1.画出概念模型,概念模型是一个业务关系对照图,不需要定义字段类型什么的,仅仅是用于关系对照,指出对照关系 2.根据概念模型设计逻辑模型,逻辑模型需要包含字段的设 ...

  8. 自己服务器搭建docker组和环境

    1. docker 当然首先安装一下docker,具体怎么 安装,网上搜一下.我用的ubuntu20系统,就是安装一个普通的软件的操作.安装后,运行一下docker run hello-world,运 ...

  9. Google Maps Embed API & JavaScript API

    前言 很多年前写过一篇 Google Map 谷歌地图, 这篇算是翻新版本. Google Map Registration Google Maps Platform 是整个 Google Map 的 ...

  10. .NET 开源的功能强大的人脸识别 API

    前言 人工智能时代,人脸识别技术已成为安全验证.身份识别和用户交互的关键工具. 给大家推荐一款.NET 开源提供了强大的人脸识别 API,工具不仅易于集成,还具备高效处理能力. 本文将介绍一款如何利用 ...