4、oracle进程讲解
进程结构
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进程讲解的更多相关文章
- 强制杀oracle进程
强制杀oracle进程: for p in `ps -ef| grep ora| awk '{print $2}'`;do kill -9 $p;done 修改 oracle xe 默认中文字符集成为 ...
- Oracle进程与系统进程
--Oracle进程与系统进程 --------------------------2013/11/25 这里讨论Linux/Unix环境下,oracle v$process与操作系统对应的关系. 系 ...
- Linux 系统 杀Oracle 进程
Linux 系统 杀Oracle 进程 杀掉进程用此方法比较好,能保证杀得干净,而不是用SQL alter system kill kill -9 `ps -ef|grep "oracle ...
- oracle进程
http://blog.csdn.net/leshami/article/details/5529239 Oracle实例和Oracle数据库(Oracle体系结构) 几类进程:用户进程,服务进程,后 ...
- 常用Oracle进程资源查询语句(运维必看)
(一)根据程序名称查找相关信息select A.process,B.spid,A.sid,A.serial#,A.sql_address,A.username,A.program,A.status,A ...
- 一则ORACLE进程都在但是无法进入实例的问题
[oracle@localhost ~]$ ps -ef|grep smonoracle 14809 1 0 Sep25 ? 00:13:02 ora_smon_mailp3[oracle@local ...
- Oracle进程中的 LOCAL=NO 和 LOCAL=YES
我们在服务器上用sqlplus 连接数据库,在查看进程,会多出一条记录: oracle 16007 16006 0 10:27 ? 00:00:00 oraclenewccs (DESCRIPTION ...
- 用oradebug short_stack及strace -p分析oracle进程是否dead或出现故障
1,可以采用oradebug或者strace -p跟踪后台或前台进程是否dead或hang住2,如果进程出现故障,必会在对应的TRC文件写入最新信息,基于此可以获取非常重要的信息进一步分析与诊断 ...
- Oracle 定时任务讲解
前几天,公司的job调度出现了问题,由于权限管的严,没有查看oracle 一些重要的数据字典,后面联系DBA,是由于数据库切换到备机时,参数设置不对,导致db job没有正常调度. 今天刚好有时间,想 ...
- 【原创】查询占CPU高的oracle进程
1:首先使用TOP命令传到占用CPU高的SPID号 PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND3575 oracle 1 12 ...
随机推荐
- Axure 0基础实战入门 模拟一个app页面
Axure 0基础实战入门 模拟一个app页面 第一次接触axure9,尝试模拟一个app页面与交互 页面原型 我选择了一个免费的日程app,下载rp文件后导入到axure 模拟实现登录页面 新建两个 ...
- locale 设置
locale 介绍 在终端中,locale(本地化)设置是指与本地语言.国家和文化偏好有关的环境变量的配置.这些设定决定了程序如何处理和显示字符.时间.日期格式.货币等. 在类 Unix 系统(比如 ...
- Linux | Ubuntu 16.04.4 通过docker安装单机FastDFS
Ubuntu 16.04.4 通过docker安装单机fastdfs 前言 很久没有写技术播客了,这是一件很不应该的事情,做完了事情应该有沉淀的. 我先说一点前情提要,公司的fastdfs突然就挂了, ...
- C#项目—彩票选号
C#彩票选号软件 今天做了一个彩票选号的小软件,将学到的知识点总结如下(新手小白,多提意见): 1.写程序的思路 实体类(属性.方法) No1. 随机数组集合(属性) No2. 创建集合对象(构造方法 ...
- 用描述程序的方式emo,扎心了...
用描述程序的方式emo,扎心了... 众所周知写程序是个枯燥无聊的过程,再加上生活的不顺与坎坷,当程序语言与emo结合起来,看谁还说程序员不懂感情! 首当其冲的就是循环语句了 世界上最寂寞的感觉,是我 ...
- Dell R920 服务器iDrac口默认账号密码和IP
Dell服务器iDrac口默认账号密码和IP 账号:root 密码:calvin IP:192.168.0.120/24
- MYSQL数据库设计1
简单记录一下如何设计MySQL数据库 1.画出概念模型,概念模型是一个业务关系对照图,不需要定义字段类型什么的,仅仅是用于关系对照,指出对照关系 2.根据概念模型设计逻辑模型,逻辑模型需要包含字段的设 ...
- 自己服务器搭建docker组和环境
1. docker 当然首先安装一下docker,具体怎么 安装,网上搜一下.我用的ubuntu20系统,就是安装一个普通的软件的操作.安装后,运行一下docker run hello-world,运 ...
- Google Maps Embed API & JavaScript API
前言 很多年前写过一篇 Google Map 谷歌地图, 这篇算是翻新版本. Google Map Registration Google Maps Platform 是整个 Google Map 的 ...
- .NET 开源的功能强大的人脸识别 API
前言 人工智能时代,人脸识别技术已成为安全验证.身份识别和用户交互的关键工具. 给大家推荐一款.NET 开源提供了强大的人脸识别 API,工具不仅易于集成,还具备高效处理能力. 本文将介绍一款如何利用 ...