- 首页 >
- 问答 >
-
云计算 >
- 怎样优化CentOS中的Oracle配置
怎样优化CentOS中的Oracle配置
小樊
32
2025-12-05 14:41:15
CentOS 上 Oracle 配置的优化路径
一 基线评估与监控
- 明确硬件与负载:记录服务器内存、CPU、存储类型(优先 SSD/NVMe)、网络带宽与延迟,确认业务类型(OLTP 或 DSS)。
- 建立性能基线:采集 CPU、内存、I/O、会话与等待事件,后续所有优化以基线为准进行对比验证。
- 使用 Oracle 诊断工具:定期生成 AWR/ADDM 报告,结合 ASH 定位 Top SQL 与等待事件;必要时用 OEM 做可视化监控与告警。
二 操作系统层优化
- 内核参数与资源限制(/etc/sysctl.conf 示例,数值需结合实例内存与并发调整):
- 共享内存与信号量
- kernel.shmmax ≈ 物理内存的 0.85(单位 Byte)
- kernel.shmall = kernel.shmmax / 4096
- kernel.shmmni = 4096
- kernel.sem = 250 32000 100 128
- 文件与 AIO
- fs.aio-max-nr = 1048576
- fs.file-max = 6815744
- 网络
- net.ipv4.ip_local_port_range = 9000 65500
- net.core.rmem_default = 262144;net.core.rmem_max = 4194304
- net.core.wmem_default = 262144;net.core.wmem_max = 1048576
- 虚拟内存
- 大页(可选,提升 SGA 访问效率):计算 nr_hugepages ≈ 物理内存(GB) × 0.8 × 0.8 / 2(向上取整),并在 GRUB 启用 hugepages 后重启;Oracle 启用大页需配置 use_large_pages=only 并重启实例。
- 资源与文件系统
- 关闭不必要的服务,减少资源竞争;为 Oracle 数据/日志使用独立 LVM/RAID 或不同磁盘控制器,降低 I/O 争用。
- 选择 XFS/ext4 等成熟文件系统,挂载选项建议:noatime,nodiratime,barrier=1(如用 XFS 可加 inode64);确保 /dev/shm 大小满足 SGA 需求(如 8–16GB 起步)。
三 Oracle 内存与进程参数
- 内存目标与策略
- 启用自动内存管理(推荐):设置 MEMORY_TARGET(或 MEMORY_MAX_TARGET),让 Oracle 自动在 SGA+PGA 间分配;确保 SGA+PGA+OS 使用内存 < 物理内存。
- 手动分配时参考经验:SGA 约占可用内存的 1/3–1/2;OLTP 场景 PGA 通常占实例可用内存的 ~20%,DSS 可提升至 ~50%(示例:总内存 4GB,给 Oracle 80% 即 3.2GB,则 OLTP 的 PGA≈0.64GB,DSS 的 PGA≈1.6GB)。
- 常用参数与示例(scope=both 动态生效,重启持久)
- 自动内存管理
- ALTER SYSTEM SET memory_target = 4G SCOPE=BOTH;
- ALTER SYSTEM SET memory_max_target = 4G SCOPE=SPFILE;
- 手动内存(示例)
- ALTER SYSTEM SET sga_target = 3G SCOPE=BOTH;
- ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE=BOTH;
- 日志缓冲区(视负载调整)
- ALTER SYSTEM SET log_buffer = 64M SCOPE=BOTH;
- 并发与会话(按业务评估)
- ALTER SYSTEM SET processes = 500 SCOPE=SPFILE;
- ALTER SYSTEM SET sessions = 750 SCOPE=SPFILE;
- PGA 自动管理
- ALTER SYSTEM SET workarea_size_policy = AUTO SCOPE=BOTH;
- 监控与校验
- 内存命中与 PGA:V$SGAINFO、V$PGASTAT;检查 PGA 过度分配(over allocation count)、命中率(cache hit percentage)等指标,必要时微调 PGA_AGGREGATE_TARGET。
四 存储 I/O 与数据库结构
- 文件布局与 I/O 分散
- 将数据文件、在线重做日志、归档日志、临时表空间分别置于不同磁盘/控制器;优先 SSD/NVMe;使用 条带化(RAID 0/1+0 或存储侧条带)。
- 使用 本地管理表空间(LMT),将 表/索引/临时/回滚 分离,减少争用;避免将非 Oracle 文件与数据库文件同盘。
- 日志与检查点
- 合理设置 在线重做日志文件大小与组数,减少日志切换与检查点抖动;将日志文件放在更快的存储上以降低 LGWR 等待。
- 在 OLTP 场景可适当增加日志文件大小、减少检查点频率以降低 I/O 峰值;在 DSS 场景可适当降低目标恢复时间以缩短恢复窗口。
- 访问路径与参数
- 控制全表扫描:为高频过滤/连接列建立合适索引,避免 SELECT *;结合 DB_FILE_MULTIBLOCK_READ_COUNT 与存储条带深度优化全扫描 I/O 次数。
- 排序与临时:优先在内存完成排序,监控 SORTS(MEMORY)/SORTS(DISK);为会话分配足够大的临时表空间,减少磁盘排序。
五 SQL 与对象级优化及维护
- SQL 优化
- 使用 绑定变量 降低硬解析;避免 **SELECT ***;为关键查询建立 索引/组合索引;用 EXPLAIN PLAN/DBMS_XPLAN 与 AWR/ASH 定位高成本 SQL。
- 对象与存储
- 对大表/大索引采用 分区(按时间、范围、哈希等),提升扫描与维护效率;定期清理无用/重复索引,减少 DML 开销。
- 统计信息与维护
- 定期收集统计信息:EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>‘SCHEMA_NAME’, estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt=>‘FOR ALL COLUMNS SIZE AUTO’, cascade=>TRUE);
- 结合 AWR/ADDM 的 Segment Advisor/SQL Tuning Advisor 做针对性优化;必要时对高碎片对象执行重组。