2. 服务器与存储规划

Oracle 数据库的服务器与存储规划,本质上不是“买一台配置高的机器”,而是把业务规模翻译成可验证的资源指标,再把这些指标落到物理机、虚拟机或云主机的规格,以及 RAID 与 ASM 磁盘组的布局上。规划顺序应当是:先量化业务负载,再推导 CPU、内存、IOPS 与吞吐量,最后决定部署形态和存储冗余方式。顺序颠倒,往往会出现“CPU 很闲但 I/O 排队严重”或“内存够大但日志写入成为瓶颈”的失衡。

一、把业务规模翻译成资源指标

业务规模通常以并发用户数、每秒事务数(TPS)、日交易量、报表查询频率、数据保留周期等口径描述。规划时要把它们转成数据库侧可观测的量:活跃会话数、每秒逻辑读、每秒物理读、每秒 Redo 生成量、单次事务平均响应时间目标。例如一个中等规模的订单系统,假设峰值 300 并发会话、峰值 800 TPS、平均每事务产生 8KB Redo、日增数据 20GB、保留 3 年,那么可以推导出:Redo 峰值约 6.4MB/s,数据文件年增量约 7TB,这些数字直接决定存储容量、日志盘带宽和备份窗口。

需要强调的是,这些是规划假设值,不是实测结果。生产上线前必须用真实业务压测或 AWR 历史数据校准,否则规划只是纸面推演。

二、CPU 与内存的估算方法

CPU 规划看两个维度:核数与单核性能。OLTP 系统更依赖高主频与低延迟,通常按“峰值 TPS × 单事务 CPU 消耗”估算,再留 30%~50% 余量。假设单事务消耗 0.5ms CPU,800 TPS 需要约 0.4 核,但考虑到并行、解析、后台进程和峰值抖动,实际会配置 8~16 物理核。OLAP 或批量场景则更看重并行度,核数需求明显更高。

内存规划的核心是 SGA 与 PGA。SGA 中 Buffer Cache 应能容纳热数据,Shared Pool 要能放下常用 SQL 与执行计划。经验上 OLTP 库 SGA 可占物理内存 50%~70%,其中 Buffer Cache 占 SGA 的 60% 左右。若热数据约 200GB,则 Buffer Cache 至少 200GB,SGA 约 330GB,物理内存需 512GB 级别。PGA 则按并发排序、哈希连接量估算,OLTP 可设 20%~30% 物理内存,并配合 pga_aggregate_target 限制。

三、IOPS 与吞吐量的关系

IOPS 关注“每秒多少次 I/O”,吞吐量关注“每秒多少 MB”。OLTP 以随机小 I/O 为主,IOPS 是主指标;数据仓库与备份以顺序大 I/O 为主,吞吐量是主指标。二者不能互相替代:一块盘可能吞吐很高但随机 IOPS 很低,也可能 IOPS 高但带宽有限。

估算时先区分读与写。读 IOPS 来自 Buffer Cache 未命中后的物理读,写 IOPS 来自 DBWR 写脏块、LGWR 写 Redo、归档与备份。假设峰值物理读 5000 IOPS、写 2000 IOPS,总需求约 7000 IOPS,再按 RAID 写惩罚放大:RAID 10 写惩罚为 2,RAID 5 为 4,RAID 6 为 6。若用 RAID 5,写 IOPS 实际需按 2000×4=8000 计算,总盘数需求会显著上升。这也是生产库更倾向 RAID 10 的原因。

