温馨提示×

centos oracle性能调优实战技巧

小樊
40
2025-12-27 06:06:29
栏目: 云计算

CentOS 上 Oracle 性能调优实战技巧

一 操作系统级优化

  • 内核参数与资源限制
    • 共享内存与信号量:设置 kernel.shmmax≈物理内存的 85%kernel.shmall=shmmax/4096kernel.shmmni=4096;信号量建议 kernel.sem=250 32000 100 128。文件句柄与 AIO:fs.file-max≥65536~6815744fs.aio-max-nr=1048576。网络:net.ipv4.ip_local_port_range=9000 65500net.core.rmem_default/wmem_default=262144net.core.rmem_max/wmem_max=4194304/1048576。内存回收倾向:vm.swappiness=10(减少换页)。修改后执行 sysctl -p 生效。Oracle 用户限制:在 /etc/security/limits.conf 增加 oracle soft/hard nofile 1024/65536,必要时设置 memlock(配合 HugePages)。
  • 文件系统与挂载
    • 选择 XFS/ext4,挂载选项建议 noatime,nodiratime;如为 ext4 且为 OLTP 场景,可评估 data=writeback(权衡元数据一致性)。
  • 存储与 I/O 调度
    • 优先 SSD/NVMe;阵列建议 RAID 10(写惩罚低于 RAID 5)。I/O 调度器:NVMe 选 none/mq-deadline,SATA SSD 选 mq-deadline;可通过 udev 规则持久化。
  • 安全与后台服务
    • 生产环境不建议直接关闭 firewalld/SELinux,应通过策略放行 Oracle 端口与目录;若确需关闭,仅限测试环境,并同步评估风险。

二 内存管理与大页

  • 内存分配策略
    • 自动内存管理(AMM):设置 MEMORY_TARGET=物理内存的 70%~80%MEMORY_MAX_TARGET 略大;简化运维。组件比例参考:DB_CACHE_SIZE 40%~60%SHARED_POOL_SIZE 20%~30%LARGE_POOL_SIZE 100M~500M(并行/RMAN 场景适当放大)。
    • 手动/ASMM:设置 SGA_TARGET(60%~80% 可用内存)PGA_AGGREGATE_TARGET(10%~20% 可用内存,OLAP 可更高);OLTP 偏重 DB_CACHE,OLAP 偏重 PGA/LARGE_POOL
  • HugePages 配置
    • 适用场景:大 SGA、稳定内存占用。计算:HugePages = ceil(SGA_MB × 1024 × 1024 / 2MB)(常见 HugePage 为 2MB)。示例:SGA=16G → HugePages≈8192。配置 /etc/sysctl.conf:vm.nr_hugepages=8192 并重启;在 limits.conf 设置 oracle hard memlock(≥SGA),Oracle 启用大页(如使用 USE_LARGE_PAGES=TRUE)。注意:启用 HugePages 时不建议与 MEMORY_TARGET(AMM)并用,优先 ASMM(SGA_TARGET)

三 数据库参数与 I O 配置

  • 连接与会话
    • 合理设置 processes/sessions(如 processes=300,sessions=330),并通过连接池复用连接,避免频繁建连/断连。
  • 日志与检查点
    • 提升提交密集型场景的吞吐:log_buffer=16M~64M;确保 FAST_START_MTTR_TARGET 合理,避免频繁检查点抖动。
  • 并行与 I/O
    • 大表/聚合/扫描:设置对象级并行度(如 ALTER TABLE t PARALLEL 4; 或 SQL 提示 /*+ PARALLEL(t,4) */)。I/O 参数:disk_asynch_io=TRUEfilesystemio_options=SETALL(或 ASYNC),db_file_multiblock_read_count=DB_BLOCK_SIZE×8~×32(结合存储与负载压测微调)。归档场景:log_archive_max_processes=4~8
  • 示例(按 16G 内存的中型 OLTP 参考)
    • SGA/PGA:SGA_TARGET=10G、PGA_AGGREGATE_TARGET=2G;或启用 AMM:MEMORY_TARGET=12G
    • 组件:DB_CACHE_SIZE=6G、SHARED_POOL_SIZE=2.5G、LARGE_POOL_SIZE=200M
    • I/O:DB_BLOCK_SIZE=8KBdb_file_multiblock_read_count=64;归档并发:4

四 SQL 索引与分区

  • SQL 编写与执行计划
    • 避免 *SELECT ,使用绑定变量降低硬解析;WHERE 条件避免对索引列做函数计算;JOIN 列确保有索引;用 EXPLAIN PLANDBMS_XPLAN.DISPLAY 检查是否走索引、是否出现 FULL SCAN
  • 索引策略
    • 为高频 WHERE/JOIN/ORDER BY 列建索引;定期重建碎片化索引(如 REBUILD ONLINE),清理未使用/重复索引,减少维护成本。
  • 分区与并行
    • 大表按 时间/范围/列表 分区,查询仅扫描相关分区;分区表优先 本地分区索引;结合并行查询提升吞吐。

五 监控维护与压测验证

  • 诊断与监控
    • 定期生成 AWR/ADDM 报告定位 Top SQL/等待事件(如 db file sequential read、enq: TX - row lock contention);用 ASH 实时排查活跃会话;结合 V$视图(如 V$SGASTAT、V$PGASTAT、V$PGA_TARGET_ADVICE)评估内存命中与配置建议。
  • 统计信息与空间
    • 使用 DBMS_STATS 收集表/索引统计信息;清理过期数据、回收高水位、整理碎片对象,减少扫描与 I/O。
  • 变更流程
    • 任何参数/结构/索引调整先在测试环境验证,压测对比 TPS/响应时间/等待事件;生产变更选择低峰窗口,并做好备份与回滚预案

0