Skip to content

Oracle 逻辑架构

逻辑架构概述

Oracle 数据库逻辑架构是 DBA 理解和管理数据库的基础,它描述了数据库的逻辑组件及其相互关系。Oracle 逻辑架构主要包括:

  • 数据库实例:由内存结构和进程结构组成,负责数据库的运行和管理
  • 存储结构:包括数据文件、控制文件、日志文件等物理文件的逻辑组织
  • Schema 对象:包括表、索引、视图、存储过程等数据库对象

理解逻辑架构对于性能优化、故障诊断和日常维护至关重要。

数据库实例

数据库实例是 Oracle 数据库的核心,是内存结构和进程结构的集合。一个实例对应一个数据库,但在 RAC 环境中,多个实例可以共享一个数据库。

实例组成

组件描述
内存结构SGA(系统全局区)和 PGA(程序全局区)
进程结构服务器进程、后台进程和辅助进程
元数据数据字典和控制信息

内存结构

Oracle 数据库的内存结构分为两大区域:SGA(系统全局区)和 PGA(程序全局区)。

SGA(系统全局区)

SGA 是实例启动时分配的共享内存区域,所有数据库进程共享。主要包含以下组件:

数据库缓冲区高速缓存(Database Buffer Cache)

  • 存储从数据文件读取的数据块副本
  • 减少磁盘 I/O,提高查询性能
  • 由 LRU 算法管理,分为热区和冷区

19c vs 21c 差异

  • 21c 引入了智能缓冲区缓存管理,自动调整热区/冷区比例
  • 21c 支持更大的缓冲区缓存,单实例可支持到 TB 级

生产环境建议

  • 通常配置为物理内存的 40-60%
  • 监控缓冲区缓存命中率,理想值 > 95%
  • 使用 V$BUFFER_POOL_STATISTICS 视图监控
sql
-- 查询缓冲区缓存命中率
SELECT name, physical_reads, db_block_gets, consistent_gets,
       1 - (physical_reads / (db_block_gets + consistent_gets)) AS hit_ratio
FROM V$BUFFER_POOL_STATISTICS;

共享池(Shared Pool)

  • 存储 SQL 语句、PL/SQL 程序和数据字典信息
  • 包含库缓存和数据字典缓存

19c vs 21c 差异

  • 21c 增强了共享池的自动调整能力
  • 21c 引入了自适应游标共享增强

生产环境建议

  • 配置为物理内存的 10-20%
  • 监控共享池命中率,理想值 > 95%
  • 避免硬解析,使用绑定变量
sql
-- 查询共享池统计信息
SELECT * FROM V$SHARED_POOL_STATISTICS;

大池(Large Pool)

  • 为 RMAN、并行查询和共享服务器等操作提供大内存分配
  • 减少共享池的压力

生产环境建议

  • 对于 RMAN 备份和并行查询密集型系统,适当增大
  • 监控大池使用情况,避免内存不足

Java 池(Java Pool)

  • 为 Java 虚拟机(JVM)提供内存
  • 仅当数据库中使用 Java 存储过程时需要

流池(Streams Pool)

  • 为 Oracle Streams 和 GoldenGate 等复制技术提供内存
  • 19c 和 21c 中已逐步被 Oracle GoldenGate 和 Oracle Data Guard 替代

重做日志缓冲区(Redo Log Buffer)

  • 存储事务产生的重做记录
  • 定期写入重做日志文件
  • 提高事务处理性能

19c vs 21c 差异

  • 21c 增强了重做日志缓冲区的自动调整
  • 21c 支持更快的重做日志写入

生产环境建议

  • 通常配置为 100MB-500MB
  • 监控重做日志缓冲区等待事件
sql
-- 查询重做日志缓冲区统计信息
SELECT redo_buffer_allocation_retries, redo_entries, redo_buffer_size
FROM V$INSTANCE_RECOVERY;

PGA(程序全局区)

PGA 是每个服务器进程私有的内存区域,用于存储特定于进程的数据。主要包含以下组件:

排序区(Sort Area)

  • 用于 SQL 查询的排序操作
  • 超过 PGA 限制时会使用临时表空间

哈希区(Hash Area)

  • 用于哈希连接和其他哈希操作

会话内存(Session Memory)

  • 存储会话状态信息

游标状态(Cursor State)

  • 存储 SQL 游标的执行计划和状态

19c vs 21c 差异

  • 21c 增强了 PGA 自动管理,更智能地调整大小
  • 21c 支持 PGA 隔离,提高安全性

