当前位置: 首页 > news >正文

ORACLE中各个进程

1、 进程结构总体框架

oracle是典型的多进程数据库。oracle实例运行起来后,会同时启动很多进程,由不同的进程负责不同的操作。

守护进程:GI(Grid Infrastructure)进程和监听进程都是为oracle实例提供服务,但是不属于实例,是独立于实例之外的进程,这种进程就叫做守护进程。

进程

后台进程 --> 是oracle实例运行起来后自动运行的进程,完成oracle的基本功能。

前台进程 --> 用户连接,在数据库中创建的进程,用于执行用户操作。

监听进程 --> 也叫守护进程,是独立于oracle之外的进程。监听进程不依赖于oracle实例存在,是独立于oracle实例之外的进程,实例的启停并不会影响监听进程,监听进程只跟内核对接,然后将数据包转发给实例。监听进程只是实例和linux内核之间的桥梁。和实例也没什么关系。监听不依赖于实例存在。监听进程进程仅服务于实例,但不属于实例。

GI进程 --> grid集群管理软件运行的进程,是独立于oracle实例之外的进程。

2、常见各进程消息介绍

1、DBWn进程

必须存在的进程 --> database writer n --> 数据写进程,在进程中看到n,意思就是该类型进程可以存在多个,并且进程之间的关系为并发

作用:DBWn将内存中的脏块脏块含有脏数据,脏数据就是用户修改过的数据落盘到硬盘中。为了提高刷脏效率(脏块落盘效率),会存在多个DBWn进程并发刷脏。

刷脏的两种场景:(1)DBWn进程刷脏的操作跟事务是异步发生的,会以一定的频率进行异步刷脏。(2)触发检查点,进行刷脏。

检查点(checkpoint) --> 所谓检查点,就是在数据库中设置一个时间点,保证该时间点之前的脏块都落盘了。一旦触发了检查点,就会进行刷脏操作,保证该时间点的数据块中的数据一致。

检查点的作用:(1)促进刷脏。在buffer cache中提供更多的可用空间,用于加载硬盘数据块。(2)推进检查点(往后推进,即离现在更近的时间点),能减少数据库恢复时间。如果不积极落盘,buffer cache中存在大量脏块,一旦发生异常,意味着大量的脏块需要重构,所以在实例启动前,脏块越多,重构时间长,数据恢复时间长,导致停机时间长。

数据库中数据安全通过redo保证--> 日志先行,redo log落盘和事务提交时同步的。redo log如何保证数据安全:真正的数据实际是在buffer cache中的脏块中的,一旦故障,启动数据库,使用硬盘中数据块 + redo log重构数据块。

2、LGWR进程(日志写进程)

LGWR --> log writer进程,负责将sga中的redo log buffer中的redo log落盘到redo log file中。实现和保证redo log的持久化。实际上就是负责redo log落盘

redo log 设计的目的:(1)redo log就是为了替代脏块落盘。脏块落盘因为数据量大,随机IO导致脏块落盘性能差。而redo log的数据量小,物理IO中的顺序IO,所以redo log落盘性能好。无论是脏块落盘还是redo log落盘,最终的目的,都是实现事务的持久化,保证数据的安全性。

redo log落盘和事务提交是同步的。当事务进行提交时,执行commit操作,当redo log落盘成功后,给用户返回commit提交成功。

在以下情况,lgwr会触发redo落盘操作:(1)事务提交commit。(2)每3秒回进行一次redo log落盘。(3)重做日志缓冲区redo log buffer中redo log达到1/3时。(4)每当redo log满1M。

3、ckpt进程(检查点进程)

cjpt--> checkpoint。这个进程的作用就是专门设置和维护检查点检查点的作用就是为了尽量缩短数据库恢复时间。

相关命令:alter system checkpoint; --> 生成检查点(特殊的时间点),生成检查点的时,DBWn和lgwr都会工作,对这个检查点之前的脏块都会落盘。

一旦触发检查点,会触发脏块落盘。

检查点(checkpoint) --> 所谓检查点,就是在数据库中设置一个时间点,保证该时间点之前的脏块都落盘了。一旦触发了检查点,就会进行刷脏操作,保证该时间点的数据块中的数据一致。

检查点的作用:(1)促进刷脏。在buffer cache中提供更多的可用空间,用于加载硬盘数据块。(2)推进检查点,能减少数据库恢复时间。如果不积极落盘,buffer cache中存在大量脏块,一旦发生异常,意味着大量的脏块需要重构,所以在实例启动前,脏块越多,重构时间长,数据恢复时间长,导致停机时间长。

数据库中数据安全通过redo保证--> 日志先行,redo log落盘和事务提交时同步的。redo log如何保证数据安全:真正的数据实际是在buffer cache中的脏块中的,一旦故障,启动数据库,使用硬盘中数据块 + redo log重构数据块。

4、smon进程(系统监视器进程)

smon进程 --> system moniter系统监视器进程。

查看oracle实例进程时,仅需要查看smon进程即可。smon进程是整个oracle实例的主进程。他的作用就是管理oracle中的其他进程。

主要作用:(1)管理其他进程。(2)在实例启动时执行恢复。(3)清除不使用的临时段。

