温馨提示×

oracle怎样在centos优化

小樊
35
2025-12-09 13:34:32
栏目: 云计算

总体思路与前提

  • CentOS 上优化 Oracle 需要从 操作系统内存与HugePagesI/O 子系统数据库参数SQL 与索引监控与维护 六个层面协同进行,并以 AWR/ASH 报告持续验证效果。
  • 优先采用 RHEL/CentOS 的 tuned-profiles-oracle 作为系统级基线,再结合业务负载做细调,可显著降低手工调参风险并提升稳定性。

操作系统与内核参数

  • 启用 tuned 并切换到 oracle 配置集(推荐首选):
    • 安装与启用:yum install -y tuned;systemctl enable --now tuned
    • 切换配置:tuned-adm profile oracle;tuned-adm active(验证)
  • 内核参数基线(/etc/sysctl.conf,按内存与负载微调):
    • fs.aio-max-nr = 1048576
    • fs.file-max = 6815744
    • kernel.shmall = 物理内存(字节) × 0.85 ÷ 4096(向上取整)
    • kernel.shmmax = 物理内存(字节) × 0.85(通常接近物理内存的 80%~90%)
    • kernel.shmmni = 4096
    • kernel.sem = 250 32000 100 128
    • 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(减少换页,偏向数据库工作集驻留内存)
    • 使配置生效:sysctl -p
  • 说明:shmmax/shmall 需与物理内存匹配,过小会导致安装或启动失败;上述端口范围与网络缓冲区有助于提升并发连接与网络吞吐。

内存与 HugePages

  • 启用大页(HugePages)以减少 TLB Miss、降低页表开销,提升 SGA 访问效率:
    • 估算 HugePages 数量(示例脚本,单位:页):
      • HugePages_Total ≈ (SGA_TARGET + 一定余量) ÷ 2MB(HugePage 默认 2MB)
      • 例如 SGA_TARGET=16G ⇒ 约需 8192~9000 页(含余量)
    • 配置步骤:
      • 在 /etc/sysctl.conf 设置 vm.nr_hugepages = 计算值;sysctl -p
      • /etc/security/limits.conf 为 oracle 设置 memlock(软/硬)≥ SGA 大小(单位 KB)
      • 重启实例,检查:grep Huge /proc/meminfo;sqlplus / as sysdba → show parameter use_large_pages(应为 TRUE/ONLY)
  • 自动内存管理(AMM/ASMM):
    • 若使用 AMM(memory_target),HugePages 不生效;需改用 ASMM(sga_target + pga_aggregate_target) 或关闭 AMM 以启用 HugePages。
    • 示例(ASMM):
      • ALTER SYSTEM SET sga_target = 8G SCOPE=BOTH;
      • ALTER SYSTEM SET pga_aggregate_target = 2G SCOPE=BOTH;
  • 注意:HugePages 大小与数量需与 SGA 精确匹配,过小会导致实例无法分配大页而回退到普通页,过大则浪费内存。

I/O 子系统与文件系统

  • 存储优先:使用 SSD/NVMe、条带化/RAID10、分离 REDO/归档/数据/临时表空间 到不同磁盘,降低争用。
  • 文件系统与挂载:
    • 推荐使用 XFS/ext4,挂载选项如 noatime,nodiratime,barrier=1(或 data=ordered),避免 relatime 带来的额外元数据写。
    • 控制文件、在线日志、UNDO、TEMP 等关键文件分散到不同物理设备。
  • I/O 调度与队列:
    • 机械盘:使用 deadlinecfq;SSD/NVMe:使用 noopnone(减少调度开销)。
    • 增大块设备队列深度(如 nr_requests),匹配阵列/SSD 并发能力。
  • 异步 I/O:确保 libaio 已安装,Oracle 启用 FILESYSTEMIO_OPTIONS=SETALL(或 ASYNC_ON)以发挥 AIO 能力。

数据库参数与 SQL 优化

  • 内存与并发:
    • 采用 ASMM/AMM 合理设置 SGA/PGA;控制会话与进程数,避免连接风暴。
    • 示例:
      • ALTER SYSTEM SET processes = 500 SCOPE=SPFILE;
      • ALTER SYSTEM SET sessions = 750 SCOPE=SPFILE;(sessions 通常 ≈ 1.1×processes + 5)
  • 日志与归档:
    • 合理增大 LOG_BUFFER(如 64M~128M),并确保在线日志组大小与数量能覆盖峰值事务;归档路径与带宽充足。
  • 执行计划与 SQL:
    • 避免 **SELECT ***,使用 绑定变量 减少硬解析;通过 EXPLAIN PLAN、SQL Trace/10046、AWR/ASH 定位高成本 SQL。
    • 减少 全表扫描,为高频过滤/连接列建立合适索引;删除 重复/未使用索引;必要时使用 分区表/分区索引 降低扫描与维护成本。
  • 统计信息与维护:
    • 定期收集统计信息:EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>‘SCHEMA’, estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt=>‘FOR ALL COLUMNS SIZE AUTO’, cascade=>TRUE);
    • 监控等待事件(如 db file sequential/scattered read、log file sync、enq: TX - row lock contention),按瓶颈定位优化方向。

监控与维护

  • 基线建立与对比:
    • 定期生成 AWR/ADDM 报告(如间隔 1 小时、保留 8 天),对比逻辑读、物理读、CPU 时间、等待事件与 Top SQL 的变化,验证调优成效。
    • 结合 ASH 识别短时段热点与阻塞会话,联动 SQL 优化与索引调整。
  • 日常巡检清单:
    • 表/索引碎片与统计信息新鲜度;无效/缺失索引;长事务与锁争用;回滚段/UNDO 使用;临时表空间使用;I/O 利用率与热点文件;网络时延与丢包。
  • 变更管控:任何参数或结构变更需先在测试环境验证,并在变更窗口内执行,保留回滚方案与回放报告。

0