Oracle数据库后台进程详解
Oracle数据库实例由两部分组成:内存结构(SGA)和一组后台进程。这些后台进程就像是数据库的"隐形守护者",默默执行着各种维护任务,确保数据库平稳运行。
后台进程的分类
Oracle的后台进程主要分为两大类:
- 专注特定任务的进程:如负责缓存管理的DBWn进程、负责日志写入的LGWR进程等
- 执行各种杂务的进程:如作业队列进程、监控进程等
如何查看后台进程
我们可以通过以下SQL查询当前运行的Oracle后台进程:
SELECT paddr, name, description FROM v$bgprocess WHERE paddr <> '00' ORDER BY paddr DESC;或者通过查询V$PROCESS视图,其中PNAME不为空的记录也是后台进程。
核心后台进程详解
PMON(进程监视器)
PMON就像是数据库的"清洁工",主要负责:
- 清理异常终止的连接(如会话突然断开)
- 回滚未提交的事务
- 释放锁和系统资源
- 监控其他后台进程,必要时重启它们
SMON(系统监视器)
SMON是数据库的"系统管家",负责:
- 清理临时空间
- 合并空闲空间(在字典管理表空间中)
- 恢复因文件不可用而跳过的故障事务
- 在RAC环境中执行失败节点的实例恢复
- 清理数据字典中的"垃圾"记录
LREG(监听器注册进程)
LREG是数据库的"通信官",负责:
- 向Oracle监听器注册实例和服务
- 定期(约60秒)检查监听器状态
- 可以通过
ALTER SYSTEM REGISTER命令手动触发注册
DBWn(数据库写入进程)
DBWn是数据库的"数据搬运工",负责:
- 将脏数据块(修改过的块)从缓冲区写入数据文件
- 可以配置多个DBWn进程(最多100个)
- 主要采用异步I/O方式提高性能
LGWR(日志写入进程)
LGWR是数据库的"事务记录员",负责:
- 将重做日志缓冲区内容写入在线重做日志文件
- 在以下情况触发写入:
- 每3秒
- 提交事务时
- 重做缓冲区填满1/3或达到1MB
- 日志切换时
CKPT(检查点进程)
CKPT是数据库的"进度标记员",负责:
- 更新数据文件头部的检查点信息
- 协助DBWn推进检查点位置
ARCn(归档进程)
ARCn是数据库的"历史档案管理员",负责:
- 在LGWR填满在线重做日志后将其复制到归档位置
- 通常配置为至少复制到两个不同位置
- 为数据库恢复提供基础
其他重要后台进程
RECO(分布式数据库恢复进程)
RECO专门处理分布式事务中的问题:
- 恢复处于"准备"状态的分布式事务
- 在两阶段提交过程中出现故障时发挥作用
MMON/MMNL(可管理性监控进程)
这些进程负责:
- 收集性能统计数据
- 自动检测数据库性能问题
- 实现数据库自调优功能
CJQ0和Jnnn(作业队列进程)
这些进程负责:
- 执行DBMS_JOB或DBMS_SCHEDULER安排的作业
- 可以配置最多1000个作业队列进程
- 按需启动,空闲时自动退出
QMNC和Qnnn(高级队列进程)
这些进程负责:
- 监控和管理Oracle高级队列(AQ)
- 处理消息通知和队列传播
- 最多可配置40个进程
从属进程
Oracle还有两类特殊的从属进程:
- I/O从属进程:
- 在不支持异步I/O的系统上模拟异步I/O
- 主要用于磁带设备操作和DBWn/LGWR的辅助
- 并行查询从属进程(Pnnn):
- 支持并行查询执行
- 将大任务分解为多个小任务并行处理
总结
Oracle的后台进程各司其职,共同维护数据库的健康运行。了解这些进程的功能对于数据库性能调优和故障排查至关重要。随着Oracle版本的更新,后台进程的数量和功能也在不断演进,但核心进程的基本职责保持相对稳定。
------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
















