温馨提示×

Linux Oracle 性能优化技巧有哪些

小樊
38
2025-12-06 15:35:46
栏目: 云计算

Linux 上 Oracle 性能优化技巧

一 系统层优化

  • I/O 调度器:数据库盘优先使用 deadline/noop。在物理机上常用 deadline;在 VMware/KVM 等虚拟化环境建议 noop,避免与宿主机调度重复。检查与设置示例:
    • 查看:find /sys/block/*/queue -name scheduler -exec sh -c ‘echo -n "$0 : "; cat $0’ {} ;
    • 临时设置:echo deadline > /sys/block/sdX/queue/scheduler
  • HugePages 大页:为 Oracle 启用 HugePages 可降低页表开销、提升内存访问效率。计算并配置(示例思路):
    • 估算:HugePages ≈ SGA_TARGET / HugePage_SIZE(HugePage_SIZE 由系统查询)
    • /etc/sysctl.conf:vm.nr_hugepages=<计算值>;sysctl -p 生效
  • 内核与网络:按负载调整 kernel.shmall、kernel.shmmax、kernel.shmmni、kernel.sem、fs.file-max 等;关闭不必要服务;对高并发短连接场景优化 TCP 参数;保证 NTP 时间同步以减少分布式与日志相关异常。

二 存储与 I/O 架构

  • 条带化与分散 I/O:通过 RAID 条带ASM/文件系统条带 将对象分散到多盘,降低热点与争用;结合业务 I/O 类型(随机/顺序、读写比例)规划文件布局与对象分布。
  • 块大小选择:OLTP 常用 8K,DSS/大行/顺序扫描可考虑 16K–32K;操作系统 I/O 大小建议等于或大于数据库块大小,顺序读可设为块大小的 2–3 倍 以提升吞吐。
  • 关键进程与调优点:关注 LGWR(日志写入)与 DBWn(脏块写回)路径,合理设置 DB_FILE_MULTIBLOCK_READ_COUNT 以优化全表扫描等多块读;通过 V$SYSSTAT 观察 ‘sorts (memory)’ 与 ‘sorts (disk)’ 判断排序是否落盘。

三 内存与实例参数

  • SGA 与 PGA 规划:SGA 包含 Database Buffer Cache、Shared Pool、Large Pool、Redo Log Buffer 等;PGA 包含 Sort/HASH Area 等。优先采用自动内存管理(如 MEMORY_TARGET),或按负载拆分 SGA_TARGET/PGA_AGGREGATE_TARGET。经验上 SGA 可占物理内存的 1/3–1/2,并满足 SGA + PGA + OS < 总内存
  • PGA 自动管理:启用 WORKAREA_SIZE_POLICY=AUTO,按负载设置 PGA_AGGREGATE_TARGET;通过 V$PGASTAT 观察命中率、过度分配次数等指标,必要时上调目标值。
  • 大池用途:将 Large Pool 用于并行查询、RMAN 备份、共享服务器等,减轻 Shared Pool 压力并避免与缓冲池争用。

四 SQL 与执行计划

  • 避免全表扫描:为高频过滤/连接列建立合适索引,必要时使用 分区表;删除冗余/低效索引,减少维护成本。
  • 绑定变量与计划稳定性:使用 绑定变量 降低硬解析;通过 EXPLAIN PLAN/DISPLAY_CURSORSQL Tuning Advisor 分析执行计划与成本,修正统计信息与访问路径。
  • 减少无效 I/O:优化谓词与投影,避免对大表做不必要扫描;控制返回行数与中间结果集规模,降低物理读与排序/哈希开销。

五 监控 诊断与日常维护

  • AWR/ASH/ADDM:定期生成 AWR 报告、查看 ASH 活跃会话,借助 ADDM 定位 Top SQL 与瓶颈;对异常等待(如 db file sequential/scattered read、log file sync、direct path read/write)进行针对性优化。
  • OS 层观测:用 iostat -x 1 10 观察 %util、await 等 I/O 指标;用 vmstat 1 10 关注 si/so(交换)是否升高;必要时配合网络工具(如 iperf)评估带宽与延迟。
  • 统计信息与碎片:定期收集对象统计信息(如 DBMS_STATS),对高碎片对象执行重组/重建;清理无用对象与历史数据,保持空间与访问效率。

0