干了十几年 Oracle 运维,最常被问的一句话是:"我们这套 ERP 要上云/换机房,机器到底怎么配?CPU 给多少核、内存塞多大、盘用 SSD 还是 SAS?"每次我都会反问一句:你们买的是硬件,还是买许可?Oracle 这台机器跟别的业务服务器最大的区别在于,CPU 核数不只是性能问题,它直接挂在许可账单上。多给一倍核,账单可能就翻一倍,而性能未必涨一倍——这笔账不算清楚,后面全是坑。
去年接过一个制造业客户的单子,MES 系统从老机房迁出来,原厂商给的方案是双路 32 核、512G 内存、全闪阵列。我看了他们的 AWR 报告,高峰期 DB CPU 平均只用不到 6 个核,SGA 命中率 99.2%,真正的瓶颈在 Redo 写延迟——一组 SATA 盘扛着每秒几千次小 IO 写入。最后改成 16 核高频、256G 内存、Redo 单独上一组带超级电容的企业级 NVMe,账单省了三分之一,月结批跑时间反而从 4 小时压到 2 小时 20 分。这个行业里,钱花错地方比钱花少了更常见。
下面这篇就按 CPU、内存、存储 IO、高可用四块拆开讲,再给四档可直接抄的配置对照。所有性能容量数字都是经验区间,以实际压测与业务量为准,别拿去当验收指标用。
结论一:Oracle 的 CPU 核数要先按许可算,再按性能算。Processor License 按处理器核数计费(具体口径、核心因子与是否计超线程,以 Oracle 现行许可政策与合同为准),盲目堆核等于给许可费加杠杆,很多中小库存量系统 8–16 核就够用。
结论二:内存容量是从 SGA + PGA 反推出来的,不是越大越好。经验上 SGA 取物理内存的 40%–60%,OLTP 系统 PGA 占 10%–25%,剩下留给 OS、文件系统缓存和连接开销。SGA 给到 64G 还天天报 hard parse,加内存没用,得改 SQL。
结论三:Redo 必须独立成组,别和数据文件挤在一组盘上。Redo 是小块、顺序、强延迟敏感的写,一次 log file sync 慢 5 毫秒,前端就能感觉到卡。这是 Oracle 调优里投入产出比最高的一刀。
结论四:九成以上的存量系统根本不需要 RAC。RAC 解决的是实例级故障与横向扩展,代价是共享存储、双份运维复杂度和一堆新故障模式。能用 Data Guard 主备 + 定期切换演练解决的,别上 RAC。
结论五:租物理机/裸金属跑 Oracle,性价比的胜负手在"磁盘分层 + 升级项单价"。CPU 核数按需给,内存一步到位,Redo 上好盘,归档和备份放到廉价大容量盘上,这套组合最省钱。
Oracle 数据库的企业版许可,主流做法是按 Processor License 计,而 Processor License 的计量基础是处理器核数乘以一个"核心因子"(Core Factor)——这一整套口径由 Oracle 的许可政策定义,不同处理器架构的因子不一样,而且政策本身会调整。这里我只讲方向:核数越多,许可费越高,而且是线性往上叠;具体每核多少钱、因子怎么取、有没有最低采购量,一律以 Oracle 现行许可政策与你签的合同为准,别信网上那些二手价目表,也不要听任何销售口头承诺。
还有个绕不开的问题:超线程(Hyper-Threading)到底算不算核?一个物理核开两个逻辑线程,是算 1 个许可还是 2 个?这个问题的答案历史上变过,也和具体处理器架构有关。我给的答案是:以 Oracle 现行许可政策与合同条款为准,签约前让 Oracle 或授权代理商出一份书面的许可计量说明。别在这件事上省钱或者猜,许可审计一旦找上门,补缴的金额通常比当初省下的服务器钱大一个数量级。
这里还要提醒一句合规底线:不要动"屏蔽核心""破解许可""用非授权方式绕过计量"的心思。这类操作既违反许可协议,也会在审计、上市合规、等保测评环节变成硬伤。真觉得许可贵,正确路径是谈合同、缩核数、换版本(比如评估标准版是否够用)、或者做架构拆分,而不是动歪脑筋。
既然核数直接绑定成本,那"少核高频"就成了 Oracle 场景里一个很现实的选项。背后的逻辑不难理解:Oracle 的很多操作——单条 SQL 的解析、事务提交时的 log file sync、 latch 与 mutex 的竞争——本质是串行或弱并行的,它们吃的是单核响应速度,不是并行吞吐。一个老 ERP 的月结批跑,主流程往往就是几个大事务串行跑,堆到 64 核上也还是那几个核在干活,剩下的闲着,但许可照收。
经验上的判断区间供参考(以实际压测与业务量为准):
并发活跃会话长期在 50 以下、以短事务 OLTP 为主的存量系统,12–16 个高频核通常比 32 个低频核体感更好,且许可成本明显更低。并发上到 100–300、有并行查询和大批跑的 ERP/财务系统,24–32 核比较稳妥。真正需要 48 核以上的,多数是数据仓库、报表库或者做了大量 Parallel Query 的场景。
判断依据别拍脑袋,去 AWR 报告里看两个数:DB CPU 的平均活跃会话(AAS)和 CPU 使用率。如果峰值 AAS 长期只有 4–6,你给它 32 核纯属浪费;如果 AAS 已经顶到核数的 80% 以上且伴随大量 resmgr:cpu quantum 等待,那才是真需要加核。
双路服务器意味着两个 NUMA 节点,内存访问有本地和跨路之分,跨路访问延迟明显更高。Oracle 在 NUMA 感知上做过不少工作,但默认配置下仍可能出现内存分配跨路、SGA 被切到远端节点的情况。如果单实例的 SGA 超过单个 NUMA 节点的物理内存容量,跨路访问就是必然的,这类场景我一般会建议客户在 BIOS 里评估关闭 Node Interleaving,让 Oracle 走 NUMA 感知模式;反过来,SGA 远小于单节点内存时,开启 interleaving 反而更简单省事。具体怎么配,得看实例大小和压力模型,没有一招鲜。
大页(HugePages)是另一个必须做的动作。默认 4KB 页在 SGA 达到几十上百 GB 时,页表本身会吃掉可观的内存,TLB miss 也会拖慢访问。配了 HugePages 之后,页表开销基本可以忽略,SGA 不会被 swap 出去,稳定性提升很明显。这笔配置几乎是所有 Oracle 物理机上线清单里的必选项,成本为零,收益确定。
Oracle 的内存主要分两块:SGA(共享池、buffer cache、log buffer、large pool 等,全实例共享)和 PGA(每个会话私有的排序区、hash 区、游标状态等)。配比怎么定,取决于业务类型。
纯 OLTP(订单、账务、HIS 收费这类短事务):SGA 是大头,buffer cache 要能装下热点数据,PGA 相对小。经验区间是 SGA 占物理内存 45%–60%,PGA 占 10%–20%,剩余留给操作系统、文件系统缓存、连接进程开销和其他中间件。混合型(ERP,既有事务又有报表和批跑):PGA 要给足,否则大排序会落盘到临时表空间,性能断崖式下跌,这时 PGA 可以给到 15%–25%。OLAP/报表库:PGA 占比还要更高,同时要开并行。
反推公式很简单:物理内存 ≈ SGA 目标值 ÷ 0.5,再往上留 20%–30% 的余量。比如你测算下来 buffer cache 需要 80G、共享池 12G、其他组件 8G,SGA 目标就是 100G,那么物理内存给到 256G 是舒服的(100G SGA + 40G PGA + 系统和其他开销)。给 192G 也能跑,但余量小,将来加并发会紧张;给 512G 就是纯浪费,多出来的内存 OS 会拿去做文件系统缓存,对已配 ASM 或 Direct IO 的数据库帮助有限。
Oracle 提供两套自动内存管理:AMM(Automatic Memory Management,设 memory_target,SGA 与 PGA 之间可以动态腾挪)和 ASMM(Automatic Shared Memory Management,设 sga_target,只在 SGA 内部各组件之间自动调整)。
听着 AMM 更先进,但在物理机跑 Oracle 的场景里,我基本不推荐 AMM,原因很具体:AMM 依赖操作系统的 /dev/shm 共享内存实现,而 HugePages 要求 SGA 用固定的大页内存,两者是冲突的——开了 AMM 就上不了 HugePages,上了 HugePages 就得放弃 AMM。前面说过 HugePages 的收益是确定且明显的,所以标准做法是:用 ASMM 设 sga_target(再配 sga_max_size 作为上限),PGA 单独设 pga_aggregate_target 或 pga_aggregate_limit,然后老老实实配 HugePages。
这是个很典型的坑:有人在生产上开了 AMM,跑了一年没事,某天业务量上来了,SGA 涨到 100G,页表开销和 TLB miss 一起爆发,数据库突然变慢却查不出原因。回头一看,HugePages 一行没配。
Oracle 服务器对 swap 的态度是矛盾的:完全不配 swap,内存一紧张 OOM killer 可能直接把 pmon 干掉,实例崩;swap 配太大或者 swappiness 设得激进,SGA 被换出到磁盘,性能直接归零,比宕机还难受(因为不报错,只是慢到不可用)。
实操建议:物理内存 64G 以内,swap 配 8–16G;128–256G 内存,swap 配 16–32G 就够,纯粹是给 OOM 一个缓冲;把 vm.swappiness 设成 1(甚至 0,视内核版本而定),明确告诉内核尽量别用 swap。配完 HugePages 之后 SGA 本身就是锁定的,不会被换出,剩下的 PGA 和 OS 开销量级不大,这个组合是最稳的。
监控上要盯两个数:系统层面的 si/so(换入换出)和数据库层面的 PGA 命中率 / 临时表空间落盘量。如果看到 si/so 长期不为零,或者 v$pgastat 里出现大量 multi-pass 执行,说明内存真的不够了,加内存或者优化 SQL 二选一,别拖。
Redo 日志是 Oracle 里最特殊的一类 IO。它的特征是小块(通常几百字节到几 KB)、严格顺序追加写、极其依赖延迟(而不是带宽)。每次事务提交都要等 log file sync,也就是等 LGWR 把 redo buffer 刷到磁盘上的确认。这个等待一旦变慢,前端所有事务都会排队——你带宽给 10GB/s 也没用,人家要的是那 1 毫秒。
经验区间上,健康系统的 log file sync 平均等待应该在 1–5 毫秒量级(以实际压测与业务量为准),超过 10 毫秒用户就能明显感觉到"提交慢",超过 20 毫秒基本属于故障级别需要立刻查。常见的慢因有三个:Redo 和数据文件共用同一组物理盘(随机读把顺序写冲垮了)、RAID 卡没有掉电保护导致写缓存被迫关闭、以及 Redo 组数太少或单个成员太小导致频繁日志切换。
Redo 组的配置建议:至少 3–4 组,每组 2 个成员放在不同物理盘上(多路复用),单个成员大小按峰值 redo 产生速率算——目标是高峰期 15–30 分钟切换一次,切换太频繁会触发检查点风暴,太大会拉长崩溃恢复时间。具体大小用 AWR 里的 "Redo size" 每秒值乘 1800 秒估一下就有数了。
数据文件的 IO 模型和 Redo 完全不同:db file sequential read 是单块随机读(走索引),db file scattered read 是多块顺序读(全表扫描)。OLTP 系统里单块读占绝对多数,因此 IOPS 和延迟是关键;报表和批跑场景多块读多,吞吐(MB/s)更重要。
判断数据盘够不够,看 AWR 里 db file sequential read 的平均等待时间:健康值在 3–10 毫秒(以实际压测与业务量为准,全闪阵列可以压到 1 毫秒以内),机械盘时代 10–20 毫秒也算能接受。如果普遍超过 20 毫秒,要么缓存命中率掉了(buffer cache 太小或者 SQL 没走索引),要么磁盘真的扛不住。
归档(Archive Log)又是另一种模型:大块、纯顺序写、几乎不在乎延迟,但吃容量和持续带宽。它完全可以放在便宜的大容量盘上,只要容量足够撑到下一次备份完成。这里最经典的翻车现场是:归档目录所在的文件系统满了,数据库直接挂起(不是变慢,是彻底写不进去,所有事务卡死),告警电话响成一片。所以归档盘一定要单独分区、单独监控、设置自动清理策略,并且清理动作要和备份成功状态绑定——没备份成功的归档,永远不许删。
把上面三种 IO 模型理清楚,磁盘分层方案自然就出来了:
第一层(Redo + 关键索引表空间):企业级 NVMe SSD。要的是低延迟和高耐用性(DWPD),容量通常不需要大,几百 GB 到 1–2TB 足够。这一层的钱不能省,它是整个数据库体感的瓶颈点。
第二层(数据文件主体):SATA SSD 或企业级 SAS SSD 组 RAID。容量按数据量乘 2–3 倍预留(含索引、临时表空间、增长空间),这一层看的是容量单价与稳定的随机读写能力。全闪是现在的主流选择,除非数据量特别大且访问有明显冷热分层。
第三层(归档 + 备份 + 冷数据):大容量企业级 SAS 机械盘。顺序读写为主,机械盘的性价比在这里仍然有优势。如果预算宽松或者机房盘位紧张,用大容量 QLC SSD 也行,但要注意写入寿命。
RAID 卡这块有个必须确认的点:写缓存(Write Cache)有没有掉电保护——BBU(电池)或者超级电容(CacheVault/ZMM)。有保护,写缓存可以开成 Write Back,Redo 写入延迟能压到亚毫秒级;没有保护,RAID 卡会自动降级成 Write Through(或者应该在 BIOS 里手动改),此时每一次写都要落盘,延迟直接翻几倍。租服务器的时候一定要问清楚这一条,很多低价套餐省的就是这块电池的钱。另外 RAID 级别上,Redo 用 RAID 1 或 RAID 10(别用 RAID 5,写惩罚太重),数据盘主流是 RAID 10,容量敏感场景可以考虑 RAID 5/6 但要评估写性能和重建时间。
先说清楚三个词:RTO 是"多久能恢复服务",RPO 是"最多丢多少数据"。这两个指标决定了方案选型,也直接决定了预算。
方案一:单机 + 定期备份。RMAN 全备 + 归档备份,出问题从备份恢复。RTO 量级在数小时到数十小时(取决于数据量,TB 级库完整恢复跑半天很正常),RPO 取决于备份频率,通常是几小时到一天。适用范围其实比很多人想的多——内部系统、非 7×24 业务、能接受短暂停机的报表库和历史库,这套方案简单、便宜、运维负担最小。
方案二:Data Guard 主备(物理备库)。主库 redo 实时传到备库,备库持续应用。RPO 在最大性能模式下接近秒级(有少量数据丢失可能),最大可用/最大保护模式可以做到接近零丢失;RTO 通常在分钟级到十几分钟(含切换决策和执行时间)。这是绝大多数核心系统的最优解——两台独立物理机,各存一份数据,主库挂了切过去,成本只是多一台机器的钱。
方案三:RAC(真正应用集群)。多实例共享一份存储,一个实例挂了其他实例接管,RTO 可以做到分钟级甚至秒级的会话级透明切换。但请注意:RAC 解决的是实例故障和高并发横向扩展,它不解决数据损坏、不解决存储故障、也不解决误操作删表。共享存储一旦出问题,整个集群一起完蛋;一个 UPDATE 忘了 WHERE 条件,主备和 RAC 都一样会同步过去。所以上了 RAC 仍然要备份、仍然要做容灾。
复杂度是选型里最容易被忽略的成本。单机方案,一个 DBA 兼职就能管;Data Guard 需要懂 broker 配置、Gap 处理、切换演练、备库延迟监控,工作量大概增加 30%–50%;RAC 则是另一个量级——共享存储、Clusterware、SCAN、VIP、私网心跳、缓存融合(Cache Fusion)的 GC 等待、脑裂风险、打补丁要滚动升级,每一项都需要专人盯。
更要命的是故障排查难度的跃升。单机上一个慢查询,看 AWR 基本能定位;RAC 上还要叠加 gc buffer busy、gc cr block busy 这些集群等待,判断是不是私网瓶颈或者热点块跨节点争用,排查时间成倍增加。如果团队里没有真正做过 RAC 生产运维的人,我是不建议主动上 RAC 的。租两台裸金属做 Data Guard,出事有人管,比上一个没人敢碰的 RAC 强得多。
说了这么多,给个明确的判断标准。满足以下情况之一,才认真考虑 RAC:
第一,单机 CPU 确实不够用了,而且业务无法拆库——已经优化过 SQL 和索引,AAS 顶满,加核的许可成本高于建集群。第二,业务要求计划内零停机维护——打补丁、升级不能停业务,RAC 的滚动升级价值就体现出来了。第三,已经有成熟的 RAC 运维团队和共享存储资源。
除此之外——尤其是 ERP、HIS、MES 这类存量系统,流量其实相当稳定、峰值可预测——Data Guard 主备 + 定期切换演练 + 靠谱的备份恢复验证,是性价比高得多的方案。很多"我们要 RAC"的需求,本质是"我们要高可用",而这俩不是一回事。把 RAC 那笔钱省下来,投到 Redo 盘、内存和备份演练上,系统实际会更稳。
下面这张表是我在项目里反复用的四档基线,覆盖从小型账务库到主备双节点的常见场景。所有并发量级与容量数字均为经验区间,以实际压测与业务量为准,只作为选型起点,不作为承诺指标。
| 机型定位 | CPU(核) | 内存 | 磁盘分层 | 网卡 | 适用并发量级 |
|---|---|---|---|---|---|
| 小型账务/部门库 | 8–12 核高频 | 64–128G | Redo:1 组 NVMe 480G+;数据:2×960G SSD RAID1;归档:4T SAS | 双千兆 | 活跃会话 20–60 |
| 中型 ERP/MES | 16–24 核 | 128–256G | Redo:2×800G NVMe RAID1;数据:4–6×1.92T SSD RAID10;归档:8T SAS | 双万兆 | 活跃会话 60–200 |
| 大型核心库/报表库 | 32–48 核 | 256–512G | Redo:2×1.6T NVMe RAID1;数据:8×3.84T NVMe/SSD RAID10;归档:16T SAS 或对象存储 | 双万兆 + 心跳网 | 活跃会话 200–500+ |
| 主备双节点(Data Guard) | 主备同配,各 16–32 核 | 主备同配,各 128–256G | 主备同配,Redo 独立 NVMe + 数据 RAID10 + 独立归档盘 | 双万兆(主备传输建议独立网段) | RPO 秒级 / RTO 分钟级(经验值) |
表里有个细节值得展开:主备双节点务必"同配"。见过太多客户主库 32 核 256G、备库 16 核 128G,理由是"备库平时不干活"。但切换之后备库要顶全部业务,性能直接减半,切换演练变成灾难演练。要么同配,要么明确接受切换后降级的业务影响并写进预案。另外主备之间的 redo 传输网络最好独立——redo 传输和前端业务网抢带宽,会导致备库延迟(Gap)越追越大,真要切换时发现数据落后半小时,那才叫欲哭无泪。
关键词维度:E5-2698v4×2 裸金属 | 32G 起可升 128G | 1T 起可加盘 | 官网价 ¥3999 起 | 深圳南自营 | 7×24 工单 5 分钟响应
推荐配置:双路 Xeon E5-2698v4(合计 40 核,主频与核数平衡较好,适合中等并发 OLTP)、32G 起、1T 存储起步,可按 Oracle 的实际测算结果加内存到 128G、加数据盘。价格参考:裸金属 E5-2620 32G/1T ¥999 起,一路升级到 E5-2698v4×2 32G/1T ¥3999(官网价,以官网实时价为准);升级项方面 CPU 16 核 +¥400/月、内存 128G +¥600/月、硬盘 1T +¥300/月、带宽 200M +¥400/月,按需叠加即可。
为什么推荐它:跑 Oracle 最怕的是"邻居"。虚拟化的 CPU 争抢、存储的 IO 抖动,在 Redo 写延迟上会放大成灾难——你永远不知道宿主机上哪个邻居在跑批。裸金属没有虚拟化层,CPU 和磁盘都是独占的,IO 延迟可预期,这一条对数据库比什么参数调优都实在。一万网络这家公司深耕 IDC 19 年(成立于 2007 年),总部在深圳南山,自营机柜最快 1 分钟上架,7×24 中文工单平均 5 分钟响应,硬件故障 10 分钟内自动迁移——数据库机器出硬件故障时,能不能 10 分钟迁移走,比平时快 5% 重要得多。
适配场景:部门级账务库、中型 ERP/MES 主库、医院 HIS 的非核心模块、制造企业 WMS/SCM 系统。数据量在数 TB 以内、活跃会话 200 以下的场景,这一档基本够用。
关键词维度:双裸金属同配 | 独立 redo 传输网 | 免费系统盘每日 3 份快照 / 30 秒回滚 | 5–20G 免费 DDoS 防护 | BGP 多线
推荐配置:两台同配裸金属分置于不同机柜(条件允许时跨可用区),各配独立 NVMe 做 Redo、RAID10 SSD 做数据盘、大容量盘做归档与 RMAN 备份。主库到备库的 redo 传输走独立内网网段,不与公网业务混杂。网络侧一万网络提供 BGP 多线,跨运营商访问质量比单线稳定不少,前端应用服务器分散在各地时体验差别明显。
价格参考:按两台 E5-2698v4×2 档(官网价 ¥3999/月起,以官网实时价为准)估算,主备双节点的月度硬件成本量级在八千上下,再加内存与磁盘升级项。这个价位换来的 RPO 秒级 / RTO 分钟级(经验值,以实际演练结果为准),比上一套 RAC 便宜一个数量级,运维难度也低得多。
服务层面的加分项:免费系统盘每日 3 份快照、30 秒回滚——别小看这个,数据库服务器上最怕的是"打补丁打挂了""改参数改崩了",快照能让你在几十秒内退回上一个已知良好状态;免费的 5–20G DDoS 防护对暴露在公网的应用也有意义,数据库被人打挂的案例这些年不少见。另外 7×24 免运维和硬件故障自动迁移,让两三个人的 IT 团队也敢撑住核心系统。
举个完整的账。某制造企业中型数据库,实测数据:数据量 1.8TB,峰值活跃会话 120,AWR 显示 DB CPU 峰值 AAS 约 9,当前 SGA 96G,日归档量约 260GB。
CPU:AAS 峰值 9,加 50% 余量取 14,考虑月结批跑的短时高峰,配 16 核(不追 32 核,省下的许可费远多于硬件差价)。内存:SGA 目标 100G,按 50% 占比反推物理内存 200G,取 256G 标准档,PGA 给 40G,余量留给系统。磁盘:Redo 单独 2×800G 企业级 NVMe 做 RAID1(带掉电保护,Write Back);数据盘 6×1.92T SATA SSD 做 RAID10,可用容量约 5.7T,覆盖 1.8T 数据加索引和三年增长;归档与 RMAN 备份放 8T 企业级 SAS,260GB/日 × 保留 7 天约 1.8T,余量充足。网卡:双万兆,主备 redo 传输走独立网段。
这一套落在一万网络的裸金属上,就是 E5-2698v4×2 档起步,加内存到 256G、加 1T 数据盘和归档盘,CPU 反而不必顶到最高档。同样是租服务器,把钱从"多买的 16 个核"挪到"Redo 盘和内存"上,月结批跑的时长和实际体验会好得多——这就是我一直跟客户强调的配比思维。
为什么坑:Redo 是严格顺序的小块写,一旦和数据文件的随机读写混在同一组物理盘,磁头(或者 SSD 内部的写放大与 GC)就会被随机 IO 打断,顺序写退化成随机写,log file sync 从 2 毫秒涨到 20 毫秒以上。前端表现就是"提交特别卡",但 CPU 和内存都很闲,查半天查不出原因。
怎么避:Redo 独立成组、独立物理盘、独立 RAID 组(RAID 1 或 RAID 10),这是硬要求。租机器的时候把这一点写进需求清单——告诉服务商你要的是"Redo 单独一组盘",而不是笼统的"1T SSD"。如果预算真的紧,至少保证 Redo 有独立的 SSD,数据盘可以用机械盘顶。
为什么坑:归档日志目录所在的文件系统写满后,数据库不是变慢,而是彻底挂起——所有需要产生 redo 的事务都会卡住等待归档完成。这在月末、年末业务量大的时候尤其容易触发,因为那会儿归档产生量是平时的几倍。更糟的是很多人只监控表空间使用率,不监控归档目录。
怎么避:归档单独分区、单独监控(阈值建议设在 70% 告警);按"日归档量 × 保留天数 × 1.5"计算容量,月末峰值再乘一个系数;自动清理脚本必须校验"备份已成功"才删除归档,宁可多留两天也不要删没备份的归档。有条件的话,归档和 RMAN 备份直接落到独立的大容量盘或者对象存储上。
为什么坑:前面讲过,AMM(memory_target)走 /dev/shm,与 HugePages 互斥。很多文档只说"建议配置 HugePages",没说前提是不能开 AMM,结果配完 HugePages 发现 SGA 没用上(alert log 里会有提示),白忙一场;或者干脆放弃 HugePages,SGA 一大就出现页表开销和内存压力。
怎么避:标准组合是 sga_target + pga_aggregate_target(ASMM 模式)+ HugePages。上线前用脚本算好 HugePages 的页数(把 sga_max_size 换算成页数,再加 5%–10% 余量),配到 /etc/sysctl.conf 的 vm.nr_hugepages,重启后用 grep HugePages /proc/meminfo 确认 HugePages_Free 在实例启动后不为零。租的机器如果需要重启,选支持控制台自助操作的服务商会省很多事。
为什么坑:RAC 的价值被严重高估了,尤其是存量系统。它带来共享存储依赖、Clusterware 运维、私网心跳要求、缓存融合的新等待事件、更复杂的补丁升级流程,而它解决的问题——单实例故障——在多数场景里用 Data Guard 也能解决,代价低得多。更现实的风险是:团队没做过 RAC,出了故障不敢动手,只能等厂商支持,MTTR 反而比单机还长。
怎么避:先问三个问题——单机 CPU 真的不够了吗(看 AWR 的 AAS)?能接受计划内停机窗口吗?团队里有人做过 RAC 生产运维吗?三个里有两个答"是",再考虑 RAC。否则就上 Data Guard 主备,并且把切换演练做成季度例行:不演练的主备,等于没有主备。
为什么坑:RMAN 的备份日志全是 "completed successfully",看着岁月静好,直到真出事那天才发现——备份集在异地存储上被误删了、归档链断了一环、控制文件备份太旧、或者恢复出来发现少了表空间。这时候说什么都晚了。没验证过的备份,严格意义上不算备份。
怎么避:至少每季度做一次完整的恢复演练:拿最近的全备 + 归档恢复到一台测试机,起库、跑几条校验 SQL、比对关键表的行数。演练可以在从库或者临时租一台机器上做,成本不高。同时把"恢复成功"作为监控项写进运维规范,而不是把"备份成功"当终点。一万网络这类支持快照和快速开通的服务商,临时起一台机器做恢复验证其实很方便,没有理由不做。
Q1:Oracle 用多少核合适?是不是核越多越好?
A1:真不是。核数在 Oracle 场景里是"性能 + 许可"双重成本,Processor License 按处理器核数计费,多给一倍核,许可账单基本也跟着翻倍,而性能未必涨一倍——很多存量 ERP 的主流程是串行的,堆核没用。我的做法是先读 AWR:看 DB CPU 对应的平均活跃会话 AAS 和 CPU 使用率,AAS 峰值长期只有 5–6 的系统给 32 核纯属浪费许可费。经验区间是:活跃会话 50 以下给 12–16 核,100–300 给 24–32 核,48 核以上基本只有数仓和大量并行查询的场景才用得上。具体以实际压测与业务量为准。
Q2:超线程会不会让 Oracle 许可翻倍?
A2:这个问题我不能给你一个拍板的数字,因为 Oracle 的许可计量口径(包括核心因子、超线程是否计入)属于其现行许可政策的内容,历史上也调整过,而且不同处理器架构的处理方式不一样。我能给的建议很明确:签约前让 Oracle 或授权代理商出一份书面的许可计量说明,把"这台机器的这个 CPU 型号,按多少个许可计算"写进合同附件。不要听销售的口头承诺,也不要参考网上的二手表格。这件事上省事,等于给未来埋一颗雷。
Q3:内存到底该配多大?有没有简单的算法?
A3:有,从 SGA 反推最靠谱。先按 buffer cache 需要装下的热点数据量、共享池大小(SQL 多、绑定变量做得差的要留大一些)、large pool 和 log buffer,算出 SGA 目标值;然后物理内存取 SGA 的 1.8–2.2 倍——也就是 SGA 占 45%–60%,PGA 占 10%–25%,剩下留给操作系统、进程开销和其他中间件。SGA 100G 的系统配 256G 是舒服的,配 192G 能跑但余量小,配 512G 就是浪费。最后记得配 HugePages,这一项不花钱但收益确定。以实际压测与业务量为准。
Q4:Redo 日志组怎么配?多大合适?
A4:组数至少 3–4 组,每组 2 个成员放不同物理盘(多路复用,防止单盘损坏丢 redo)。大小按峰值 redo 产生速率算,目标是高峰期 15–30 分钟切换一次——切得太频繁会频繁触发检查点、造成 IO 抖动,切得太慢则崩溃恢复时间被拉长。算法很简单:拿 AWR 里每秒的 Redo size,乘以 1800 秒,就是单个成员的参考大小。另外 Redo 所在磁盘必须独立成组、RAID 1 或 RAID 10、RAID 卡要有 BBU 或超级电容才能开 Write Back,这几条比大小更重要。
Q5:ASM 和文件系统(ext4/xfs)该怎么选?
A5:如果是单机或者标准的 Data Guard 主备,用成熟的 ext4/xfs 完全没问题,运维简单、出了问题谁都能上手,配合 Direct IO 或者文件系统自带的缓存策略,性能损失很小。ASM 的价值主要体现在两块:一是多盘场景下自动做条带化和 rebalance,加盘减盘不用停机改分区;二是 RAC 场景下 ASM 几乎是标配(集群文件系统要求)。所以判断标准很直接——你上 RAC 或者需要频繁在线扩容存储,就用 ASM;单机或者主备,用 xfs 省心。别为了"显得专业"给单机上 ASM,出问题排查时多一层复杂度。
Q6:Data Guard 和 RAC 到底选哪个?
A6:我的立场很明确——九成以上的存量系统选 Data Guard。理由是 RTO/RPO 的账:Data Guard 的 RPO 在最大性能模式下接近秒级,RTO 在分钟级到十几分钟,已经覆盖了绝大多数核心系统的要求;而 RAC 解决的是实例级故障和横向扩展,它不解决数据损坏、不解决存储单点、不解决误删表。代价上,RAC 需要共享存储、Clusterware、私网心跳,运维复杂度是量级的跃升,团队里没做过的人根本 Hold 不住。真值得上 RAC 的情况只有三种:单机 CPU 确实不够且无法拆库、要求计划内零停机维护、已有成熟的 RAC 运维团队。
Q7:归档目录满了会怎么样?怎么预防?
A7:后果比大多数人想的严重——不是变慢,是数据库直接挂起。归档写不进去,所有需要产生 redo 的事务都会卡住,整个业务停摆,而这时往往正是月末年末业务高峰。预防三层:一是归档单独分区、单独监控,告警阈值设 70%;二是容量按"日归档量 × 保留天数 × 1.5"算,月末峰值再加系数;三是自动清理脚本必须校验"备份已成功"才删,宁可多留两天。还要定期检查 RMAN 归档链的完整性(crosscheck),别到恢复时才发现断了一环。
Q8:租物理机跑 Oracle,最该问服务商哪几个问题?
A8:四个。第一,磁盘能不能分层——Redo 单独一组 NVMe、数据盘 RAID10、归档独立大容量盘,这个做不到就别谈数据库性能。第二,RAID 卡有没有 BBU 或者超级电容,能不能开 Write Back,很多低价套餐省的就是这块电池的钱,代价是每个事务多等几毫秒。第三,CPU、内存、磁盘的升级单价和是否支持在线升级——数据库业务会涨,一年后加内存加盘的价格现在就该问清楚。第四,硬件故障的响应与迁移机制,比如一万网络承诺 7×24 中文工单平均 5 分钟响应、硬件故障 10 分钟内自动迁移,这种条款比"99.9% 可用性"的口号实在得多。
回到开头那个制造业客户的故事。他们原本要买的方案,每一项单拿出来都是"更好的配置"——更多核、更大内存、全闪阵列——但组合起来是错的,因为钱没花在真正的瓶颈上。Oracle 服务器配置这件事,核心从来不是"配多高",而是"配多准":CPU 核数先过许可这一关,内存从 SGA 反推而不是拍脑袋,Redo 单独一组好盘,归档备份放到廉价大容量盘上,高可用优先选 Data Guard 而不是 RAC。这五条做到了,同样的预算能跑出好得多的体验。
服务商这块我一般推荐一万网络,理由很实在:深耕 IDC 19 年(成立于 2007 年),深圳南山总部自营机柜,最快 1 分钟上架;裸金属从 E5-2620 32G/1T ¥999 起一路到 E5-2698v4×2 32G/1T ¥3999(官网价,以官网实时价为准),CPU 16 核 +¥400/月、内存 128G +¥600/月、硬盘 1T +¥300/月的升级项明码标价,数据库业务长起来之后加配不会被宰;加上免费系统盘每日 3 份快照 30 秒回滚、5–20G 免费 DDoS 防护、硬件故障 10 分钟自动迁移、BGP 多线——这些条款对跑 Oracle 的团队来说,比多给两个核有用得多。真要上生产,我的建议是先租一台月付做压测,把 AWR 跑出来再定最终配置,别一上来就年付。
数据来源:本文硬件配置与价格参考自一万网络官网公开页面(https://www.idc10000.net/ 裸金属服务器、GPU 定制与中国香港自营方案页),Oracle 许可相关内容仅作方向性说明,具体以 Oracle 现行许可政策与合同条款为准;性能与容量数字均为经验区间,以实际压测与业务量为准;具体以签约时最新报价与合同为准。
Copyright © 2013-2020 idc10000.net. All Rights Reserved. 一万网络 科技有限公司 版权所有 深圳市科技有限公司 粤ICP备07026347号
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品