Skip to content

Oracle 进程结构

后台进程

主要后台进程

系统监控进程(System Monitor, SMON)

  • 功能:执行实例恢复、清理临时段、合并空闲空间等系统级维护任务
  • 职责
    • 实例启动时执行实例恢复
    • 清理不再使用的临时段
    • 合并数据文件中的相邻空闲空间
    • 维护数据字典的一致性
  • 重要性:SMON是Oracle数据库最重要的后台进程之一,负责数据库的基本维护

进程监控进程(Process Monitor, PMON)

  • 功能:监控和清理异常终止的数据库进程
  • 职责
    • 清理异常终止的服务器进程
    • 释放异常终止进程占用的资源
    • 回滚未提交的事务
    • 释放锁资源
    • 向监听进程注册数据库服务
  • 重要性:PMON确保数据库进程的健康运行,防止资源泄漏

数据库写入进程(Database Writer, DBWn)

  • 功能:将数据库缓冲区高速缓存中的脏数据写入数据文件
  • 职责
    • 当缓冲区达到脏数据阈值时写入
    • 当发生检查点时写入
    • 当需要新缓冲区且没有可用缓冲区时写入
    • 当表空间变为只读或离线时写入
  • 数量:Oracle 10g及以上版本支持多个DBWn进程(DBW0-DBW9, DBWa-DBWj)
  • 重要性:DBWn直接影响数据库的I/O性能

日志写入进程(Log Writer, LGWR)

  • 功能:将重做日志缓冲区中的重做记录写入重做日志文件
  • 职责
    • 当事务提交时写入
    • 当日志缓冲区达到1/3满或包含1MB重做数据时写入
    • 每3秒写入一次
    • 当DBWn需要写入脏缓冲区且这些缓冲区的重做记录尚未写入时写入
  • 重要性:LGWR确保事务的持久性,是Oracle事务处理的关键进程

检查点进程(Checkpoint, CKPT)

  • 功能:在数据库发生检查点时更新控制文件和数据文件头
  • 职责
    • 更新控制文件中的检查点信息
    • 更新数据文件头中的检查点信息
    • 通知DBWn将脏缓冲区写入数据文件
  • 重要性:CKPT确保数据库的一致性,加速实例恢复过程

恢复进程(Recoverer, RECO)

  • 功能:处理分布式事务的恢复
  • 职责
    • 自动恢复失败的分布式事务
    • 解决分布式事务中的悬而未决事务
  • 重要性:RECO确保分布式事务的完整性

归档进程(Archiver, ARCn)

  • 功能:在归档模式下,将重做日志文件归档到归档日志文件
  • 职责
    • 当重做日志文件切换时,将旧的重做日志文件复制到归档目录
    • 生成归档日志文件
    • 维护归档日志文件的完整性
  • 数量:支持多个ARCn进程(ARC0-ARC9)
  • 重要性:ARCn确保数据库可以进行完全恢复,是备份恢复策略的关键组成部分

作业队列进程(Job Queue Processes, Jnnn)

  • 功能:执行数据库作业和调度任务
  • 职责
    • 执行DBMS_JOB提交的作业
    • 执行Oracle Scheduler调度的任务
  • 数量:由JOB_QUEUE_PROCESSES参数控制
  • 重要性:Jnnn负责数据库自动化任务的执行

快照刷新进程(Snapshot Refresh Processes, Qmnn)

  • 功能:刷新物化视图
  • 职责
    • 执行物化视图的刷新操作
    • 管理物化视图的刷新队列
  • 数量:由AQ_TM_PROCESSES参数控制
  • 重要性:Qmnn确保物化视图数据的及时性

内存管理器进程(Memory Manager, MMAN)

  • 功能:在自动内存管理(AMM)模式下管理内存分配
  • 职责
    • 监控内存使用情况
    • 根据需要调整SGA和PGA的大小
    • 确保内存资源的合理分配
  • 重要性:MMAN是Oracle 11g引入的进程,负责自动内存管理

