怎样优化Ubuntu Oracle性能
小樊
34
2025-12-06 21:01:49
Ubuntu 上 Oracle 性能优化路线图
一 硬件与存储布局
- 优先使用SSD/NVMe与合适的RAID(条带化)以显著提升 I/O 并发与吞吐;将数据文件、重做日志、归档日志、临时表空间分别放置在不同物理磁盘或阵列上,避免热点与争用;对大表采用分区表降低扫描成本;在条件允许时,考虑Oracle ASM提升磁盘管理与冗余能力。
二 内存与 Linux 内核
- 合理规划内存:按负载将可用内存在SGA(如 Buffer Cache、Shared Pool、Large Pool、Redo Log Buffer)与PGA(排序/哈希区)之间划分,避免互相挤占;在 Linux 上启用HugePages减少页表开销并提升大内存访问效率,必要时设置 Oracle 参数use_large_pages=ONLY;为防抖动,可将SGA 锁定到物理内存(如设置初始化参数lock_sga=true),并适度降低vm.swappiness(如10)以减少换页;结合负载调节vm.dirty_background_ratio / dirty_ratio / dirty_expire_centisecs / dirty_writeback_centisecs以平衡前台写入与后台回写;同时确保系统级共享内存与文件句柄足够(如kernel.shmall、kernel.shmmax、fs.file-max)。
三 数据库参数与 I/O 子系统
- 初始化参数:按业务类型优化SGA_TARGET / PGA_AGGREGATE_TARGET与PROCESSES;在OLTP场景适当增大LOG_BUFFER并配置多组REDO 日志以拉长检查点间隔、降低检查点风暴;根据存储能力设置DB_WRITER_PROCESSES提升脏块写出并行度;在支持的系统上启用异步 I/O(AIO)并将DISK_ASYNCH_IO=true;针对全表扫描较多的负载,合理设置DB_FILE_MULTIBLOCK_READ_COUNT以减少 I/O 次数;确保统计信息及时更新,使优化器生成更优执行计划。
四 SQL 与应用层优化
- 规范与改写 SQL:避免SELECT ,仅返回必要列;使用绑定变量降低硬解析;优先用JOIN替代复杂子查询;对大批量 DML 采用批量提交*;在 WHERE 中避免对列做函数计算以免失效索引;对大表与高并发查询使用分区裁剪与合适索引(含函数索引/组合索引);对长事务与一致性读需求合理规划UNDO与隔离级别;使用EXPLAIN PLAN / DBMS_XPLAN.DISPLAY与SQL Tuning Advisor定位与修复性能瓶颈。
五 监控与维护
- 建立基线并持续观测:利用AWR/ASH与Enterprise Manager识别 Top SQL、等待事件与资源瓶颈;定期检查alert.log与关键视图(如V$FILESTAT、V$SYSSTAT)定位 I/O 与空间问题;对索引/统计信息进行周期性维护,必要时重建或重组;在变更前后进行回归测试与容量评估,确保稳定性与可回退。