一、 进程结构总体框架 oracle是典型的多进程数据库。oracle实例运行起来后,会同时启动很多进程,由不同的进程负责不同的操作。 守护进程:GI进程和监听进程都是为oracle实例提供服务,但是不属于实例,是独立于实例之外的进程,这种进程就叫做守护进程。 进程:后台进程 --> 是oracle实例运行起来后自动运行的进程,完成oracle的基本功能。 前台进程 --> 用户连接,在数据库中创建的进程,用于执行用户操作。 监听进程 --> 也叫守护进程,是独立于oralce之外的进程。监听进程不依赖于oracle实例存在,是独立于oracle实例之外的进程,实例的启停并不会影响监听进程,监听进程只跟内核对接,然后将数据包转发给实例。监听简称只是实例和linux内核之间的桥梁。实例的停了,和实例也没什么关系。监听不依赖于实例存在。监听进程进程仅服务于实例,但不属于实例。 GI进程 --> grid集群管理软件运行的进程,是独立于oracle实例之外的进程。 二、常见各进程消息介绍 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实例中的进程都是独立运行的,这些进程的ppid都是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 --> 进程监视器进程。这个的作用是监视进程的。 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技术分享-oracle数据库进程
于 2022-11-16 11:56:07 首次发布