自动诊断仓库进程(Automatic Diagnostic Repository, AD00)

  • 功能:管理自动诊断仓库(ADR)
  • 职责
    • 收集和处理诊断数据
    • 生成事件打包文件
    • 管理ADR的空间使用
  • 重要性:AD00是Oracle 11g引入的进程,负责数据库的自我诊断

空间管理协调进程(Space Management Coordinator, SMCO)

  • 功能:协调空间管理任务
  • 职责
    • 管理段的空间分配
    • 执行空间回收操作
    • 协调空间管理相关的后台任务
  • 重要性:SMCO是Oracle 11g引入的进程,负责自动空间管理

可选后台进程

并行查询协调进程(Parallel Query Coordinator, PQ Coordinator)

  • 功能:协调并行查询操作
  • 职责
    • 将查询分解为子任务
    • 分配子任务给并行执行服务器
    • 收集和汇总查询结果
  • 重要性:PQ Coordinator提高大型查询的性能

并行执行服务器进程(Parallel Execution Servers, Pnnn)

  • 功能:执行并行查询的子任务
  • 职责
    • 执行分配的子查询任务
    • 向并行查询协调进程返回结果
  • 数量:由PARALLEL_MAX_SERVERS参数控制
  • 重要性:Pnnn是并行查询的实际执行者

高级队列进程(Advanced Queueing Processes, AQnn)

  • 功能:管理高级队列
  • 职责
    • 处理队列消息
    • 管理队列订阅
    • 执行队列监控任务
  • 重要性:AQnn支持Oracle的消息传递功能

数据 guard 进程(Data Guard Processes)

  • 功能:支持Data Guard功能
  • 职责
    • 日志传输进程(Log Transport Process):将重做日志传输到备用数据库
    • 日志应用进程(Log Apply Process):将重做日志应用到备用数据库
    • 故障转移协调进程(Failover Coordinator):协调故障转移操作
  • 重要性:Data Guard进程确保备用数据库的同步和可用性

服务器进程

服务器进程类型

专用服务器进程(Dedicated Server Process)

  • 功能:为每个用户会话创建一个专用的服务器进程
  • 特点
    • 一个用户会话对应一个服务器进程
    • 服务器进程与用户进程一一对应
    • 资源隔离性好,但资源利用率低
  • 适用场景:连接数较少的环境,对安全性和隔离性要求高的场景

共享服务器进程(Shared Server Process)

  • 功能:多个用户会话共享一个服务器进程
  • 特点
    • 多个用户会话共享有限的服务器进程
    • 减少服务器进程的数量,提高资源利用率
    • 需要调度器进程(Dispatcher)协调
  • 适用场景:连接数较多的环境,如Web应用

服务器进程功能

  • 解析SQL语句:将用户提交的SQL语句解析为执行计划
  • 执行SQL语句:执行解析后的SQL语句
  • 返回结果:将查询结果返回给用户进程
  • 管理会话内存:为用户会话分配和管理PGA内存
  • 处理事务:执行用户提交的事务,确保事务的ACID特性

服务器进程管理

专用服务器模式管理

  • 参数DEDICATED_SERVERS 参数控制专用服务器进程的最大数量
  • 监控:通过 V$PROCESS 视图监控专用服务器进程
  • 调整:根据用户连接数和服务器资源调整专用服务器进程的数量

共享服务器模式管理

  • 参数
    • SHARED_SERVERS:共享服务器进程的最小数量
    • MAX_SHARED_SERVERS:共享服务器进程的最大数量
    • DISPATCHERS:调度器进程的配置
  • 监控:通过 V$SHARED_SERVERV$DISPATCHER 视图监控
  • 调整:根据用户连接数和服务器资源调整共享服务器进程的数量

用户进程

用户进程类型

客户端应用进程

  • 功能:用户直接运行的客户端应用程序
  • 例子
    • SQL*Plus命令行工具
    • Oracle SQL Developer图形界面工具
    • 自定义的客户端应用程序
  • 特点:直接与用户交互,生成SQL语句并发送给服务器进程

