Linux 上 Oracle 性能瓶颈的常见位置
快速定位步骤与关键指标
top、sar -u 观察 %idle 与 load average;iostat -x 1 5 关注 %util、await、r/s、w/s、avgqu-sz;free -m、vmstat 1 5 观察 si/so(换页)。v$session、v$sql、v$event_name、v$system_event 定位 Top SQL 与等待事件;v$active_session_history 按 SQL_ID 汇总 CPU/IO/等待,快速找出“最贵”的 SQL;EXPLAIN PLAN、DBMS_XPLAN.DISPLAY_CURSOR、tkprof 分析执行计划与耗时分布。常见瓶颈与优化要点对照表
| 瓶颈维度 | 典型症状 | 快速验证 | 优化要点 |
|---|---|---|---|
| CPU | top 中 Oracle 进程长期占满;AWR 的 DB CPU 占比高 |
AWR Top SQL、ASH 按 on cpu 排序 |
SQL 改写、索引/分区、统计信息、执行计划绑定、减少硬解析、必要时并行度控制 |
| 内存 SGA | 物理读高、Buffer Cache 命中低、共享池命中低 | v$sgastat、v$db_cache_advice |
合理设置 SGA_TARGET/SGA_MAX_SIZE,提高 Buffer Cache;共享池适度增大并定期清理无效对象 |
| 内存 PGA | 磁盘排序、Hash Join 落盘、PGA cache hit % 低 |
v$pgastat 查看 cache hit percentage、over allocation count |
设置 PGA_AGGREGATE_TARGET 与 workarea_size_policy=AUTO,减少磁盘排序/哈希 |
| 存储 I/O | iostat %util≈100%、await 高;log file sync/db file 等待高 |
AWR/ASH 等待事件 Top 项 | 采用 SSD/NVMe、优化条带/RAID、分离 REDO/数据/归档,调优文件系统挂载与 I/O 调度 |
| 并发与锁 | 应用响应抖动、会话阻塞 | v$session/v$lock/v$transaction |
减少热点行更新冲突、缩短事务、优化隔离级别、应用级排队/限流 |
| SQL/执行计划 | 全表扫描、错误索引、估算偏差 | EXPLAIN PLAN、DBMS_XPLAN、SQL Trace |
索引/分区/覆盖索引、SQL 改写、统计信息收集、SQL Profile/基线固化计划 |
| 操作系统 | 换页、文件句柄不足、透明大页碎片 | vmstat、sar -B、/proc/meminfo、ulimit -n |
启用 HugePages、降低 vm.swappiness、合理 kernel.shmall/shmmax、调优 I/O 调度器 与挂载选项 |
内存与操作系统层面的关键配置建议
/etc/sysctl.conf 设置 vm.nr_hugepages 后 sysctl -p 生效,并关闭透明大页(THP)。vm.swappiness,合理设置 vm.dirty_background_ratio/ratio,提升写回策略稳定性;noatime,nodiratime 等挂载选项;fs.file-max 等句柄上限,避免“too many open files”。