重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1451|回复: 0
打印 上一主题 下一主题

[讨论] PMON、SMON、DBWn、LGWR、CKPT的描述

[复制链接]
跳转到指定楼层
楼主
发表于 2023-9-1 16:58:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、PMON-进程监控进程
pmon(Process Monitor process)用于监控其他后台进程。负责在连接出现异常中止后进行清理工作。例如,一个专用服务器进程崩溃或者出于某种原因被结束掉,就要由PMON进程负责善后(恢复或者撤销工作),并释放资源。PMON会回滚未提交的工作,释放锁,并释放之前为失败进程分配的SGA资源。
PMON还负责监视其他Oracle后台进程,并在必要时重启这些后台进程。


2、SMON-系统监控进程

Smon(System Monitor Process)负责各种系统级清理职责。上面说的PMON进程所对应的是各个进程,而SMON则是从系统级的视角出发,成为了数据库上的垃圾回收器。

3、DBWn-数据库块写入进程
DBWn(Database Writer Process)是数据库块写入进程。负责将buffer cache中的脏块写入磁盘,为buffer cache腾出更多空间(释放缓冲区来读入其他数据),再就是为了推进检查点(将在线重做日志文件中的位置前移,如果出现数据库崩溃,Oracle会从这个位置开始读取来恢复实例)。


4、LGWR-日志写入器进程

Lgwr进程负责将SGA中重做日志缓冲区(redo log buffer)的内容刷新输出到磁盘。LGWR是顺序写(sequential write),比离散写效率高。

5、CKPT-检查点进程

检查点(checkpoint)是一种机制。它的作用是通知dbwn进程将数据库缓冲区缓存(buffer cache)中的已修改的数据脏块写入到disk中,ckpt进程负责通知 dbwn进程。

要修改数据库中的数据,首先需要将数据从数据文件中取出到SGA的buffer cache中,这里是要修改数据的一个副本,在这里进行修改的同时,会将变更向量写入到SGA中的redo log buffer内存区域,然后通过lgwr进程实际写入到磁盘上的redo log中。到这一步,修改的数据还没有实际写入磁盘,但是redo log中已经有记录。

假设这时候数据库崩溃了,那么内存中修改过的、尚未写入数据文件的数据会丢失。在下一次数据库启动之后,Oracle会通过redo log进行事务重演,也就是进行前滚操作,将数据库恢复到崩溃前的状态(这里我的理解是将redo log中的记录应用到数据文件,这样就保持了一致性),然后数据库可以打开使用,在之后Oracle会将没有提交的数据进行回滚。

崩溃后打开数据库,需要先读取redo log完成前滚,需要前滚的数据越多,那么打开时间越长。检查点的存在就是为了缩短这个恢复时间。

检查点位置是由buffer cache中最旧的脏缓冲区来确定的。

检查点位置作为一个指向重做流的指针,并存储在控制文件中,和在每个数据文件头中。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-29 01:26 , Processed in 0.081573 second(s), 25 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表