应用服务器进程

  • 功能:中间层应用服务器创建的进程
  • 例子
    • Web应用服务器进程
    • 应用服务器连接池进程
  • 特点:通过连接池管理数据库连接,提高连接效率

用户进程与服务器进程的通信

本地连接

  • 通信方式:通过操作系统的进程间通信机制
  • 特点:通信速度快,适用于客户端和数据库在同一台机器上的场景

网络连接

  • 通信方式:通过网络协议(如TCP/IP)
  • 特点:支持远程连接,适用于客户端和数据库在不同机器上的场景
  • 组件:需要Oracle Net Services(SQL*Net)支持

进程间通信

进程间通信方式

共享内存通信

  • 方式:通过SGA中的共享内存结构通信
  • 特点:速度快,效率高
  • 应用:后台进程之间通过SGA共享信息

信号通信

  • 方式:通过操作系统信号通信
  • 特点:简单,用于通知事件
  • 应用:进程间发送通知,如进程终止信号

管道通信

  • 方式:通过操作系统管道通信
  • 特点:用于进程间的数据传输
  • 应用:服务器进程与用户进程之间的通信

网络通信

  • 方式:通过网络协议通信
  • 特点:支持远程通信
  • 应用:分布式数据库环境中的进程通信

进程间通信机制

闩锁(Latches)

  • 功能:保护SGA中共享数据结构的互斥访问
  • 特点:轻量级锁,用于短期持有
  • 应用:保护缓冲区缓存、共享池等共享资源

锁(Locks)

  • 功能:保护数据库对象的并发访问
  • 特点:重量级锁,用于长期持有
  • 应用:保护表、行等数据库对象

信号量(Semaphores)

  • 功能:协调进程对共享资源的访问
  • 特点:操作系统级别的同步机制
  • 应用:控制进程对SGA的访问

进程管理

进程创建

后台进程创建

  • 时机:数据库实例启动时
  • 方式:由Oracle实例自动创建
  • 控制:根据数据库配置和版本自动决定创建哪些后台进程

服务器进程创建

  • 时机:用户连接到数据库时
  • 方式
    • 专用服务器模式:为每个连接创建一个服务器进程
    • 共享服务器模式:根据需要创建服务器进程,最多不超过MAX_SHARED_SERVERS

用户进程创建

  • 时机:用户启动客户端应用程序时
  • 方式:由用户应用程序创建
  • 控制:由用户或应用程序控制

进程终止

后台进程终止

  • 正常终止:数据库实例关闭时
  • 异常终止:进程崩溃或被操作系统终止
  • 影响:后台进程异常终止可能导致数据库实例崩溃

服务器进程终止

  • 正常终止:用户会话结束时
  • 异常终止:进程崩溃或被操作系统终止
  • 影响:服务器进程异常终止会导致用户会话中断,PMON会清理相关资源

用户进程终止

  • 正常终止:用户关闭客户端应用程序时
  • 异常终止:进程崩溃或被操作系统终止
  • 影响:用户进程异常终止会导致服务器进程成为僵尸进程,PMON会清理相关资源

进程参数配置

后台进程参数

参数描述默认值建议值
PROCESSES数据库最大进程数300根据实际连接数设置
SESSIONS数据库最大会话数自动计算通常为PROCESSES的1.1倍
TRANSACTIONS数据库最大事务数自动计算通常为SESSIONS的1.1倍
JOB_QUEUE_PROCESSES作业队列进程数1000根据作业数量设置
PARALLEL_MAX_SERVERS最大并行执行服务器进程数自动计算根据CPU核心数设置
DB_WRITER_PROCESSES数据库写入进程数自动计算根据CPU核心数和I/O子系统设置
LOG_ARCHIVE_MAX_PROCESSES最大归档进程数4根据归档需求设置

服务器进程参数

参数描述默认值建议值
SHARED_SERVERS共享服务器进程的最小数量0根据共享服务器模式的连接数设置
MAX_SHARED_SERVERS共享服务器进程的最大数量0根据共享服务器模式的最大连接数设置
DISPATCHERS调度器进程配置(PROTOCOL=TCP)根据网络协议和连接数设置
MAX_DISPATCHERS最大调度器进程数5根据连接数设置

