Oracle在Linux上的存储优化策略
导读:Linux 上 Oracle 存储优化的系统化策略 一 存储架构与布局 优先选择 ASM(Automatic Storage Management) 管理数据库文件,I/O 直连、可并行、可条带化,通常较传统文件系统具备更高的吞吐与可运维...
Linux 上 Oracle 存储优化的系统化策略
一 存储架构与布局
- 优先选择 ASM(Automatic Storage Management) 管理数据库文件,I/O 直连、可并行、可条带化,通常较传统文件系统具备更高的吞吐与可运维性;在 RAC 场景中,ASM 默认启用 Direct I/O + 异步 I/O,无需额外设置 filesystemio_options。若使用文件系统,需结合 I/O 模式谨慎配置。
- 条带化与 RAID 选择:在 RAID10 场景建议条带大小 256 KB;在 RAID-6(12 盘:10 数据盘) 场景建议 128 KB;JBOD 常用于 Gluster 等分布式存储,单节点可挂 36 块本地盘。小文件/高并发元数据密集场景优先 Replicated Volumes,大文件归档/吞吐优先 Dispersed Volumes;SSD/NVMe 缓存/分层 可显著提升读性能。
- 文件系统与挂载:数据库文件所在文件系统建议挂载 noatime(关闭访问时间更新,减少写放大);选择支持大文件与高并发的 XFS 等 64 位日志文件系统;条带对齐与对齐边界(如 4 KB/64 KB)需与存储条带一致,避免读放大与写放大。
二 Oracle 层 I/O 策略
- 异步与直接 I/O:在文件系统上,通过参数 filesystemio_options=setall 启用“异步 + 直接 I/O”;在 ASM 上无需设置该参数(默认即为 Direct I/O + 异步 I/O)。开启 Direct I/O 会绕过 OS 页缓存,需相应增大 SGA 以避免读放大与性能退化。
- 内存与 I/O 协同:启用 HugePages 减少页表开销、提升 TLB 命中并避免 SGA 被换出;当使用 HugePages 时,需关闭 AMM(MEMORY_TARGET/MEMORY_MAX_TARGET),改用 SGA_TARGET/PGA_AGGREGATE_TARGET 手工/自动共享内存管理;如启用 LOCK_SGA=true,同样与 AMM 不兼容。
- 典型配置示例(文件系统场景):
- 启用异步 + 直接 I/O:ALTER SYSTEM SET FILESYSTEMIO_OPTIONS=setall SCOPE=SPFILE;
- 关闭 AMM 并设定 SGA/PGA:ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=BOTH; ALTER SYSTEM SET SGA_TARGET=…; ALTER SYSTEM SET PGA_AGGREGATE_TARGET=…;
- 启用 HugePages:在 limits.conf 设置 memlock,计算并配置 vm.nr_hugepages,重启实例后核对 HugePages 使用情况。
三 Linux 层 I/O 与内核参数
- I/O 调度器:数据库盘优先 deadline(低延迟、保证开始服务时间);SSD/NVMe 或虚拟化环境优先 noop(避免双重调度);验证与设置示例:cat /sys/block/sdX/queue/scheduler;echo deadline > /sys/block/sdX/queue/scheduler。
- 虚拟内存与脏页:根据负载调整 vm.dirty_ratio / vm.dirty_background_ratio(大文件顺序写可适当提高;小文件随机写应降低以减少抖动),并配合 vm.dirty_writeback_centisecs / vm.dirty_expire_centisecs 控制回写节奏;降低 vm.swappiness(如 10)减少换页,设置 vm.min_free_kbytes(如 524288 KB)为关键路径预留安全余量。
- 异步 I/O 与文件句柄:提高 fs.aio-max-nr 以支持高并发 AIO;提升 fs.file-max 避免“打开文件过多”;必要时按 MOS 建议校验 AIO 子系统可用性与队列深度。
- 共享内存与信号量:按内存与实例规模设置 kernel.shmmax / shmall / shmmni 与 kernel.sem,确保共享内存段、页数与信号量集合满足峰值并发需求。
四 分布式与网络附加存储优化(Gluster/GlusterFS on Oracle Linux)
- 小文件与元数据密集:启用 mdcache 客户端失效(upcall) 与元数据缓存相关选项,显著降低 lookup 次数:
- gluster volume set features.cache-invalidation on
- gluster volume set features.cache-invalidation-timeout 600
- gluster volume set performance.cache-samba-metadata on
- gluster volume set performance.cache-invalidation on
- gluster volume set performance.stat-prefetch on
- 可按并发度调节:client.event-threads、server.event-threads、performance.io-thread-count、server.outstanding-rpc-limit。
- 卷类型与磁盘:小文件/性能优先选 Replicated Volumes(RAID6 bricks),大文件/容量/成本优先选 Dispersed Volumes(JBOD);SSD/NVMe 缓存/分层 提升读性能;标准 12 盘 节点常用于小集群/小文件,24 盘及以上 节点更适合大集群与容量型场景。
- 脏页与调优:Gluster 官方 tuned profiles 会按负载设置 vm.dirty_ratio / vm.dirty_background_ratio;大文件顺序 I/O 可提高,小文件随机 I/O 应保持较低以避免抖动。
五 监控与验证
- 操作系统 I/O:使用 iostat -x 1 持续观察关键指标——%util(设备利用率,持续接近 100% 表示瓶颈)、await(平均等待时间,理想情况下接近 svctm)、svctm(服务时间)、aqu-sz(平均队列长度)、r/s+w/s(IOPS)、rkB/s+wkB/s(吞吐)、r_await+w_await(响应时间);这些指标用于判定调优前后 I/O 路径是否改善。
- 数据库等待事件:关注 db file sequential/scattered read、direct path read/write 等事件的平均等待时间与总等待时间变化,验证 AIO/DIO、条带化与缓存策略是否生效。
- 变更流程:任何参数调整(如 filesystemio_options、disk_asynch_io、HugePages、I/O 调度器、内核 vm/fs 参数)应在测试环境验证、灰度发布,并保留回退方案;与存储/网络团队联动,确保端到端路径(数据库—OS—存储—网络)一致优化。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Oracle在Linux上的存储优化策略
本文地址: https://pptw.com/jishu/764247.html
