外观
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_SERVER和V$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或内存使用率过高会影响其他进程的性能
- 进程间通信:高效的进程间通信可以提高数据库性能,减少等待时间
- 进程故障:进程故障会导致数据库性能下降或服务中断
