温馨提示×

oracle在centos上如何进行性能调优

小樊
35
2025-12-07 13:48:15
栏目: 云计算

总体思路与前提

  • 以瓶颈驱动:先用 AWR/ASH 报告定位是 CPU、内存、I/O、锁争用 还是 SQL 问题,再逐层优化。
  • 基线先行:记录当前 OS 与数据库 指标(CPU、内存命中、I/O 时延、会话与等待),每次变更保留回滚方案与对比数据。
  • 变更可控:一次只改少量参数,变更后观察至少 1–2 个业务高峰,避免“拍脑袋”调参。

操作系统层优化

  • 使用 tuned 管理内核参数
    • 选择或创建面向数据库的 profile(如 throughput-performance 基础上定制),并激活:
      • 查看/切换:tuned-adm listtuned-adm profile oracle-performance
    • 典型优化项(示例值,需结合内存与负载计算):
      • 内存与交换:vm.swappiness=10(减少换页,避免抖动)
      • 文件与 AIO:fs.file-max=6815744fs.aio-max-nr=1048576
      • IPC/信号量:kernel.sem=250 32000 100 128
      • 本地端口范围:net.ipv4.ip_local_port_range=9000 65500
      • TCP 缓冲:net.core.rmem_default=262144net.core.rmem_max=4194304net.core.wmem_default=262144net.core.wmem_max=1048576
      • 透明大页:建议禁用(echo never > /sys/kernel/mm/transparent_hugepage/enabled),避免影响数据库内存分配与性能稳定性。
  • 大页 HugePages(可选,提升 SGA 分配效率)
    • 计算目标页数(示例):HugePages_Total ≈ SGA_TARGET / Hugepage_size;例如 SGA=16G、Hugepage 2M,目标约 8192
    • 配置 /etc/sysctl.confvm.nr_hugepages=<目标值>;重启或按需生效;用 grep Huge /proc/meminfo 验证。
  • 存储与文件系统
    • 优先 SSD/NVMe;将 数据文件、重做日志、归档日志 分离到不同磁盘/阵列,降低争用。
    • 使用 XFS/ext4 等成熟文件系统,合理挂载选项(如 noatime、barrier 按阵列能力选择)。

数据库层内存与并发

  • 启用自动内存管理(AMM/ASMM)
    • 启用 AMMALTER SYSTEM SET memory_target=12G SCOPE=SPFILE;(示例值,需小于物理内存并预留 OS 与 PGA)
    • 或启用 ASMMALTER SYSTEM SET sga_target=8G SCOPE=SPFILE;ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=SPFILE;
    • 避免同时设置 memory_targetsga_target/pga_aggregate_target 冲突。
  • 关键内存与日志参数(示例)
    • 日志缓冲:ALTER SYSTEM SET log_buffer=64M SCOPE=SPFILE;(高并发/大事务可适当增大)
  • 连接与会话
    • 合理设置进程与会话上限(示例):ALTER SYSTEM SET processes=500 SCOPE=SPFILE;ALTER SYSTEM SET sessions=1000 SCOPE=SPFILE;
    • 结合应用连接池(如 HikariCP、UCP)控制实际连接数,避免超过 OS/DB 能力。
  • 并行度
    • 依据 CPU 核数与负载设置 parallel_max_serversparallel_degree_policy,避免并行泛滥导致资源争用。

SQL 与存储结构优化

  • SQL 优化
    • 避免 SELECT *,只查必要列;使用 绑定变量 减少硬解析;用 EXPLAIN PLAN 与 SQL Monitor 定位高成本操作。
    • 减少 全表扫描,为高频过滤/连接列建立合适索引;避免过多或重复索引(增删改代价上升)。
  • 索引与维护
    • 定期收集统计信息:EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'SCHEMA_NAME', estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt=>'FOR ALL COLUMNS SIZE AUTO', cascade=>TRUE);
    • 对高碎片或明显退化的索引按需重建/重组,控制维护窗口。
  • 分区与并发
    • 大表按 时间/业务键 分区,配合 分区裁剪 提升查询与维护效率;分区索引与本地索引减少争用。
    • 合理设计事务粒度与隔离级别,降低 锁等待死锁 概率。

监控与维护

  • 性能诊断
    • 定期生成 AWR/ADDM 报告,识别 Top SQL、等待事件与资源瓶颈;结合 ASH 做短时段热点分析。
    • 示例生成 AWR 报告(SQL*Plus 中执行,按实际 DBID/INSTANCE_NUMBER 调整):
      • SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(<DBID>, <INSTANCE_NUMBER>, <开始快照>, <结束快照>));
  • 运行维护
    • 持续收集统计信息、按需重建/重组索引、清理无用对象与历史分区;保持 OS 与数据库补丁 更新,遵循备份与恢复最佳实践(如 RMAN 全备+归档)。

0