温馨提示×

Ubuntu Oracle 资源占用如何降低

小樊
45
2025-12-06 21:20:55
栏目: 云计算

Ubuntu上降低Oracle资源占用的实用方案

一 内存占用过高时的快速降压

  • 降低数据库内存目标:在 SQL*Plussysdba 登录,先查看当前分配,再下调目标值并重启实例。示例(请按实际内存与负载谨慎设置):
    • 查看:show parameter sga; show parameter pga;
    • 仅降低上限:alter system set sga_max_size=2G scope=spfile;
    • 启用自动内存管理并下调总目标:alter system set memory_target=4G scope=spfile; alter system set memory_max_target=4G scope=spfile;
    • 重启实例后生效。注意:内存下调会提升命中率下降与I/O上升的风险,需在测试环境验证并选择业务低峰窗口执行。
  • 关闭或下调自动内存管理(AMM),改用手动精细控制:
    • 关闭:alter system set memory_target=0 scope=spfile; alter system set memory_max_target=0 scope=spfile;
    • 分别设置:alter system set sga_target=2G scope=spfile; alter system set pga_aggregate_target=500M scope=spfile;
    • 重启实例生效。此法适合将内存占用精确“锁定”在预期范围。
  • 释放共享池碎片与缓存压力:
    • 清理无效对象缓存:alter system flush shared_pool;
    • 定期收集统计信息,提升执行计划质量,减少反复硬解析:exec dbms_stats.gather_schema_stats(ownname=>‘YOUR_SCHEMA’, estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE);
  • 系统层面配合:适度降低 vm.swappiness(如设为10),减少换页;避免为数据库过度预留内存,确保系统留有安全余量。

二 降低CPU与I/O占用的关键动作

  • SQL与执行计划治理:
    • 避免 SELECT *,只查需要的列;使用绑定变量减少硬解析;用 EXPLAIN PLANDBMS_XPLAN.DISPLAY 分析并改写高成本SQL;必要时使用合适的索引或提示。
    • 对大表按时间/范围做分区表,减少扫描量;对报表/聚合类查询合理使用并行度(PARALLEL),避免无谓全表扫描。
  • 临时表空间与磁盘I/O:
    • 检查临时表空间是否成为瓶颈:select tablespace_name,file_name,bytes/1024/1024,autoextensible from dba_temp_files;
    • direct path read/write temp 高:扩大或开启自动扩展,或新增临时文件,例如:
      • alter database tempfile ‘/u01/…/temp01.dbf’ resize 2G;
      • alter database tempfile ‘/u01/…/temp01.dbf’ autoextend on next 100M maxsize unlimited;
      • alter tablespace temp add tempfile ‘/u01/…/temp02.dbf’ size 2G;
  • 存储与文件系统:优先使用 SSD/NVMe;为数据文件与重做日志选择性能更好的磁盘布局;必要时调整文件系统挂载选项与I/O调度策略,降低寻道与写放大。

三 Ubuntu系统层面的减负

  • 使用 tuned-profiles-oracle 为数据库负载优化内核与调度参数(Ubuntu/Debian 可安装 tuned 并启用相应配置集),在CPU、内存回收、I/O等方面给出更贴近Oracle的默认策略,减少手工调参成本。
  • 配置 HugePages 降低页表开销(PGA不使用大页):
    • 计算所需页数:Hugepagesize 通常为 2MB;页数 ≈ SGA大小 / Hugepagesize(向上取整)。例如 20GB SGA 需约 10240 页。
    • 在 /etc/sysctl.conf 设置:vm.nr_hugepages=10240;必要时设置 vm.hugetlb_shm_group;验证后可将 hugepages=… 加入 GRUB 内核启动参数以更早分配。
  • 资源与权限边界:
    • 在 /etc/security/limits.conf 为 oracle 用户设置合理的 nofile / nproc / memlock 上限,避免资源争用与异常增长。
    • 关闭不必要的系统服务与自启项,减少与数据库的CPU/内存竞争。

四 监控与回退

  • 建立“先诊断、后改动”的流程:
    • 生成 AWR/ADDM 报告定位高占用SQL与瓶颈(@?/rdbms/admin/awrrpt.sql;@?/rdbms/admin/addmrpt.sql),据此优先处理TOP SQL与资源配置问题。
    • 持续观察 v$sgastat、v$pgastat 等视图,确认内存命中率与PGA/SGA使用是否趋于目标区间。
  • 变更管控:所有参数调整先在测试环境验证;生产变更选择低峰时段,保留回退方案(spfile 备份、参数脚本与回滚脚本),变更后复核 AWR/ASH 与监控指标,确认资源占用下降且业务性能在可接受范围内。

0