业务规模 → 资源指标 → 部署与存储布局 业务规模输入 并发会话 300 峰值 TPS 800 日增数据 20GB 保留 3 年 (规划假设值) 资源指标推导 CPU:8~16 物理核 内存:512GB / SGA 330GB 读 IOPS 5000 写 IOPS 2000 Redo 6.4MB/s 部署形态选型 物理机:高 IOPS 核心库 虚拟机:中等负载、易扩展 云主机:弹性、按需 关键:本地 NVMe / 云盘 IOPS 与延迟保障 存储与 ASM RAID 10 数据盘 RAID 1 日志盘 DATA / REDO / FRA AU 1MB / 4MB 冗余 NORMAL / HIGH RAID 写惩罚与盘数估算 RAID 级别 写惩罚 写 IOPS 放大 适用 RAID 10 2 2000 × 2 = 4000 数据盘首选 RAID 5 4 2000 × 4 = 8000 读多写少 RAID 6 6 2000 × 6 = 12000 归档/备份 单盘可用 IOPS(示例) 150 IOPS / 盘 RAID 10 所需盘数 (5000+4000) ÷ 150 ≈ 60 盘 注:示例值,实际需按盘型与压测校准 ASM 磁盘组规划 DATA 数据文件 NORMAL 冗余 REDO 在线日志 HIGH 冗余 FRA 归档/备份 NORMAL 冗余 AU 大小:OLTP 选 1MB,DW 选 4MB 条带化:粗粒度(默认)适合数据文件 细粒度适合 REDO / 控制文件 故障组:跨机柜/跨存储阵列分布 目标:均衡 I/O,避免热点盘

四、物理机、虚拟机与云主机的选型

物理机适合核心交易库、对 IOPS 和延迟极敏感的场景,优势是资源独占、NUMA 可控、本地 NVMe 延迟低。虚拟机适合中等负载、需要快速克隆和迁移的环境,但要注意存储后端是否共享、是否存在“邻居噪声”,以及 vCPU 超分对 Oracle 授权和性能的影响。云主机适合弹性扩展、灾备和测试环境,选型时必须确认云盘类型(如 ESSD、SSD、高效云盘)的 IOPS 与吞吐上限,并核对是否支持多挂载与快照一致性。

一个实用的判断方法是:若峰值 IOPS 需求超过单块云盘上限,或对 Redo 写入延迟要求低于 1ms,优先物理机或本地 NVMe;若负载波动大、需要快速扩缩容,云主机更合适;若已有虚拟化平台且存储阵列性能充足,虚拟机可作为折中方案。

五、RAID 与 ASM 磁盘组落地

数据盘推荐 RAID 10,兼顾性能与冗余;日志盘推荐 RAID 1 或 RAID 10,避免写惩罚;归档与备份可用 RAID 5/6 降低成本。ASM 层面,DATA 组放数据文件,REDO 组放在线日志,FRA 组放归档与备份。OLTP 的 AU 选 1MB,数据仓库可选 4MB。冗余级别上,DATA 与 FRA 用 NORMAL,REDO 用 HIGH 更稳妥。故障组应跨机柜或跨存储阵列,确保单点故障不影响可用性。

规划完成后,建议用 SLOB 或 Swingbench 做一次 I/O 压测,观察 AWR 中的 db file sequential read 平均等待、log file sync 延迟和磁盘队列深度,再回头修正盘数与 RAID 级别。规划不是一次性的,而是“估算—压测—校准”的循环。

六、可直接使用的规划参数表(示例)

项目示例值说明
峰值 TPS800业务假设值
CPU16 物理核含 30% 余量
物理内存512GBSGA 330GB,PGA 120GB
读 IOPS5000Buffer Cache 未命中
写 IOPS2000DBWR + LGWR
RAID 级别数据 RAID 10,日志 RAID 1降低写惩罚
ASM 磁盘组DATA / REDO / FRAAU 1MB,NORMAL/HIGH
部署形态物理机 + 本地 NVMe核心交易库

这张表的价值在于把“业务规模”与“硬件规格”之间的推导关系固定下来。实际项目中,只需替换业务输入,重新计算 IOPS 与盘数,就能快速得到一版可评审的规划方案。评审时重点看三处:CPU 余量是否足够、内存能否覆盖热数据、存储 IOPS 是否满足峰值并留有余量。三处都通过,规划才算闭环。