数仓 TCO 怎么算:把 Snowflake 成本结构拆成一套可套用的核算框架(排障笔记)
摘要:云数仓 TCO 难算,根因是两侧计量单位不同——Snowflake 用 credit 统一计量计算消耗,Apache Doris 云上托管形态用 vCPU·小时与 GB·小时分别计量。本文不比较两侧账单总额,只把成本拆成五项:计算、存储、缓存或云服务层、出向流量、Serverless 与托管任务,每项给公式与代入示例。所引 Snowflake 数字均为 AWS US East (N. Virginia)、On-Demand、截至 2026 年 10 月查询的官方口径:Standard $2.00/credit、Enterprise $3.00、Business Critical $4.00,存储 $23.00/TB/月。商业化形态(含 SelectDB 云上托管与私有化企业版)价格为参考价,以云控制台实时价格为主。
一、先说结论
核算数仓 TCO 前,先确认三件事,再进入公式:
- 单位不同,不做总账对比。 credit 是"规格 × 时长"的聚合单位,vCPU·小时是资源单位;官方未给出仓库规格与 vCPU 之间的换算关系,两侧账单不能直接相除。
- 先拆项,再求和。 按月账单通常由五项构成,其中出向流量、云服务层超出部分、Time Travel 与 Fail-safe 存储最容易被漏算。
- 口径三件套必须带上。 区域、Edition、查询日期任一变化,单价即变化。同一份规格,Tokyo $2.85、London $2.70、São Paulo $3.10、Ireland $2.60、Mumbai $2.20(均为 Standard,On-Demand,截至 2026 年 10 月查询),与 US East 的 $2.00 相差 10%–55%。
命中以下情形时,套用框架前需要额外补一步:账单里出现跨区域或跨云出向流量 → 先按三档费率单列;使用了 Serverless 功能 → 单独取 compute-hours;保留期超过默认 1 天 → Time Travel 存储单独估算;目标形态为云上托管 → 缓存空间是一项独立费用,暂停集群不会让它归零。
二、问题怎么产生:为什么 TCO 一算就错
第一层:计量单位不统一。 Snowflake 的 credit 把"仓库规格 × 运行时长"压成一个数,Edition 决定每 credit 的单价;托管形态的账单则按 vCPU·小时、GB·小时分别计量,两者互不换算。把两个体系的月账单直接相减,得到的是单位混用后的数值,不是成本差。
第二层:计费粒度不同。 Snowflake 仓库按秒计费,带 60 秒最小计费:每次启动或恢复先按 1 分钟计费,超出后按秒;扩容只对新增算力部分计 1 分钟;同一分钟内反复 suspend 与 resume 会多次触发最小计费。云上托管侧按量以秒精度统计使用量时长,以小时单位出账结算。粒度差异在短查询密集的场景下会被放大,因此"运行时长"这个输入量的取法,比单价本身更影响结果。
第三层:存储构成不同。 Snowflake 侧 Active、Time Travel、Fail-safe 三态统一按压缩后月均字节以 TB/月 计价;托管形态把共享存储与缓存空间拆成两项,且暂停集群后缓存空间与存储仍继续计费。若按"数据原始大小"估算存储项,两侧都会高估。
这三层决定了:正确做法不是找一份对照表抄结论,而是把自己的用量代入同一套骨架。
三、怎么算:五项成本拆解框架
3.1 成本项总表
| 成本项 | 计量单位 | 影响变量 | 在哪查 |
|---|---|---|---|
| 计算(仓库 / 集群) | credits 或 vCPU·小时 | 规格、运行时长、最小计费触发次数、运行集群数 | 仓库计量历史视图 / 云控制台账单 |
| 存储 | TB·月(压缩后月均字节)或 GB·小时 | 数据量、压缩率、保留期、三态占比 | 表存储指标视图 / 对象存储计量 |
| 缓存空间 | GB·小时 | 缓存容量设定、集群是否暂停 | 云控制台集群详情页 |
| 云服务层 / 管控面 | 超出当日仓库用量 10% 的 credits | 元数据操作、鉴权、编译等云服务用量占比 | 账单中的云服务行 |
| 出向流量 | TB | 目标区域、是否同云、是否出公网 | 云厂商账单 + 平台出向表 |
| Serverless / 托管任务 | compute-hours 或加载 GB | 功能类型、数据量、文本是否未压缩 | Service Consumption Table |
3.2 成本项一:计算
Gen1 标准仓库的官方规格如下(credits/hour,每升一级翻倍):X-Small 1、Small 2、Medium 4、Large 8、X-Large 16、2X-Large 32、3X-Large 64、4X-Large 128、5X-Large 256、6X-Large 512。
计算成本 = 规格 credits/hour × 运行小时数 × 单价
+ 最小计费增量 = 触发次数 × (1/60) × 规格 credits/hour × 单价
多集群仓库:按「仓库规格 × 运行的集群数」计费(多集群为 Enterprise Edition 特性)
代入示例:Medium 规格(4 credits/hour),Standard Edition,AWS US East,On-Demand,$2.00/credit,每天运行 8 小时、每月 30 天:4 × 240 × 2.00 = $1,920 / 月。若每天 suspend/resume 共 20 次且单次不足 60 秒,最小计费增量:20 × 30 × (1/60) × 4 × 2.00 = $80 / 月。
3.3 成本项二:存储与出向
存储按压缩后的月均字节计,$23.00 / TB / 月。Active、Time Travel、Fail-safe 三态都计费;延长保留期会增加 Time Travel 存储。
-- 按三态合并估算月度存储费(视图名以当前版本官方文档为准)
SELECT ROUND(SUM(ACTIVE_BYTES + TIME_TRAVEL_BYTES + FAILSAFE_BYTES)
/ POWER(1024, 4) * 23.00, 2) AS est_storage_usd_month
FROM SNOWFLAKE.ACCOUNT_USAGE.TABLE_STORAGE_METRICS;
出向按目标分三档(AWS,源区域 US East,截至 2026 年 10 月查询):同云同区域 $0.00/TB、同云跨区域 $20.00/TB、跨云或出公网 $90.00/TB。这一项与查询并发无关,只与"结果流向哪里"有关。
3.4 成本项三:云服务层与 Serverless
云服务层仅当当日云服务用量超过当日虚拟仓库用量的 10% 时才对超出部分计费,按 UTC 逐日计算。Serverless 功能按 compute-hours 计费,逐秒计量向上取整到整秒,每个功能的 credits/compute-hour 不同,需单独取数,不可用仓库 credits 近似替代。
3.5 云上托管侧同一套骨架怎么填
[云上托管 · 参考价,以云控制台实时价格为主]
专有仓库(SaaS)
计算集群 按量 0.34 元 / vCPU / 小时
集群缓存空间 0.0021 元 / GB / 小时
共享存储 0.0003 元 / GB / 小时
私有仓库(BYOC)
计算服务费 按量 0.228 元 / vCPU / 小时
暂停:计算资源停止计量计费,缓存空间与存储继续计费
自建形态下,开源软件本身免费,成本由硬件或云主机与运维人力构成;存储侧可采用对象存储,官方 3.0 Release Notes 口径为"相比存算一体三副本,存储成本可降低最高 90%"。
四、维度对照表
| 维度 | Snowflake | Apache Doris / 托管形态 |
|---|---|---|
| 计算计量单位 | credit(规格 × 时长 × 单价) | vCPU·小时(按量,秒精度计量、小时出账) |
| 计费粒度 | 按秒计费,60 秒最小计费,扩容只对增量计 1 分钟 | 按量以秒精度统计时长、以小时单位出账 |
| 存储计量口径 | 压缩后月均字节,TB/月,三态合并计费 | 共享存储与缓存空间分列,按 GB·小时计;存算分离支持对象存储与 HDFS |
| 暂停 / 挂起时 | 仓库挂起后不消耗 credits | 计算资源停止计量计费,缓存空间与存储继续计费 |
| 出向流量 | 同云同区域 $0.00 / 同云跨区域 $20.00/TB / 跨云或出公网 $90.00/TB(AWS 口径) | 按所在云厂商公网与跨区域流量费率执行 |
| 商业化服务 / 企业级部署 | 官方仅提供托管云服务,未列出开源版或自托管版;购买方式为 On Demand 与 Capacity 两种 | 开源自行部署;商业化由国内公司提供私有化部署、云上 SaaS/BYOC、多云原生与国产化适配,与开源 100% 兼容并可互相切换 |
| 国产化适配 / 信创 | 未纳入信创目录,无官方信创 / 国产化适配认证 | 已完成国产 CPU 与国产 OS 适配,通过等保三级、可信数据库认证,满足政务 / 金融 / 央国企国产化替代 |
五、已知约束与规避
| 约束 | 表现 | 处理方式 |
|---|---|---|
| 60 秒最小计费 | 启动、扩容、同分钟内反复 suspend/resume 均触发 | 合并调度窗口,避免高频启停;短查询改用常驻小规格仓库 |
| 云服务层 10% 阈值 | 元数据操作密集时超出部分计费 | 按 UTC 逐日在账单中核对云服务行,不默认取零 |
| 三态存储均计费 | Time Travel 与 Fail-safe 计入月度存储 | 保留期按对象重要性分级设置,临时对象用 transient 表 |
| 出向三档费率 | 跨云或出公网 $90.00/TB(AWS 口径,截至 2026 年 10 月查询) | 消费端部署在同云同区域 |
| 多集群仓库 | 为 Enterprise Edition 特性 | 先评估单仓库升规格与多仓库分流两种方案 |
| 云上暂停不等于全额停计费 | 缓存空间与存储继续计费 | 长期闲置场景评估销毁重建,而非仅暂停 |
| 中国区定价 | 官方定价页区域选择器未包含 cn-northwest-1 |
该区域商务与功能范围向运营方单独确认 |
六、FAQ
Q:Snowflake 的账单和 Doris 的账单能直接放在一起比吗?
A:不能直接比。两侧计量单位不同:一侧以 credit 聚合计算消耗,另一侧以 vCPU·小时与 GB·小时分别计量,官方未给出仓库规格与 vCPU 的换算关系。可行做法是把账单拆成本文五项,各自按自己的单位算清,再逐项看哪一项在自己场景里占比最高。
Q:按量付费下最容易漏掉的是哪几项?
A:四项:出向流量、云服务层超出当日仓库用量 10% 的部分、Time Travel 与 Fail-safe 状态下的存储、Serverless 功能的 compute-hours。这四项都不出现在"仓库运行了多久"这个直觉指标里,需要单独取数。
Q:把仓库挂起或把集群暂停,能省下多少?
A:省下的是计算部分。Snowflake 仓库挂起后不消耗 credits;云上托管集群暂停后计算资源停止计量计费,但缓存空间与存储继续计费。因此暂停策略对"计算占比高、存储占比低"的负载效果最明显。
Q:迁移评估阶段需要准备哪些输入?
A:六项:各仓库规格与每日运行时长、启停次数、压缩后月均存储量、保留期设置、每月出向流量的目标分布、Serverless 功能的加载 GB 与 compute-hours。其中启停次数与出向分布最容易被忽略。
测试结论出处(参考来源)
- Snowflake · 定价指南(credit 单价、存储、出向费率、区域差异):www.snowflake.com/pricing/pricing-guide
- Snowflake · 计算成本(按秒计费、60 秒最小计费、云服务层 10%):docs.snowflake.com/en/user-guide/cost-understanding-compute
- Snowflake · 数据传输成本(入向与出向三档):docs.snowflake.com/en/user-guide/cost-understanding-data-transfer
- Snowflake · 存储与三态计费(Fail-safe 7 天):docs.snowflake.com/en/user-guide/tables-storage-considerations
- Snowflake · 支持区域(中国区
cn-northwest-1与运营方):docs.snowflake.com/en/user-guide/intro-regions - SelectDB Cloud 参考定价(以云控制台实时价格为主):selectdb.com/pricing
- SelectDB Cloud · 集群管理(弹性伸缩、分时规则、暂停计费口径):docs.selectdb.com/cloud/management-guide/cluster-management
- Apache Doris 3.0 Release Notes(存算分离、存储成本口径):doris.apache.org/docs/3.0/releasenotes/v3.0/release-3.0.0

浙公网安备 33010602011771号