Oracle Linux系统如何优化
导读:Oracle Linux 性能优化实战清单 一 基线评估与总体策略 明确业务类型与负载特征:区分 OLTP(短事务、低时延)与 DWH/Analytics(大扫描、高吞吐),不同负载的 I/O 调度、内存回写与并发策略差异明显。 建立可复...
Oracle Linux 性能优化实战清单
一 基线评估与总体策略
- 明确业务类型与负载特征:区分 OLTP(短事务、低时延)与 DWH/Analytics(大扫描、高吞吐),不同负载的 I/O 调度、内存回写与并发策略差异明显。
- 建立可复现的基准:在变更前后使用代表性 SQL/报表进行 A/B 测试,结合 AWR/ASH/ADDM 与系统监控,量化 RT、TPS、IOPS、延迟、CPU/内存/IO 利用率 的变化。
- 优先采用“先整体后局部”的顺序:先选对 调度器/I/O 路径/文件系统,再做 内核参数,最后做 数据库参数与 SQL。
- 变更遵循“小步快跑、可回滚”:每次只变更一类参数,保留回退方案,变更窗口内密切监控。
- 虚拟化与容器场景需额外注意:避免双重调度、资源争用与 NUMA 跨节点访问。
以上做法可借助 tuned-profiles-oracle 快速落地通用优化,并通过 AWR/ASH/ADDM 验证效果。
二 存储与文件系统优化
- 调度器选择与场景化配置
- 物理机/裸金属:数据库常用 deadline,对延迟有硬限制,适合混合负载。
- SSD/NVMe:优先 noop(减少调度开销,交由设备/上层队列)。
- 虚拟化:宿主机已做 I/O 合并与调度,来宾机更倾向 noop。
- 查看/设置示例:
- 查看:cat /sys/block/sdX/queue/scheduler
- 设置:echo deadline > /sys/block/sdX/queue/scheduler
- 队列与设备参数(示例为典型数据库盘,数值需结合设备与负载压测微调)
- echo 2048 > /sys/block/sdX/queue/nr_requests
- echo 1024 > /sys/block/sdX/queue/max_sectors_kb
- echo 1024 > /sys/block/sdX/device/queue_depth
- echo 0 > /sys/block/sdX/queue/nomerges
- echo 0 > /sys/block/sdX/queue/rotational
- blockdev --setra 0 /dev/sdX
- 文件系统与挂载选项
- ext4:noatime,nodiratime,max_batch_time=0,nobarrier,discard(discard 对性能可能正/负,亦可用 fstrim 批处理)
- XFS:nobarrier,discard
- 条带化(LVM/RAID)务必设置合理的 stripe width,传统经验值 1M 对全表扫描与小随机 IO 都较友好。
- 评估与验证
- I/O:iostat -x 1 10 观察 %util、await、r/s、w/s;
- 内存:vmstat 1 10 观察 si/so(尽量减少 swap);
- 网络:ping、traceroute、iperf 验证带宽与延迟。
以上要点覆盖调度器、队列、设备与文件系统的关键实践,并通过工具量化效果。
三 内核与资源参数优化
- 使用 tuned 快速启用数据库场景配置
- 安装与启用:yum install -y tuned tuned-profiles-oracle;tuned-adm profile oracle;systemctl enable --now tuned
- 内存与脏页回写(减少抖动、避免 swap)
- vm.swappiness=10(降低换页倾向)
- vm.dirty_background_ratio=3;vm.dirty_ratio=40
- vm.dirty_writeback_centisecs=100;vm.dirty_expire_centisecs=50
- 共享内存与信号量(Oracle SGA 依赖)
- kernel.shmmax:建议不小于 SGA 目标值(常见为物理内存的 1/2,需为 HugePage 或标准页大小的整数倍)
- kernel.shmall:ceil(shmmax/PAGE_SIZE),常见默认 2097152(约 8GB 共享页)
- kernel.shmmni=4096
- kernel.sem:四个值分别为 SEMMSL、SEMMNS、SEMOPM、SEMMNI;常用基线 250 32000 100 128,实际需按实例最大 PROCESSES 推算(SEMMSL≈最大 PROCESSES+10,SEMMNI≥128,SEMMNS≈SEMMSL×SEMMNI,SEMOPM≈SEMMSL)
- 文件句柄与异步 I/O
- fs.file-max:常见取值 6815744(按进程数估算:约 512×processes)
- fs.aio-max-nr:常见取值 1048576(Oracle 11g+ 建议)
- 网络(高并发/高带宽场景)
- net.ipv4.ip_local_port_range=9000 65500
- net.core.rmem_default=262144;net.core.wmem_default=262144
- net.core.rmem_max=4194304;net.core.wmem_max=1048576
以上参数需结合硬件容量与负载压测微调,并通过 sysctl -p 持久化。
四 大页 HugePages 与 NUMA 优化
- HugePages 提升大内存访问效率(PGA 不使用大页)
- 计算:HugePages = ceil(SGA / Hugepagesize)
- 示例:SGA=20GB,Hugepagesize=2MB → 需 10240 页
- 配置:/etc/sysctl.conf 设置 vm.nr_hugepages=10240;Oracle 启用大页;为稳妥可将 hugepages 作为引导参数加入 GRUB 提前分配。
- NUMA 与 NUMA Balancing
- 大 SGA/高并发时,优先采用 绑定内存亲和(numactl) 与 本地 NUMA 访问;
- 对部分负载可考虑 关闭 numa_balancing(需压测验证)。
- 验证:grep Huge /proc/meminfo;观察数据库启动日志中大页分配情况与前后性能对比。
大页能显著降低 TLB miss 与页表开销,是 Oracle 常用且有效的系统级优化手段。
五 数据库层与 SQL 优化及验收
- 数据库内存与并发
- 合理规划 SGA/PGA(SGA 优先大页,PGA 适配排序/哈希/并行);
- 控制 最大连接数/会话数,避免连接风暴;
- 适度增大 日志缓冲区(LOG_BUFFER) 以缓解日志写入瓶颈。
- SQL 与执行计划
- 避免 全表扫描,合理使用 索引/分区/物化视图;
- 使用 绑定变量 降低解析开销;
- 定期收集 统计信息,审查执行计划,清理无用/冗余索引。
- 监控与验收
- 使用 AWR/ASH/ADDM 定位等待事件与热点对象;
- 以业务关键指标(如 RT、TPS、批处理时长)与系统指标(如 iostat %util、await、vmstat si/so)双重验收;
- 形成“变更—监控—复盘—再优化”的闭环。
数据库层优化与 SQL 调优是释放系统调优红利的关键环节,需与 OS 层优化协同进行。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Oracle Linux系统如何优化
本文地址: https://pptw.com/jishu/766547.html