oracle实例中的进程都是独立运行的,这些进程的pid都是1。换句话将这些进程的父进程都是linux操作系统的主进程。

kill smon 会导致实例结束的。

kill 非smon 实例不会结束,且会被自动运行起来。

查看数据库恢复:告警日志 10g $ORACLE_BASE/admin/db_name/bdump

11g $ORACLE_BASE/diag/rdbms/db_name/SID/trace/alert_SID.log

在实例中查看告警日志路径:show parameter back; --> backgroud_dump_dest

5、pmon进程(进程监视器进程)

pmon --> process monitor 进程监视器进程。这个的作用是监视进程的。

smon/pmon本身作为监视器进程都会对其他进程进行监视。

smon --> system --> 监视的是后台进程

pmon --> process --> 监视的是服务器进程

客户连接实例,会创建对应的服务器进程,可以执行的SQL语句等都是在服务器进程中完成的。客户连接中,事务执行期间,实际上都是服务器进程在工作。

客户端主机 --> 用户进程 --> sqlplus进程

服务器端主机 --> 服务器进程(前台进程)

客户在用户进程中进行SQL编写,然后回车会发送给服务器进程。

用户进程 --> 服务器进程 --> 执行

客户端主机上的用户进程连接数据库汇总的服务器进程,进行操作。

pmon作用1:用户进程先发送update语句到服务器进程 --> 用户进程崩溃 --> 导致用户进程并没有发送commit/rollback给服务进程。服务器进程已经执行了update语句,意味着数据的修改,脏块的产生。pmon检测到这种情况发生,会自动在服务器进程中进行回滚操作,保证数据不受影响。也是为了释放锁,避免长期的锁等待。

pmon作用2:本身客户端发送exit,意味着服务器进程结束 + pga释放。pmon负责结束服务器进程并释放pga。

pmon作用3:pmon会检测会话的空闲时间,超过超时时间后,释放空间会话占用的资源。

pmon作用4:在监听中自动注册数据库实例。或者说将数据库实例加入到监听中。

netca --> 创建监听 --> 通过netca创建的监听器,动态监听 --> 依赖于实例的自动注册,这个自动注册也是由pmon来完成的。

理解:客户端连接到实例所在的服务端,客户端会产生一个进程叫用户进程,数据库所在的实例的服务器上也会有一个进程叫服务器进程,正常是用户进程向服务器进程发送命令,服务器进程去处理后返回给用户进程,但是有一个特殊情况,就是用户进程刚发完update等这种处理操作后死了,但是服务器进程对数据库已经进行了脏页的修改,为了保证数据不受影响,有了pmon进程,进程发现了这种情况后,就会自动进行回滚,并且对服务器进程进行结束和释放pga。

6、ARCn进程(归档进程)

ARCn --> archive归档 --> 归档进程,并不是oracle必须的进程

归档进程 --> 负责将redo log file中的数据转储到归档日志文件中

buffer cache --> 数据块 --> 对数据块的修改(数据偏移量) --> redo log --> redo log buffer内存 --> lgwr进程 --> redo log file(硬盘) --> ARCn进程转储redo log --> archive log file(硬盘)

为什么要转储到archive log fie中:因为redo log file循环覆盖。

转自:浅谈ORACLE中各个进程_爱划水的小亮的博客-CSDN博客_oracle进程

相关文章:

  • 在Linux下开发GUI程序的方法
  • QT工具——moc、rcc、uic
  • Electron如何打包使其支持龙芯和方腾、兆芯平台的麒麟系统
  • X Window与Microsoft Windows的相同点和不同点
  • X Window
  • C语言的内存管理-堆、栈等
  • Python 自动化操作 Excel
  • Lambda表达式
  • spinlock 使用介绍
  • Spring事务(Transaction)
  • Ajax-hook 原理解析
  • JavaScript Array 对象
  • SOCKET句柄泄露带来的内存灾难
  • 浪潮服务器安装Windows Server 2008 R2蓝屏
  • Linux服务器安装Windows虚拟机
  • 时间复杂度分析经典问题——最大子序列和
  • “大数据应用场景”之隔壁老王(连载四)
  • 【译】理解JavaScript:new 关键字
  • 4. 路由到控制器 - Laravel从零开始教程
  • Android 控件背景颜色处理
  • Angular 2 DI - IoC DI - 1
  • CSS相对定位
  • happypack两次报错的问题
  • java多线程
  • Mysql5.6主从复制
  • PaddlePaddle-GitHub的正确打开姿势
  • Redis在Web项目中的应用与实践
  • Vue全家桶实现一个Web App
  • Vue组件定义
  • 关于 Cirru Editor 存储格式
  • 异常机制详解
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 第二十章:异步和文件I/O.(二十三)
  • 昨天1024程序员节,我故意写了个死循环~
  • ​【已解决】npm install​卡主不动的情况
  • #{}和${}的区别是什么 -- java面试
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (java)关于Thread的挂起和恢复
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十六)串口UART
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)VirtualBox安装增强功能
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • . NET自动找可写目录
  • .Net 4.0并行库实用性演练
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET命令行(CLI)常用命令
  • .net中调用windows performance记录性能信息
  • .project文件
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改