总体思路
从系统层、数据库层、存储与网络层三线并行优化,先消除资源瓶颈,再校准内存与I/O,最后用AWR/ASH与系统工具持续验证。以下清单可直接落地执行,并在变更后对比前后指标确认收益。
一 操作系统与内核参数
- 启用 Oracle 推荐的系统调优集:安装并启用 tuned-profiles-oracle,其为数据库场景预置了 CPU、内存与 I/O 的更优策略,便于快速获得稳健基线。
- 典型内核参数(写入 /etc/sysctl.conf,执行 sysctl -p 生效):
- 共享内存与信号量
- kernel.shmmax ≈ 物理内存的0.85(字节)
- kernel.shmall = shmmax / 4096
- kernel.shmmni = 4096
- kernel.sem = 250 32000 100 128
- 文件句柄与 AIO
- fs.file-max = 6815744
- fs.aio-max-nr = 1048576
- 网络
- 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 = 1048586
- 虚拟内存
- vm.swappiness = 10(减少换页,避免数据库抖动)
- 资源限制(写入 /etc/security/limits.conf)
- oracle soft nproc 2047;oracle hard nproc 16384
- oracle soft nofile 1024;oracle hard nofile 65536
- oracle soft stack 10240;oracle hard stack 10240
- 大页(HugePages)
- 建议为 SGA 预留大页,减少 TLB 缺失与页表开销;估算值可参考:HugePages ≈ SGA_Target / 2MB(以实际页面大小为准),并在 /etc/sysctl.conf 设置 vm.nr_hugepages,重启后核对 HugePages_Free/Total。
- I/O 调度器
- 物理机优先 deadline(稳定低延迟);SSD/NVMe 可用 noop;虚拟化环境通常选 noop 以避免双层调度。
- 查看/设置示例:cat /sys/block/sdX/queue/scheduler;echo noop > /sys/block/sdX/queue/scheduler。
二 数据库内存与关键参数
- 内存目标与分配
- 仅数据库服务器可参考:为 OS 预留约**20%内存,余下80%**给 Oracle;其中
- OLTP:PGA ≈ 80%×80%×内存;SGA 取余下为主
- DSS/OLAP:PGA ≈ 80%×50%×内存;SGA 取余下为主
- 自动内存管理
- 启用 AMM(11g+):设置 memory_target/memory_max_target;或启用 ASMM(sga_target/pga_aggregate_target),并确保 statistics_level 为 TYPICAL/ALL。
- 常用示例(请按实际内存与负载微调)
- ALTER SYSTEM SET sga_target = 16G SCOPE=BOTH;
- ALTER SYSTEM SET pga_aggregate_target = 4G SCOPE=BOTH;
- 或启用 AMM:ALTER SYSTEM SET memory_target = 20G SCOPE=SPFILE;
- 关键组件与检查要点
- 缓冲区命中率(OLTP 建议 ≥ 95%):1 − physical_reads/(db_block_gets+consistent_gets)
- 共享池命中率(library cache):reloads/pins 建议 < 1%
- 日志缓冲区:若 “redo buffer allocation retries” 增长或存在 “log buffer wait”,适度增大 log_buffer。
三 存储与网络优化
- 存储与文件系统
- 优先 SSD/NVMe、条带化/RAID10、分离 REDO/ARCHIVE/数据/临时表空间 到不同磁盘组,降低争用。
- 文件系统挂载选项建议使用 noatime,nodiratime,减少元数据开销。
- I/O 验证
- iostat -x 1 10:关注 %util、await、r/s、w/s;优化后应看到 await 下降、%util 更均衡。
- 网络
- 合理放大 net.core.somaxconn、优化 rmem/wmem;跨机房/高吞吐场景建议启用 RDS/绑定网卡 并进行 iperf 带宽验证。
四 SQL 与索引及维护
- SQL 与索引
- 消除/降低 全表扫描,为大表热点列建立合适索引;减少 SELECT *,用绑定变量避免硬解析;根据数据量与访问模式选择 HASH JOIN/NESTED LOOP 等合适连接方式。
- 统计信息与计划
- 定期收集统计信息:EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>‘SCHEMA’, estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE);
- 监控与诊断
- 利用 AWR/ASH 报告定位 Top SQL、等待事件与瓶颈;结合 OS 工具(top、vmstat、iostat)闭环验证。
五 实施步骤与验证
- 基线采集
- 记录优化前 AWR/ASH、iostat、vmstat、网络吞吐与延迟,作为对比基线。
- 分阶段变更
- 先启用 tuned-profiles-oracle 与内核/资源限制;再校准 SGA/PGA;随后优化 I/O 调度器/存储布局;最后进行 SQL/索引 与统计信息维护。
- 效果验证
- 对比优化前后:事务/查询 响应时间、吞吐量、AWR 等待事件、iostat 的 await/%util、vmstat 的 si/so 等关键指标;异常回滚并细化参数。