进程监控

进程监控视图

进程监控视图

  • V$PROCESS:显示数据库中所有进程的信息
  • V$BGPROCESS:显示后台进程的信息
  • V$SESSION:显示用户会话的信息
  • V$SHARED_SERVER:显示共享服务器进程的信息
  • V$DISPATCHER:显示调度器进程的信息
  • V$PX_PROCESS:显示并行执行服务器进程的信息

进程性能视图

  • V$SYSSTAT:显示系统级别的性能统计信息
  • V$SESSTAT:显示会话级别的性能统计信息
  • V$PROCESS_MEMORY:显示进程的内存使用情况
  • V$LATCH:显示闩锁的使用情况
  • V$LOCK:显示锁的使用情况

进程监控工具

Oracle Enterprise Manager

  • 功能:图形化界面监控数据库进程
  • 优势:直观,易于使用,提供实时监控
  • 组件:进程仪表板,进程性能图表

SQL*Plus和SQL Developer

  • 功能:通过查询动态性能视图监控进程
  • 优势:灵活,可定制监控内容
  • 命令:使用SQL语句查询V$PROCESS等视图

OS级监控工具

  • 功能:监控操作系统级别的进程
  • 工具
    • Windows:任务管理器,性能监视器
    • Linux/Unix:top,ps,vmstat
  • 优势:可以监控进程的系统资源使用情况

进程监控指标

进程数量

  • 后台进程数:根据数据库版本和配置不同而不同
  • 服务器进程数:根据连接数和服务器模式不同而不同
  • 最大进程数:不应超过PROCESSES参数的限制

进程资源使用

  • CPU使用率:每个进程的CPU使用率
  • 内存使用率:每个进程的内存使用情况
  • I/O使用率:每个进程的I/O操作情况
  • 会话数:每个服务器进程处理的会话数

进程等待事件

  • latch waits:闩锁等待事件
  • enqueue waits:锁等待事件
  • buffer waits:缓冲区等待事件
  • I/O waits:I/O等待事件

进程故障处理

后台进程故障

后台进程崩溃

  • 症状:数据库实例可能崩溃,警报日志中出现错误信息
  • 处理
    • 检查警报日志,确定崩溃原因
    • 重启数据库实例
    • 分析根本原因,防止再次发生

后台进程挂起

  • 症状:数据库性能下降,相关操作无法完成
  • 处理
    • 检查进程状态和等待事件
    • 尝试终止并重启挂起的进程
    • 如果无法解决,重启数据库实例

服务器进程故障

服务器进程崩溃

  • 症状:用户会话中断,PMON会清理相关资源
  • 处理
    • 用户重新连接数据库
    • 检查崩溃原因,防止再次发生

服务器进程资源耗尽

  • 症状:进程CPU或内存使用率过高,影响其他进程
  • 处理
    • 识别资源耗尽的进程
    • 分析原因,可能是SQL语句问题或会话泄漏
    • 终止异常进程,优化相关SQL语句

用户进程故障

用户进程崩溃

  • 症状:用户会话中断,服务器进程成为僵尸进程
  • 处理
    • PMON会自动清理僵尸进程
    • 用户重新启动应用程序

用户进程连接泄漏

  • 症状:数据库连接数持续增长,最终达到PROCESSES限制
  • 处理
    • 识别泄漏连接的应用程序
    • 修复应用程序,确保正确关闭连接
    • 使用连接池管理数据库连接

不同版本的进程结构差异

Oracle 9i

  • 进程结构:基本的后台进程,如SMON、PMON、DBWn、LGWR、CKPT等
  • 新增进程:引入了并行执行服务器进程
  • 限制:支持的后台进程数量较少

Oracle 10g

  • 进程结构:增强了后台进程功能
  • 新增进程
    • 支持多个DBWn进程
    • 引入了自动工作负载仓库进程
  • 改进:共享服务器模式的性能和可靠性提升