生产环境建议

  • 启用自动 PGA 管理(PGA_AGGREGATE_TARGET
  • 监控 PGA 使用情况,避免过度使用临时表空间
sql
-- 查询 PGA 使用统计信息
SELECT name, value FROM V$PGASTAT;

进程结构

Oracle 数据库的进程结构包括后台进程、服务器进程和辅助进程。

后台进程

后台进程负责维护数据库的正常运行,主要包括:

SMON(系统监视器进程)

  • 实例恢复
  • 清理临时段
  • 合并空闲空间

PMON(进程监视器进程)

  • 清理失效的服务器进程
  • 释放资源
  • 注册服务信息到监听器

DBWn(数据库写入进程)

  • 将脏数据块从缓冲区缓存写入数据文件
  • 维护检查点
  • 19c 和 21c 支持多个 DBWn 进程(最多 36 个)

LGWR(日志写入进程)

  • 将重做日志缓冲区的内容写入重做日志文件
  • 确保事务持久性

CKPT(检查点进程)

  • 更新控制文件和数据文件头的检查点信息
  • 触发 DBWn 写入脏数据块

MMON(内存监控进程)

  • 收集 AWR 快照
  • 监控数据库性能
  • 生成警报

19c vs 21c 差异

  • 21c 增强了 MMON 进程的自动调整能力
  • 21c 引入了新的后台进程用于自动索引管理

服务器进程

服务器进程处理客户端请求,主要包括:

专用服务器进程

  • 为每个客户端连接创建一个专用进程
  • 适用于连接数较少的环境

共享服务器进程

  • 多个客户端连接共享一个服务器进程
  • 适用于连接数较多的环境
  • 减少内存消耗

辅助进程

辅助进程用于特定功能,如:

  • ARCH:归档重做日志文件
  • RMAN:备份和恢复操作
  • CJQ:作业队列协调器
  • QMNC:队列监视器协调器

存储结构的逻辑视图

Oracle 数据库的存储结构从逻辑上分为以下层次:

表空间(Tablespace)

表空间是数据库的最大逻辑存储单元,包含一个或多个数据文件。主要类型包括:

  • 系统表空间:存储数据字典和系统对象
  • SYSAUX 表空间:辅助系统表空间,存储 Oracle 组件数据
  • 用户表空间:存储用户数据
  • 临时表空间:存储临时数据,如排序结果
  • UNDO 表空间:存储撤销数据,用于事务回滚和一致性读

19c vs 21c 差异

  • 21c 支持自动表空间管理增强
  • 21c 引入了可传输表空间的增强功能

生产环境建议

  • 为不同类型的数据创建单独的表空间
  • 合理规划表空间大小和增长策略
  • 监控表空间使用率,避免空间不足
sql
-- 查询表空间使用情况
SELECT tablespace_name, file_id, bytes/1024/1024 AS size_mb,
       (bytes - free_bytes)/1024/1024 AS used_mb,
       free_bytes/1024/1024 AS free_mb,
       ROUND((bytes - free_bytes)/bytes * 100, 2) AS used_pct
FROM (SELECT a.tablespace_name, a.file_id, a.bytes,
             NVL(b.free_bytes, 0) AS free_bytes
      FROM dba_data_files a
      LEFT JOIN (SELECT tablespace_name, file_id, SUM(bytes) AS free_bytes
                 FROM dba_free_space
                 GROUP BY tablespace_name, file_id) b
      ON a.tablespace_name = b.tablespace_name AND a.file_id = b.file_id);

段(Segment)

段是表空间中的逻辑存储单元,用于存储特定类型的数据库对象。主要类型包括:

  • 表段:存储表数据
  • 索引段:存储索引数据
  • LOB 段:存储大对象数据
  • 回滚段:存储撤销数据(UNDO 表空间中)

区(Extent)

区是段的基本存储单元,由连续的数据块组成。当段需要更多空间时,会分配新的区。

数据块(Data Block)

数据块是 Oracle 存储的最小单元,对应磁盘上的物理块。Oracle 数据块大小通常为 8KB,但可以在创建数据库时指定为 2KB-32KB。

19c vs 21c 差异

  • 21c 支持更大的数据块大小(最大 128KB)
  • 21c 增强了数据块压缩算法

Schema 对象

Schema 对象是数据库中存储和管理数据的逻辑结构,主要包括:

表(Table)

存储数据的基本单元,由行和列组成。

索引(Index)

提高数据查询速度,减少磁盘 I/O。

视图(View)

基于表或其他视图的逻辑表。

存储过程和函数(Stored Procedure & Function)

预编译的 PL/SQL 代码块,提高执行效率。

触发器(Trigger)

在特定事件发生时自动执行的 PL/SQL 代码块。

序列(Sequence)

生成唯一数字值的对象。

同义词(Synonym)

对象的别名,简化访问。

连接到远程数据库的通道。

19c vs 21c 差异

  • 21c 引入了原生 JSON 类型,增强了 JSON 支持
  • 21c 支持更灵活的分区策略
  • 21c 增强了 PL/SQL 并行执行能力

19c 和 21c 逻辑架构差异

内存管理增强

  • 21c:智能内存管理,自动调整 SGA 和 PGA 大小
  • 21c:支持内存隔离,提高安全性
  • 21c:更大的缓冲区缓存支持,单实例可到 TB 级

自动索引管理

  • 21c:引入了自动索引功能,自动创建、维护和删除索引
  • 21c:新增了索引建议后台进程

存储优化

  • 21c:支持更大的数据块大小(最大 128KB)
  • 21c:增强了表空间自动管理
  • 21c:改进了分区表管理

并行处理增强

  • 21c:增强了 PL/SQL 并行执行能力
  • 21c:改进了并行查询优化

云原生支持

  • 21c:增强了容器和 Kubernetes 支持
  • 21c:改进了云存储集成

生产环境逻辑架构设计最佳实践

内存配置

  1. 启用自动内存管理

    • 对于 19c,考虑使用 MEMORY_TARGET 自动管理 SGA 和 PGA
    • 对于 21c,推荐使用自动内存管理,配合智能内存调整
  2. 合理分配内存比例

    • SGA:物理内存的 40-60%
    • PGA:物理内存的 20-30%
    • 预留 20% 内存给操作系统
  3. 监控内存使用

    • 使用 AWR 报告分析内存使用情况
    • 监控内存相关等待事件
    • 定期检查 SGA 和 PGA 命中率

进程配置

  1. 配置合适的进程数

    • 根据服务器资源和并发连接数调整 PROCESSES 参数
    • 监控进程使用率,避免进程不足
  2. 选择合适的服务器模式

    • 连接数较少的环境,使用专用服务器模式
    • 连接数较多的环境,考虑使用共享服务器模式
  3. 监控进程状态

    • 定期检查后台进程状态
    • 监控进程等待事件

存储逻辑设计

  1. 表空间设计

    • 为不同类型的数据创建单独的表空间
    • 使用本地管理表空间(LMT)替代字典管理表空间(DMT)
    • 启用自动扩展,但设置合理的最大值
  2. 数据块大小选择

    • 大多数系统使用 8KB 数据块
    • 数据仓库系统可考虑使用 16KB 或 32KB 数据块
    • 小表较多的系统可考虑使用 4KB 数据块
  3. 区和段管理

    • 使用自动段空间管理(ASSM)
    • 为大表设置合适的初始区大小
    • 监控段碎片,定期重组

常见问题(FAQ)

Q: 如何查看 SGA 和 PGA 的大小?

A: 使用以下 SQL 语句:

sql
-- 查询 SGA 大小
SELECT name, value/1024/1024 AS size_mb FROM v$sga;

-- 查询 PGA 大小
SELECT name, value/1024/1024 AS size_mb FROM v$pgastat WHERE name = 'aggregate PGA target parameter';

Q: 如何调整 SGA 和 PGA 的大小?

A: 可以通过以下方式调整:

  1. 使用自动内存管理

    sql
    ALTER SYSTEM SET MEMORY_TARGET = 16G SCOPE = SPFILE;
    ALTER SYSTEM SET MEMORY_MAX_TARGET = 20G SCOPE = SPFILE;
  2. 手动调整 SGA

    sql
    ALTER SYSTEM SET SGA_TARGET = 12G SCOPE = SPFILE;
    ALTER SYSTEM SET SHARED_POOL_SIZE = 3G SCOPE = SPFILE;
    ALTER SYSTEM SET DB_CACHE_SIZE = 6G SCOPE = SPFILE;
  3. 手动调整 PGA

    sql
    ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 4G SCOPE = SPFILE;

Q: 如何监控数据库进程状态?

A: 使用以下 SQL 语句:

sql
-- 查询后台进程状态
SELECT process, status, client_process, program FROM v$session WHERE type = 'BACKGROUND';

-- 查询服务器进程状态
SELECT sid, serial#, status, username, program FROM v$session WHERE type = 'USER';

Q: 如何优化缓冲区缓存命中率?

A: 可以通过以下方式优化:

  1. 增加 DB_CACHE_SIZE 参数值
  2. 使用多个缓冲区池,将不同类型的数据放入不同的池
  3. 优化 SQL 查询,减少逻辑读
  4. 使用绑定变量,减少硬解析
  5. 监控 V$BUFFER_POOL_STATISTICS 视图,分析命中率

Q: 什么情况下使用共享服务器模式?

A: 共享服务器模式适用于以下场景:

  1. 大量客户端连接(数百或数千)
  2. 客户端连接时间短,事务量小
  3. 内存资源有限
  4. 网络延迟较大的环境

Q: 如何查看表空间的逻辑结构?

A: 使用以下 SQL 语句:

sql
-- 查询表空间、段、区和数据块信息
SELECT tablespace_name, segment_name, segment_type, extent_id, block_id, blocks
FROM dba_extents WHERE segment_name = 'YOUR_TABLE_NAME' AND owner = 'YOUR_SCHEMA';

总结

Oracle 逻辑架构是数据库管理的基础,理解逻辑架构对于 DBA 至关重要。19c 和 21c 在逻辑架构上有一些重要差异,特别是在内存管理、自动索引和云原生支持方面。

在生产环境中,DBA 应该根据业务需求和系统资源,合理设计逻辑架构,包括内存配置、进程管理和存储结构。通过监控和优化逻辑架构,可以提高数据库的性能、可靠性和可扩展性。

随着 Oracle 数据库的不断发展,特别是 21c 引入的智能功能,DBA 的角色正在从手动管理向自动化管理转变。理解这些新特性和变化,将帮助 DBA 更好地适应未来的数据库管理挑战。