- 首页 >
- 问答 >
-
云计算 >
- centos oracle性能调优实战技巧
centos oracle性能调优实战技巧
小樊
40
2025-12-27 06:06:29
CentOS 上 Oracle 性能调优实战技巧
一 操作系统级优化
- 内核参数与资源限制
- 共享内存与信号量:设置 kernel.shmmax≈物理内存的 85%、kernel.shmall=shmmax/4096、kernel.shmmni=4096;信号量建议 kernel.sem=250 32000 100 128。文件句柄与 AIO:fs.file-max≥65536~6815744、fs.aio-max-nr=1048576。网络:net.ipv4.ip_local_port_range=9000 65500,net.core.rmem_default/wmem_default=262144,net.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=TRUE、filesystemio_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=8KB → db_file_multiblock_read_count=64;归档并发:4。
四 SQL 索引与分区
- SQL 编写与执行计划
- 避免 *SELECT ,使用绑定变量降低硬解析;WHERE 条件避免对索引列做函数计算;JOIN 列确保有索引;用 EXPLAIN PLAN 与 DBMS_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/响应时间/等待事件;生产变更选择低峰窗口,并做好备份与回滚预案。