Oracle 后台进程详解

Oracle 后台进程详解

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Oracle 后台进程负责数据库内部管理[1]:

关键

  • PMON
  • SMON
  • DBWn
  • LGWR
  • CKPT
  • ARCn

详细见:Oracle 后台进程详解


2. PMON(Process Monitor)

2.1 职责

- 监控用户进程
- 异常断开后清理
- 释放锁
- 回滚未提交事务
- 注册服务到监听器

2.2 触发

- 进程异常终止
- 定期检查

3. SMON(System Monitor)

3.1 职责

- 实例恢复
- 清理临时段
- 合并空闲空间
- 维护 SMON_SCN_TIME

3.2 实例恢复

1. 前滚(Redo)
2. 打开数据库
3. 回滚未提交(Undo)

4. DBWn(Database Writer)

4.1 职责

- 写脏块到数据文件
- Buffer Cache → Disk
- 异步 I/O

4.2 触发

- 检查点
- Dirty List 满
- LRU 满
- 3 秒
- 表空间 OFFLINE
- DROP / TRUNCATE

4.3 多个

ALTER SYSTEM SET db_writer_processes = 4;

5. LGWR(Log Writer)

5.1 职责

- 写 Redo 到 Redo Log File
- Redo Log Buffer → Disk
- 顺序 I/O

5.2 触发

- 提交
- 1/3 满
- 1MB
- 3 秒
- DBWn 写之前

6. CKPT(Checkpoint)

6.1 职责

- 触发检查点
- 更新控制文件
- 更新数据文件头
- 通知 DBWn

6.2 类型

- 完全检查点
- 增量检查点
- 局部检查点

详细见:Oracle 检查点机制详解


7. ARCn(Archiver)

7.1 职责

- 复制 Redo Log 到归档
- 归档模式
- Data Guard

7.2 多个

ALTER SYSTEM SET log_archive_max_processes = 4;

7.3 触发

- 日志切换
- LGWR 通知

8. MMON(Manageability Monitor)

8.1 职责

- AWR 快照
- 告警
- MMON_SLAVE

8.2 AWR

- 自动快照
- 默认 1 小时
- 保留 8 天

详细见:Oracle AWR 性能报告


9. MMNL(Manageability Monitor Light)

- ASH 采样
- 活动会话历史
- 1 秒一次

详细见:Oracle ASH 详解


10. RECO(Recoverer)

- 分布式事务恢复
- 悬挂事务
- 自动解决

11. LREG(Listener Registration)(12c+)

- 注册服务到监听器
- 替代 PMON 的注册职责

12. 其他进程

12.1 CJQn

- 作业队列
- DBMS_SCHEDULER

12.2 Dnnn

- Dispatcher
- 共享服务器

12.3 Snnn

- Shared Server
- 共享服务器

12.4 Wnnn

- Space Management
- 自动空间管理

13. RAC 进程

13.1 LMS

- Lock Manager Server
- Cache Fusion
- 块传输

13.2 LMD

- Lock Manager Daemon
- 全局锁
- 死锁检测

13.3 LMON

- Lock Monitor
- 集群管理
- 节点加入/离开

13.4 LCKn

- Lock Process
- 非 Cache Fusion 资源

详细见:Oracle RAC 架构详解


14. ASM 进程

14.1 RBAL

- Rebalance Master
- 协调 Rebalance

14.2 ARBn

- Actual Rebalancer
- 执行 Rebalance

14.3 ASMB

- ASM Background
- ASM 与 DB 通信

详细见:Oracle ASM 详解


15. 查看

15.1 后台进程

SELECT 
  name, description 
FROM v$bgprocess 
WHERE paddr <> '00';

15.2 进程

SELECT 
  spid, program, pid
FROM v$process
WHERE background IS NOT NULL;

15.3 OS 进程

ps -ef | grep ora_

16. 参数

16.1 DBWn

ALTER SYSTEM SET db_writer_processes = 4 SCOPE=SPFILE;

16.2 ARCn

ALTER SYSTEM SET log_archive_max_processes = 4;

16.3 并行

ALTER SYSTEM SET parallel_max_servers = 64;

17. 常见坑与排错

17.1 DBWn 慢

- I/O 瓶颈
- 增大 DBWn 数
- SSD

17.2 LGWR 慢

- log file sync 高
- Redo Log SSD
- 增大 Redo Log

17.3 ARCn 慢

- 归档滞后
- 增大 ARCn 数
- 增大归档目标

18. 监控

18.1 等待事件

SELECT event, total_waits, time_waited
FROM v$system_event
WHERE event LIKE 'log file%' OR event LIKE 'db file%';

18.2 进程活动

SELECT 
  program, 
  COUNT(*) AS cnt
FROM v$session
WHERE type = 'BACKGROUND'
GROUP BY program;

19. 最佳实践

  1. DBWn 数:CPU/8
  2. ARCn:4
  3. LGWR:1(重要)
  4. 监控等待:性能
  5. I/O 分布:避免瓶颈
  6. 参数调整:负载
  7. RAC 进程:集群
  8. ASM 进程:存储
  9. 测试:变更
  10. 文档化:配置

20. 参考资料

[1] Oracle Database Concepts 19c, “Background Processes” https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/background-processes.html