数据库的“隐形守护者”:深度解析Oracle后台进程及其核心功能
数据库的“隐形守护者”:深度解析Oracle后台进程及其核心功能
- 一、开篇奇想:Oracle实例如果是一个人,后台进程就是他的器官
- 二、全景协作图:一条UPDATE语句背后的进程交响乐
- 三、后台进程的本质定义:什么是后台进程?
- 1.后台进程的精准定义
- 2.后台进程的分类体系
- 四、八大核心后台进程逐一拆解
- 1.DBWn(Database Writer):数据库写进程
- 2.LGWR(Log Writer):日志写进程
- 3.CKPT(Checkpoint Process):检查点进程
- 4.SMON(System Monitor):系统监控进程
- 5.PMON(Process Monitor):进程监控进程
- 6.ARCn(Archiver):归档进程
- 7.CJQ0与Jnnn(Job Queue Coordinator & Processes):作业队列进程
- 8.MMON与MMNL(Manageability Monitor):可管理性监控进程
- 五、后台进程协同作战:实例恢复的完整流程
- 六、八大后台进程速查表
- 七、总结:记住这个“人体器官类比”就够了
🌺The Begin🌺点点关注,收藏不迷路🌺 ⬇ ⬇ 底部 ⬇ ⬇ |
一、开篇奇想:Oracle实例如果是一个人,后台进程就是他的器官
当你执行STARTUP启动Oracle数据库时,在服务器上运行ps -ef | grep ora_,你会看到一系列以ora_开头的进程整齐列队。这些不是Bug,也不是病毒,而是Oracle数据库赖以生存的“器官”——后台进程。
如果把Oracle实例比作一个活生生的人,那么SGA就是大脑皮层(记忆与思考),而后台进程就是心、肝、脾、肺、肾——各司其职,默默运转,缺一不可。
用户进程只需发号施令,真正干苦力活、擦屁股活、写日记活、搞卫生活的,全是这些后台进程。今天这篇文章,带你从“人体器官”的视角,彻底搞懂Oracle后台进程的分工与协作。
二、全景协作图:一条UPDATE语句背后的进程交响乐
先通过一张流程图,看清当用户执行一条简单的UPDATE语句时,各后台进程是如何协同工作的:
关键解读:
- 红色路径(LGWR):事务提交时唯一的同步写入,性能关键路径。
- 蓝色路径(DBWn):异步批量写入,不阻塞用户操作。
- 橘色路径(CKPT):定期触发,减少实例恢复时间。
- 绿色守护(PMON/SMON):持续后台监控,处理异常和回收资源。
三、后台进程的本质定义:什么是后台进程?
1.后台进程的精准定义
核心描述:
后台进程是Oracle实例启动时自动创建的一组操作系统进程,它们独立于用户连接,专门负责执行I/O操作、监控系统状态、维护数据一致性、处理异常恢复等关键任务。
后台进程的三大特征:
- 独立运行:不依赖任何用户会话,实例不关闭,它们就在运行。
- 异步处理:将用户进程的I/O等待转化为后台的异步处理,大幅提升用户体验。
- 强制存在:某些核心进程缺失,实例将立即崩溃。
如何查看后台进程?
-- 查看所有后台进程SELECTpname,descriptionFROMV$BGPROCESSWHEREpnameISNOTNULL;-- Linux命令行查看ps-ef|grep ora_|grep-v grep2.后台进程的分类体系
Oracle后台进程按重要性分为两大类:
| 分类 | 特征 | 代表进程 |
|---|---|---|
| 强制后台进程 | 实例运行必须有,缺失会导致实例崩溃 | DBWn, LGWR, CKPT, SMON, PMON, RECO |
| 可选后台进程 | 根据配置或功能按需启动 | ARCn, CJQ0, Jnnn, Dnnn, MMON, MMNL |
以下重点介绍8个最常见、最核心的后台进程。
四、八大核心后台进程逐一拆解
1.DBWn(Database Writer):数据库写进程
核心职责:将Buffer Cache中的脏块(Dirty Buffers)批量写入数据文件。
为什么需要DBWn?
- 用户修改数据只是改了内存中的Buffer Cache,并没有直接写磁盘。
- 如果每次修改都同步写磁盘,数据库性能将惨不忍睹。
- DBWn负责延迟批量写入,实现异步I/O。
DBWn被唤醒的四种情况:
- 检查点触发:CKPT通知DBWn开始写脏块。
- Buffer Cache空间不足:需要腾出空闲缓冲区。
- 脏块数量达到阈值:脏列表太长,必须清理。
- 超时触发:每3秒自动醒来检查一次。
进程数量:默认可有多个(DBW0~DBWn),通过参数DB_WRITER_PROCESSES控制。
2.LGWR(Log Writer):日志写进程
核心职责:将Redo Log Buffer中的重做记录写入联机重做日志文件。
为什么LGWR是性能关键?
- 事务提交时,LGWR必须将对应的重做记录写入磁盘,事务才算提交成功。
- 这是整个Oracle体系中最关键的同步操作,直接影响事务响应时间。
LGWR被触发的五种情况:
- 用户提交COMMIT:必须立即写入。
- Redo Log Buffer满1/3:提前刷盘。
- Redo Log Buffer达到1MB:批量刷盘。
- DBWn写脏块之前:先写日志,后写数据(Write-Ahead Logging原则)。
- 超时触发:每3秒自动检查。
LGWR只有一个:这是单点,必须通过高性能磁盘(如SSD)保障其写入速度。
3.CKPT(Checkpoint Process):检查点进程
核心职责:触发检查点,通知DBWn写脏块,更新控制文件和数据文件头。
检查点的核心作用:
- 缩短实例恢复时间。检查点越频繁,崩溃后需要前滚的日志越少。
- 将Buffer Cache中的脏块批量刷盘,保持数据文件与日志的同步。
CKPT的三种触发方式:
- 日志切换:每次切换日志组时自动触发。
- 手动触发:
ALTER SYSTEM CHECKPOINT; - 参数控制:通过
FAST_START_MTTR_TARGET设置恢复时间目标。
CKPT与DBWn的关系:
- CKPT是“指挥官”,DBWn是“执行者”。
- CKPT通知DBWn开始写,但CKPT自己不写数据块。
4.SMON(System Monitor):系统监控进程
核心职责:执行实例恢复、回收临时段、合并空闲空间。
SMON的五大任务:
- 实例恢复(Crash Recovery):数据库异常关闭后重新启动时,自动进行前滚和回滚。
- 回收临时段:清理排序操作留下的临时表空间碎片。
- 合并空闲空间:将相邻的空闲区合并为大块,减少碎片。
- 清理不再使用的回滚段。
- 在RAC环境中执行节点恢复。
SMON是Oracle的“自动修复工”,很多情况下数据库挂了能自动恢复,全靠它。
5.PMON(Process Monitor):进程监控进程
核心职责:监控所有服务器进程,清理失败进程持有的资源。
PMON的四大任务:
- 检测进程死亡:定期轮询所有服务器进程。
- 释放锁:用户异常断连,PMON释放该用户持有的所有锁。
- 回滚未提交事务:清理死进程的事务。
- 释放资源:释放SGA中的Latch、Buffer Pin等资源。
PMON与SMON的区别:
- PMON管“个人卫生”,处理单个进程的问题。
- SMON管“公共卫生”,处理系统级的问题。
6.ARCn(Archiver):归档进程
核心职责:在归档模式下,将填满的联机重做日志复制到归档日志。
为什么必须开启归档?
- 不开归档,联机日志循环覆盖后,之前的变更记录永久丢失,无法进行介质恢复。
- 开启归档,所有历史变更都被永久保存,可以恢复到任意时间点。
ARCn的数量:默认可有多个(ARC0~ARCn),通过参数LOG_ARCHIVE_MAX_PROCESSES控制。
LGWR与ARCn的关系:
- LGWR写联机日志(速度快,循环写)。
- ARCn读联机日志并复制到归档日志(速度慢,顺序写)。
7.CJQ0与Jnnn(Job Queue Coordinator & Processes):作业队列进程
核心职责:执行Oracle调度器(DBMS_SCHEDULER)定义的定时任务。
工作原理:
- CJQ0是协调器,定期检查作业队列。
- 发现有到期任务,启动Jnnn进程执行任务。
- 任务执行完毕,Jnnn进程退出。
典型应用:
- 定期收集统计信息(Gather Stats Job)。
- 定时数据泵导出。
- 自动空间管理任务。
8.MMON与MMNL(Manageability Monitor):可管理性监控进程
核心职责:支持Oracle的自动工作负载仓库(AWR),收集性能数据。
分工协作:
- MMON:每小时生成一份AWR快照,分析性能趋势。
- MMNL:将Active Session History(ASH)数据从SGA刷到磁盘。
没有这两个进程,Oracle的自动诊断和性能调优将无从谈起。
五、后台进程协同作战:实例恢复的完整流程
当数据库异常崩溃后重启,SMON如何协调各进程完成自动恢复?
整个恢复过程全自动,无需DBA手工干预。这就是Oracle后台进程协作的精妙之处。
六、八大后台进程速查表
| 序号 | 进程名 | 核心使命 | 如果挂掉会怎样 |
|---|---|---|---|
| 1 | DBWn | 将脏块写入数据文件 | Buffer Cache满后数据库挂起 |
| 2 | LGWR | 将重做记录写入联机日志 | 事务无法提交,数据库立即瘫痪 |
| 3 | CKPT | 触发检查点,更新文件头 | 实例恢复时间极长 |
| 4 | SMON | 实例恢复、空间回收 | 崩溃后无法自动恢复 |
| 5 | PMON | 清理死进程资源 | 锁不释放,其他用户阻塞 |
| 6 | ARCn | 复制归档日志 | 日志切换卡住,数据库挂起 |
| 7 | CJQ0 | 调度定时任务 | 所有定时任务停止执行 |
| 8 | MMON | 生成AWR快照 | 无法分析历史性能 |
七、总结:记住这个“人体器官类比”就够了
【后台进程 = Oracle实例的器官系统】
- DBWn是消化系统:负责把营养(数据)输送到仓库(数据文件)。
- LGWR是循环系统:心脏跳动,记录每一次血液流动(数据变更)。
- CKPT是神经系统:发出指令,告诉各器官该干活了。
- SMON是免疫系统:生病了自动修复,清理体内垃圾。
- PMON是排泄系统:单个细胞坏死,及时清理,防止感染扩散。
理解后台进程,你就理解了Oracle为什么能够号称“永不宕机”。这些默默无闻的守护者,才是Oracle稳定性的真正基石。
你在日常运维中,是否遇到过某个后台进程异常导致数据库故障的经历?是通过什么视图或日志定位到问题的?欢迎在评论区分享你的排障故事。
🌺The End🌺点点关注,收藏不迷路🌺 ⬆ ⬆ 顶部 ⬆ ⬆ |