Oracle 11g

  • 进程结构:进一步增强了后台进程功能
  • 新增进程
    • 内存管理器进程(MMAN)
    • 自动诊断仓库进程(AD00)
    • 空间管理协调进程(SMCO)
  • 改进:进程管理更加自动化和智能化

Oracle 12c

  • 进程结构:支持多租户架构的进程结构
  • 新增进程
    • 多租户相关进程
    • 数据优化进程
  • 改进:进程管理更加灵活,支持容器数据库和可插拔数据库

Oracle 18c/19c

  • 进程结构:进一步优化了进程结构
  • 新增进程
    • 自动化相关进程
    • 安全增强进程
  • 改进:进程性能和可靠性进一步提升,支持更多的自动化功能

进程结构最佳实践

进程配置最佳实践

  • 根据硬件资源配置:根据服务器的CPU核心数、内存大小和I/O能力配置进程参数
  • 根据工作负载配置:根据数据库的工作负载类型和连接数配置进程参数
  • 使用自动配置:对于大多数环境,建议使用Oracle的自动配置功能
  • 监控和调整:定期监控进程使用情况,根据需要调整进程参数

不同环境的进程配置建议

开发环境

  • 进程配置:进程参数可以相对较小
  • 连接模式:建议使用专用服务器模式
  • 参数设置:PROCESSES设置为100-200

测试环境

  • 进程配置:进程参数应接近生产环境
  • 连接模式:根据测试需求选择专用或共享服务器模式
  • 参数设置:根据测试工作负载调整进程参数

生产环境

  • 进程配置:进程参数应充足
  • 连接模式
    • 连接数较少:使用专用服务器模式
    • 连接数较多:使用共享服务器模式
  • 参数设置:根据实际工作负载和硬件资源调整
  • 监控:建立完善的进程监控机制

进程管理最佳实践

  • 定期监控:定期监控进程状态和资源使用情况
  • 优化SQL语句:减少长时间运行的SQL语句,避免进程资源耗尽
  • 使用连接池:使用连接池管理数据库连接,减少服务器进程数量
  • 设置合理的超时:设置会话超时,避免空闲连接占用资源
  • 定期重启:对于长时间运行的数据库,定期重启以清理内存泄漏

进程结构与其他组件的关系

进程结构与内存结构的关系

  • SGA:后台进程和服务器进程共享SGA内存
  • PGA:每个服务器进程和用户进程有自己的PGA内存
  • 内存分配:进程管理内存的分配和使用
  • 内存监控:进程监控内存使用情况,避免内存泄漏

进程结构与物理结构的关系

  • 数据文件:DBWn进程负责将数据写入数据文件
  • 重做日志文件:LGWR进程负责将重做日志写入重做日志文件
  • 控制文件:CKPT进程负责更新控制文件
  • 归档日志文件:ARCn进程负责创建归档日志文件

进程结构与逻辑结构的关系

  • 表空间:进程管理表空间的状态和操作
  • :进程管理段的空间分配和回收
  • 数据库对象:进程执行对数据库对象的操作
  • 事务:进程管理事务的执行和提交

常见问题(FAQ)

Q1: Oracle数据库的进程结构主要包括哪些部分?

A1: Oracle数据库的进程结构主要包括三大部分:

  • 后台进程:数据库实例启动时自动创建的进程,执行系统级维护任务
  • 服务器进程:处理用户请求的进程,执行SQL语句和PL/SQL程序
  • 用户进程:用户客户端应用程序创建的进程,与服务器进程通信

Q2: 什么是专用服务器模式和共享服务器模式?它们有什么区别?

A2: 专用服务器模式和共享服务器模式是Oracle数据库的两种连接模式:

  • 专用服务器模式:为每个用户会话创建一个专用的服务器进程,资源隔离性好,但资源利用率低
  • 共享服务器模式:多个用户会话共享一个服务器进程,资源利用率高,但隔离性较差
  • 区别:专用服务器模式适合连接数较少的环境,共享服务器模式适合连接数较多的环境

Q3: 如何监控Oracle数据库的进程?

A3: 监控Oracle数据库进程的方法:

  • 使用动态性能视图:查询V$PROCESS、V$BGPROCESS、V$SESSION等视图
  • 使用Oracle Enterprise Manager:图形化界面监控进程状态和性能
  • 使用操作系统工具:如Windows的任务管理器、Linux的top和ps命令
  • 查看警报日志:了解进程的启动、终止和错误信息

Q4: 如何优化Oracle数据库的进程配置?

A4: 优化Oracle数据库进程配置的方法:

  • 根据硬件资源:根据CPU核心数、内存大小和I/O能力配置进程参数
  • 根据工作负载:根据数据库的工作负载类型和连接数配置进程参数
  • 使用自动配置:对于大多数环境,建议使用Oracle的自动配置功能
  • 监控和调整:定期监控进程使用情况,根据需要调整进程参数
  • 使用连接池:使用连接池管理数据库连接,减少服务器进程数量

Q5: 后台进程异常终止会对数据库产生什么影响?

A5: 后台进程异常终止对数据库的影响:

  • 核心后台进程:如SMON、PMON、DBWn、LGWR等异常终止会导致数据库实例崩溃
  • 非核心后台进程:如ARCn、Jnnn等异常终止不会导致数据库实例崩溃,但会影响相关功能
  • 处理方法:后台进程异常终止后,应检查警报日志,确定崩溃原因,重启数据库实例,并采取措施防止再次发生

Q6: 如何处理数据库连接数达到上限的问题?

A6: 处理数据库连接数达到上限的方法:

  • 检查连接数:查询V$SESSION视图,了解当前连接数和连接来源
  • 识别泄漏连接:找出长时间空闲的连接或泄漏的连接
  • 调整参数:适当增加PROCESSES和SESSIONS参数的值
  • 优化应用程序:修复应用程序,确保正确关闭连接
  • 使用连接池:使用连接池管理数据库连接,减少连接数

Q7: 什么是Oracle的并行执行服务器进程?如何配置?

A7: Oracle的并行执行服务器进程是用于执行并行查询和DML操作的进程:

  • 功能:将大型查询分解为子任务,并行执行,提高查询性能
  • 配置:通过以下参数配置
    • PARALLEL_MAX_SERVERS:最大并行执行服务器进程数
    • PARALLEL_SERVERS_TARGET:目标并行执行服务器进程数
    • PARALLEL_DEGREE_POLICY:并行度策略
  • 适用场景:大型数据仓库和OLAP环境,处理大型查询和批量操作

Q8: 如何识别和处理资源耗尽的进程?

A8: 识别和处理资源耗尽的进程的方法:

  • 识别
    • 使用操作系统工具监控进程的CPU和内存使用率
    • 查询V$PROCESS视图,了解进程的资源使用情况
    • 使用Oracle Enterprise Manager监控进程性能
  • 处理
    • 终止异常进程
    • 分析原因,可能是SQL语句问题或会话泄漏
    • 优化相关SQL语句,修复应用程序
    • 设置合理的资源限制,如CPU使用率上限

Q9: Oracle 11g及以上版本新增了哪些后台进程?

A9: Oracle 11g及以上版本新增的后台进程:

  • MMAN:内存管理器进程,负责自动内存管理
  • AD00:自动诊断仓库进程,负责管理自动诊断仓库
  • SMCO:空间管理协调进程,负责协调空间管理任务
  • Wnnn:工作进程,用于执行各种后台任务
  • FBDA:闪回数据归档进程,负责闪回数据归档功能

Q10: 进程结构对Oracle数据库性能有什么影响?

A10: 进程结构对Oracle数据库性能的影响:

  • 后台进程数量:适当的后台进程数量可以提高数据库性能,但过多会消耗系统资源
  • 服务器进程模式:专用服务器模式适合连接数较少的环境,共享服务器模式适合连接数较多的环境
  • 进程资源使用:进程CPU或内存使用率过高会影响其他进程的性能
  • 进程间通信:高效的进程间通信可以提高数据库性能,减少等待时间
  • 进程故障:进程故障会导致数据库性能下降或服务中断