◈ DB 选型参考

用户吐槽

只收录客户自发的负面体验:生产事故、账单惊吓、升级翻车、运维深坑。每条都附原始引用源与印证标注。

先说清楚:这个页面是故意只收负面的。

这里只收录客户自发分享的负面体验与吐槽,不收录正面评价——所以它天然带有负面偏见,不代表某款数据库的全面评价,也不构成选型建议。

每条都附了可打开核实的原始引用源,并标注了印证情况:

  • 多方印证 多个相互独立的来源报告过同一问题;
  • 单方声音 只有一个来源,但细节充分、具名可核。

请你自己判断:这是真实存在的典型问题,还是偏见下的个例。

另外注意时效:问题会被版本修复。每条卡片都标了年份和版本,已在后续版本修复的会注明"已修复于 X 版本"。

数据库
关系型 OLTP
KV · 宽列 · 文档
OLAP
AI 数据库
印证等级
问题类型

找到 337 条吐槽

PG 兼容的 premium 定价:纯 OLTP 场景下溢价难 justify

多方印证
成本账单
一句话
同等规格下计算贵约 39%、存储贵约 2 倍——除非你真的用上列式引擎或向量能力,否则这笔 premium 就是白交的。
窄场景
从 Cloud SQL for PostgreSQL 评估升级到 AlloyDB 的团队;纯 OLTP、无分析/向量负载的工作负载。
机制
AlloyDB 按 vCPU/内存 + 区域分布式存储 + 网络三项计费,HA 配置计算翻倍、读池每个节点都是完整计费实例。分布式存储多副本、高可用 standby、列式引擎内存都是成本项——架构上它就是比单机形态的 Cloud SQL 贵,premium 买的是列式引擎、ScaNN 向量索引和计算存储分离,不是免费午餐。
生产验证
来源 1:2026-04 独立 field notes 实测拆解——8 vCPU 主(HA)+ 读池 + 500GB 存储约 $1,478/月,同等 Cloud SQL Enterprise Plus 约 $1,060、Enterprise 约 $810;原话 "For pure OLTP without vector workloads, the premium is hard to justify";
来源 2:Bytebase 2025-04 定价分析——vCPU 单价 $54.51/月,比 Cloud SQL Enterprise Plus 贵 39%;数据存储 $0.339/GB/月,约 2 倍于 Cloud SQL SSD($0.17);
来源 3:2025-07 独立博客 "What to Watch Out For"——"Cost: It's not the cheapest option. You're paying for performance and flexibility.";
来源 4:2026-05 独立评测——"AlloyDB's cost and complexity are overkill for workloads that fit comfortably in a Cloud SQL Enterprise instance";且读池加节点按整实例计费("Adding a node to the read pool costs the same as adding an instance")。
证据等级
`多方印证(4 个独立来源)`,独立博客 field notes ×1、厂商定价分析 ×1、独立数据工程博客 ×1、独立技术评测 ×1。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠(成本相关)。

Google AlloyDB(AlloyDB for PostgreSQL) 年份:2026

列式引擎 100x:宣传数字只在"对的查询"上成立

多方印证
性能问题
一句话
100x 是"为展示收益而精心设计的窄查询"上跑出来的——你的查询形状不对、列没进内存,收益直接归零,还要额外交一份内存税。
窄场景
冲着 HTAP/100x 宣传来选型的团队;OLTP 为主、偶发分析查询的工作负载。
机制
列式引擎是计算节点上独立于行式堆的内存列存,规划器决定是否走列存路径。收益取决于三件事:查询形状是否适合列存(宽表、窄投影、聚合扫描)、相关列是否被物化进列存、数据是否装得进内存。列存是**额外于**行堆物化的——同一张表占两份内存,内存装不下时收益衰减。启用本身也是多步操作:改 flag(要重启实例)、建扩展、手动加载/训练推荐引擎。
生产验证
来源 4:2026-05 独立评测——100x 是 "product-page-shaped",独立测试结论是 "'10x to 100x, for the right query'";列存数据是行堆之外的额外物化,"A table in the column store consumes memory for both representations";
来源 5:Pythian 2022 年实测——作者自承测试用的是 "admittedly narrow scoped queries designed specifically to illustrate the potential benefits",并列出 caveat:列存只对特定分析查询最优、相关列必须被正确缓存、需要前期工作(sizing 列存、训练推荐引擎、确认列已加载)。
证据等级
`多方印证(2 个独立来源)`,独立技术评测(2026)+ 独立咨询公司实测(2022,核心结论被 2026 年评测印证;旧测试的方法论 caveat 至今成立)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠(列式引擎相关)。

Google AlloyDB(AlloyDB for PostgreSQL) 年份:2026

I/O 计费惊魂:读一次页面,账单记一笔

多方印证
成本账单
一句话
Aurora Standard 把每一次存储 I/O 都变成账单事件——Graphite 的 Aurora 花费曾占到整个 AWS 账单的八成以上,不是因为实例大,而是因为 I/O 多。
窄场景
I/O 密集型负载(高频小写、同步类业务如 Graphite 的 GitHub 双向同步);按默认 Standard 计费开通的集群。
机制
Aurora Standard 存储与 I/O 分开计费:存储按 GB-月,I/O 按百万次请求数。缓存未命中、顺序扫描、大范围回表等读放大直接转化为费用;I/O-Optimized 则把 I/O 打包进更高的实例+存储单价。计费模式本身会改变"什么查询算贵"的定义。
生产验证
来源 1:Graphite CTO Greg Foster 2023-08-09 具名复盘——全公司数据跑在 Aurora Postgres 上(约 4000 qps),Aurora 成本一度占 AWS 总账单 80% 以上;试过 Serverless,反而比固定实例更贵;切到 I/O-Optimized 后省了 90%;
来源 2:The Build 2026 年独立分析——Standard 下"一个读很多页的查询就是一次成本事件";预置/serverless × Standard/I-Optimized × 跨区流量 × 备份 × Performance Insights 留存的计费矩阵,让团队在立项时系统性低估真实月账单。
证据等级
`多方印证(2 个独立来源)`,具名公司 CTO 生产复盘 + 独立技术分析。
最后核验
2026-10-03

Amazon Aurora 年份:2026

版本滞后:社区 PG 发版日,Aurora 用户只能看

多方印证
生态与信任
一句话
Aurora 的 PG 大版本支持比社区晚好几个月——想要发版当天就用上新特性,Aurora 不是你的选择。
窄场景
对 PG 新大版本有强依赖的团队(如新版本的新特性);"必须跑最新版"的合规/功能约束。
机制
Aurora 要把存储层集成向前移植到每个大版本,工作量决定了它永远慢半拍:社区 → RDS(慢几个月)→ Aurora(再慢几个月)。
生产验证
来源 2:The Build——"Aurora 对新 PG 大版本的支持比社区晚好几个月;想发版当周就用上最新大版本的组织会失望";
来源 13:Harshith(2026-09)——"你放弃了版本曲线的前端(top of the version curve);如果发版日就需要新大版本的特性,Aurora 给不了"。
证据等级
`多方印证(2 个独立来源)`,独立技术分析 ×2。
最后核验
2026-10-03

Amazon Aurora 年份:2026

Aurora MySQL 的 DDL:看着像元数据变更,实际全表重建 30 分钟

多方印证
性能问题运维复杂度
一句话
在 Aurora MySQL 上加个外键,默认走 `ALGORITHM=COPY`——全表重写,所有写被锁 30 分钟;更坑的是 Aurora 的版本号和社区 MySQL 对不上,你背的"哪个版本支持 INSTANT"口诀可能是错的。
窄场景
Aurora MySQL 3.04(8.0.28)及更早版本的大表 DDL;照着社区 MySQL 8.0.29+ 文档做变更评审的团队。
机制
InnoDB 加外键默认 `foreign_key_checks=1` 时只能用 COPY 算法(全表重建+全程写锁);`INSTANT` 算法的能力边界随版本变化,而 Aurora 从 3.04(8.0.28)直接跳到 3.05(8.0.32),跳过了 8.0.29–8.0.31——社区文档说 8.0.29 支持的 instant 加列/删列,在 Aurora 3.04 上依然回退到重建。
生产验证
来源 14:dev.to 独立作者 2026-09-30 生产事故记录——一条加外键的迁移在 Aurora MySQL 上触发 COPY 重建,大表写被锁约 30 分钟、连接堆积、功能下线;作者总结"危险的迁移和安全的迁移在 PR 里长得一模一样";
来源 15:Remitly 后端工程师 Dimitrios Sołtysiak(客户执笔,2026-02-25)——生产大表的 schema 变更必须"小心部署":显式指定 `ALGORITHM=INPLACE, LOCK=NONE`、用不可见索引分阶段上线、不确定的变更上 gh-ost/pt-osc 级别的外部工具,迁移窗口全程盯锁等待与副本延迟。
证据等级
`多方印证(2 个独立来源)`,生产事故记录 + 客户工程团队调优实录。
最后核验
2026-10-03
备注
来源 14 作者在文末推广自研的迁移检查工具 migracheck,事故记录本身为第一手生产叙述,采信事实部分。

Amazon Aurora 年份:2026

LIMIT 100 不省一分钱:按"引用数据"而非结果计费

多方印证
成本账单
一句话
BigQuery 的账单看的是查询引用了多少列的数据,而不是返回了多少行——LIMIT 只裁输出,不裁扫描。
窄场景
习惯用 `SELECT *` 探索数据的分析师团队;对大表做抽样、分页、LIMIT 调试的日常查询;表未分区、无聚簇的"裸奔"表。
机制
列式存储按"读取的列数据量"计费,与返回行数、查询耗时无关;LIMIT 作用于输出阶段,执行仍需扫描全部引用列;未分区表上 WHERE 过滤发生在读取之后(先读后滤),过滤条件本身不减少扫描量。一位评论者总结:"charges based on referenced data, not processed data"。
生产验证
来源 3:HN 讨论(2025-03-25,原帖标题"BigQuery pricing model cost us $10k in 22 seconds")——发帖人 22 秒跑出 $10,000 账单;15 条评论中多位用户交叉验证了"LIMIT 不影响价格"这一计费机制(jerrygenser:"obvious from the documentation…LIMIT does not change the price");
来源 4:Balaguru Sivasambagupta 2026-03 生产复盘——银行交易表 1.2TB/40 列,分析师每天多次 `SELECT *`,每次全表扫描 1.2TB;`WHERE country='India'` 仍扫描全部 1.2TB("filter runs after the data is read");`LIMIT 100` 照样全表扫描;改列选择 + 分区 + 聚簇后单次查询降到 3–8GB,成本下降 90% 以上。
证据等级
`多方印证(2 个独立来源)`,HN 社区讨论 + 独立生产复盘。
最后核验
2026-10-03
备注
原始 LinkedIn 发帖人为 Yingjun Wu(RisingWave 创始人,竞品厂商背景),本卡以 HN 社区多方验证 + Balaguru 独立复盘为证据主体;"LIMIT 不影响计费"与官方文档一致,机制本身无争议。

Google BigQuery 年份:2026

Repair 是硬性期限:错过 gc_grace,删掉的数据会"复活"

多方印证
稳定与故障运维复杂度
一句话
repair 不是卫生习惯,是每一次删除的下半场——任一节点错过 `gc_grace_seconds` 窗口没跑完 repair,已删除的数据会静默复活成 zombie rows,且无任何报错。
窄场景
有删除/TTL 业务的集群;节点曾宕机超过 hinted handoff 默认 3 小时窗口;repair 靠手工 cron 或长期没人看的集群;任何大版本(机制为架构性设计)。
机制
SSTable 不可变,删除 = 写 tombstone 墓碑;墓碑要在 `gc_grace_seconds`(默认 10 天)后才允许被 compaction 清除,而清除的安全前提是**所有副本都已见过这个删除**——repair 就是让它们"听见"的方式。hinted handoff 只覆盖 3 小时内的短暂宕机。repair 本身也不便宜:Merkle 树构建要顺序读全量数据、大范围比对会 overstreaming(一个小分歧拖回一大块数据)、修完还欠一笔 compaction 债。
生产验证
来源 1:2026-09,千节点运维者实录——"Repair is the tax on eventual consistency"(repair 是最终一致性的税);运营策略是 10 天 grace 对 7 天 repair 周期,告警看的不是"repair 失败"而是"每张表距上次完整 repair 过去了多久"(staleness 才是真风险);
来源 2:2022-12,HN 一线运维者评论——"Operationally…the trickiest part is repairs"(运维上最棘手的就是 repair)。
证据等级
`多方印证(2 个独立来源)`,千节点运维实录 + 一线运维者评论。
最后核验
2026-10-03
备注
与现有 [避坑] 卡主题重叠(repair 强制周期运维、gc_grace 配错致 zombie rows),双方保留。据本站档案页记录,Cassandra 5.0.8+ 已将自动 repair 调度 backport 为可选项(opt-in),属"已部分改善",但默认仍需人工排期,故保留收录。

Apache Cassandra / ScyllaDB 年份:2026

Tombstone 读放大:读 600 行活数据,要先扫 1.6 万个墓碑

多方印证
性能问题稳定与故障
一句话
删除在 Cassandra 里是"逻辑先行、物理靠后"——读请求要穿越海量墓碑才能找到活数据,墓碑一多,读延迟、CPU、堆内存一起恶化;TTL 误删后想捞数据,得 dump 墓碑外加回拨系统时间。
窄场景
频繁删除/更新、TTL 大量过期、集合整列替换的表;墓碑堆积叠加大分区的集群。
机制
SSTable 不可变,删除只写墓碑标记;读路径要合并多个 SSTable 并跳过墓碑,墓碑数量直接计入读放大;墓碑靠 compaction 在 gc_grace 后清除,清除前常驻。墓碑扫描量超过阈值(本站档案页记录默认 10 万)时查询直接失败。TTL 过期本质也是墓碑:墓碑数据不可查、不能直接重插(重插会因同一 TTL 立即再过期)。
生产验证
来源 3:2025-05,Krishna Alapati 客户生产根因分析——日志频繁出现 "Read live 600 rows and 16,526 tombstone cells for query",即 16600 个 cell 里 96% 是已删除数据;读延迟飙升、CPU 与内存压力齐涨;
来源 4:2026-02,Pandu Boyina 生产复盘——TTL 策略误删关键记录导致业务中断,恢复时被迫 dump 墓碑、挪到独立服务器、回拨系统日期、改写时间戳与 TTL 字段后重插,"Tombstones exist for consistency, not for easy recovery"(墓碑为一致性而存在,不是为方便恢复)。
证据等级
`多方印证(2 个独立来源)`,客户生产根因分析 + 生产复盘。
最后核验
2026-10-03
备注
与现有 [避坑] 卡主题重叠(tombstone 风暴致读放大、查询超时),双方保留。

Apache Cassandra / ScyllaDB 年份:2026

ScyllaDB 许可证:2025 年起,它不再是开源软件

多方印证
生态与信任
一句话
2024 年 12 月官方宣布、2025.1(2025 年 4 月发布)起,ScyllaDB OSS 与 Enterprise 合并为统一的 source-available 版本——最后一个纯开源版本是 AGPL 的 6.2;免费额度是每组织 10TB 磁盘 + 50 vCPU,超了就要谈商业许可;官方仓库甚至删掉了 Contribute 文档页,理由是"ScyllaDB is no longer open source"。
窄场景
此前按"开源免费"做 TCO 预算与法务评估的团队;规模超过免费额度的自建集群;依赖社区分叉延续开源路线的用户。
机制
Source-available ≠ 开源(不符合 OSI 开源定义):源码可见但使用受商业条款限制;免费 tier 按组织维度封顶(10TB 配置磁盘、50 vCPU,跨所有集群);旧版本(6.2.x 及更早)永久保持 AGPL,但不再获得新功能与 bug 修复;外部贡献者需签 CLA,而核心引擎历史上几乎只有 ScyllaDB 公司自己在贡献。
生产验证
来源 8:2025-06,The Register 独立报道——公司从 AGPL 转向 source-available,6.2 为最后一个 AGPL 版本,首个 source-available 产品为 Enterprise 2025.1(4 月发布);CEO 称这是为了解决"以开源为核心产品的厂商永恒的难题";
来源 9:2024-12,LinuxIAC 独立报道——确认 6.2 为"历史上最后一个 OSS AGPL 版本",并指出"一些传统 OSS 用户可能对纯开源替代品的消失感到失望";
来源 10:2025-05,ScyllaDB 官方仓库 issue #24060——文档团队提议删除 Contribute 页面,"it can be confusing since ScyllaDB is no longer open source"(这会让人困惑,因为 ScyllaDB 已不再是开源软件),经维护者 @tzach 批准、列入 2025.1;
来源 11:官方 FAQ(2026-10-03 亲自打开核验)——免费 tier 口径为"每组织 10TB 磁盘 + 50 vCPU(跨所有集群)","Old releases will not receive bug fixes or new functionality"。
证据等级
`多方印证(4 个独立来源)`,独立媒体 ×2 + 官方仓库 issue + 官方 FAQ 事实口径。
最后核验
2026-10-03
备注
与现有 [避坑] 卡主题重叠(授权坑:ScyllaDB source-available),双方保留。任务提示中"2025 年起换许可证"口径与核验一致:2024-12 宣布,2025.1(2025-04)为首个 source-available 版本。

Apache Cassandra / ScyllaDB 年份:2026

ScyllaDB 硬件挑剔:seastar 的"贴近硬件"是有代价的

多方印证
运维复杂度成本账单
一句话
ScyllaDB 的 shard-per-core 架构把 GC 问题连根拔了,但换来的是对硬件的挑剔——官方口径生产节点建议 2GB/逻辑核、第三方自建指南的生产起点是 8 vCPU + 16GB + 高速 SSD;想在小机器或超售云主机上"先跑起来",体验并不友好。
窄场景
自建生产集群的选型与预算;小规格起步、超售 vCPU、远端盘的云环境。
机制
Seastar 框架每 CPU 核一个 shard,各自独占内存、缓存分区与 IO 调度——设计假设是"独占高性能硬件";核数、内存配比、磁盘类型直接决定单节点吞吐上限,配比失衡时加机器不如加配置。容量规划要按 shard 而不是按节点思考(本站档案页深水区四已有论述)。
生产验证
来源 2:2022-12,从 Cassandra 迁往 ScyllaDB 的一线运维者——"Scylla…is not without its own set of issues - and somewhat strict hardware requirements thanks to the seastar engine it is built on top of";
来源 12:2026-09,Plainwire 开源项目自建指南——"A sensible operator starting point for a real Scylla node is 8 vCPU and 16 GB RAM with fast SSD storage";引官方文档口径:生产下限 4GB,推荐 16GB 或 2GB/逻辑核取高者。
证据等级
`多方印证(2 个独立来源)`,迁移用户评论 + 独立第三方自建指南。
最后核验
2026-10-03
备注
与现有 [避坑] 卡深水区四(shard-per-core)部分重叠——该卡讲架构原理,此卡聚焦自建硬件门槛与预算影响,双方保留。

Apache Cassandra / ScyllaDB 年份:2026

运维需要专职团队:集群在干什么,很难看清

多方印证
运维复杂度成本账单
一句话
compaction 和 repair 的内存占用与耗时"很难建模、很难容纳",集群此刻在干什么"很难看清"——有用户直言,没有高薪专职 Cassandra DBA 的团队,体验是另一个世界;DataStax 的商业支持也被吐槽"相当惨淡"。
窄场景
没有专职 DBA/平台团队的中小团队;把 Cassandra 当"装好即用"型数据库的团队。
机制
后台任务(compaction、repair、hinted handoff、gossip)与前台读写争抢同一批 CPU/内存/IO,且行为与数据模型、墓碑量、分区大小强相关——"黑盒感"来自可观测性与行为建模的双重缺失。出问题时排查链条长(JVM、compaction 策略、repair 进度、墓碑、数据模型逐项排查),对人员经验要求陡峭。
生产验证
来源 5:HN 用户——"The memory consumption and duration of compactions and column/node repair jobs is hard to model and accommodate. It's hard to tell what the cluster is doing at any given moment. Our experience with support plans from Datastax was also pretty dismal";同一讨论串另一用户:"At a much bigger company that had some very, very highly paid Cassandra DBAs it was actually a relatively smooth experience"(有高薪专职 DBA 才顺滑);
来源 1:2026-09,千节点运维者——"Repair is the tax on eventual consistency. You can pay it on a schedule you chose, or all at once with interest",即运维投入是刚性的,不是可选的。
证据等级
`多方印证(3 个独立来源)`,HN 用户 ×2(含专职 DBA 对比)+ 千节点运维实录。
最后核验
2026-10-03

Apache Cassandra / ScyllaDB 年份:2026

ClickHouse 自己把自己写满:system 日志表默认无 TTL,11.8GB 日志 vs 20MB 真实数据

多方印证
稳定与故障运维复杂度
一句话
`system.*_log` 默认无上限——uptimepage 磁盘 100% 写满、Postgres 崩溃,查下来真实数据仅 20MB,`system` 库 11.8 GiB(text_log 5.29G + trace_log 3.02G);Langfuse 自建曾攒出 59GB text_log。
窄场景
自建小规格实例;Langfuse/SigNoz/ClickStack 等"开箱自带 ClickHouse"的部署。
机制
系统日志表默认无 TTL、无大小上限;小机器上空载还烧 CPU(关日志后 CPU 从 40-70% 降到 1.5%)。TRUNCATE 后磁盘从 74% 降到 41%。另有坑:`opentelemetry_span_log` 的 TTL 必须写在 `<engine>` 里否则服务起不来。
生产验证
—
证据等级
`多方印证(3 个独立来源)`。
最后核验
2026-10-07

ClickHouse 年份:2026

没有 MERGE 语句:Snowflake/BigQuery/PG15+ 都有,ClickHouse 没有

多方印证
生态与信任
一句话
Snowflake、BigQuery、PostgreSQL(15+)都有 `MERGE INTO`,ClickHouse 至今没有——官方自己的 Snowflake 迁移课程都单列"Gap 4: MERGE INTO":"ClickHouse has no `MERGE` statement."
窄场景
CDC upsert、SCD2 增量;从 Snowflake 迁来的 ETL。
机制
替代方案都有代价:ReplacingMergeTree 的去重是异步的(merge 前新旧行并存,查询必须加 FINAL);dbt 的 `delete_insert` 是 delete+insert 两步、非真原子 upsert;第三方工具(Bruin)的 merge/scd2 增量策略在 ClickHouse 上直接标注不支持。
生产验证
—
证据等级
`多方印证(3 个独立来源)`,官方课程 + 两款第三方工具。
最后核验
2026-10-07

ClickHouse 年份:2026

没有 PIVOT/UNPIVOT:标准语法缺失,50 个透视值就得手写 50 个表达式

多方印证
生态与信任
一句话
Snowflake/BigQuery/DuckDB/Oracle 都有标准 `PIVOT`/`UNPIVOT`,ClickHouse 没有——只能用 `sumIf`/`groupArray` 手工拼,透视值必须手写枚举,且没有动态列名能力。
窄场景
行转列报表、透视分析;从 Oracle/SQL Server 迁移的 SQL。
机制
官方知识库自认:"ClickHouse doesn't have a PIVOT clause... ClickHouse has no pivot operator"。第三方基准项目为此跳过测试项:"Re-enable when: Standard `PIVOT`/`UNPIVOT` clause syntax appears in the ClickHouse SELECT reference"。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,官方承认 + 用户请求。
最后核验
2026-10-07

ClickHouse 年份:2026

没有生产级多语句事务:迁移工具明示"部分迁移自己修"

多方印证
运维复杂度生态与信任
一句话
MergeTree 没有 PG/MySQL 式的多语句事务——golang-migrate 官方文档明示:"The queries are not executed in any sort of transaction/batch, meaning you are responsible for fixing partial migrations."
窄场景
schema 迁移工具(golang-migrate 等);需要跨表原子提交的写入。
机制
无 `SELECT FOR UPDATE`、无跨表原子提交。官方文档承认有实验性事务,但限制极多:需 Keeper、仅限 Atomic 库、**仅限非复制 MergeTree**、Cloud 完全不支持——生产基本不可用。注意这与 DDL 原子性(Atomic database engine)是两回事。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,主流工具文档 + 官方文档限制。
最后核验
2026-10-07

ClickHouse 年份:2026

MySQL wire 协议是"残血版":预编译查询至今不支持

多方印证
生态与信任
一句话
ClickHouse 的 MySQL 协议端口能连上,但官方文档自己承认"not guaranteed to be a drop-in replacement"——**prepared queries are not supported**,部分类型按字符串返回;PG 的 `mysql_fdw` 直接不兼容。
窄场景
从 MySQL 生态迁移、依赖预编译的工具链;想拿 MySQL 客户端直连的团队。
机制
Restrictions 白纸黑字:"prepared queries are not supported"、"some data types are sent as strings"。依赖预编译的工具链直接不兼容,相关功能请求长期 open。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,官方自认 + 用户 issue。
最后核验
2026-10-07

ClickHouse 年份:2026

全文检索有了,但没有 BM25:ES/DuckDB 标配的相关性排序,ClickHouse 没有

多方印证
生态与信任
一句话
ClickHouse 的全文检索(倒排索引)26.2 才 GA,但 BM25 相关性排序至今缺失——ES、DuckDB 都是标配;需求强烈到催生出专门为此而生的 fork(MyScale)。
窄场景
在日志索引之上做搜索产品(而非纯日志分析);从 ES 迁移的团队。
机制
倒排索引本身 26.2 GA(此前 23.2→26.1 全程实验性),但"按词频赋予 token 相关性权重"的能力没有。Logchef 从 ES 迁移文档明示:ClickHouse 在其场景是"快速过滤而非排序检索"——"如果你在日志索引之上跑的是搜索产品,Elasticsearch 仍然是更合适的选择。"
生产验证
—
证据等级
`多方印证(3 个独立来源)`。
最后核验
2026-10-07

ClickHouse 年份:2026

按 vCPU 计费:小集群起步价就劝退

多方印证
成本账单
一句话
云上按 vCPU 小时、存储、备份、流量逐项计费——最小可用集群的月账单是单机 Postgres 的十倍量级起跳,"免费试用"之后就是真金白银。
窄场景
从 Serverless/Basic 免费档长大的小团队;需要多可用区/多 region 的生产集群;自托管但营收超 1000 万美元门槛的公司。
机制
分布式架构的成本是乘法:3 副本 × 节点数 × 单价。2024 年定价体系里 Advanced(原 Dedicated)$295/月/2vCPU(来源 7),3 节点最小集群 ≈ $885/月(6 vCPU)起;2026 年 9 月价目表:Standard $0.092/vCPU-hour(厂商估算 2vCPU+100GB ≈ $203/月),Mission Critical $0.162/vCPU-hour(12vCPU ≈ $1,528/月),存储/备份/流量另计(来源 6);自托管 Enterprise 按 $1,400–2,200/vCPU/年订阅(来源 14)。账单没有"小"字选项。
生产验证
来源 6:独立评测 2026-09-23 对照厂商价目表核对——Standard 2vCPU+100GB 约 $203/月,Mission Critical 12vCPU 约 $1,528/月,且存储备份流量另算;对比 Supabase Pro $25/月、Neon 按用付费无月最低消费;
来源 7:2024-11 定价:Standard $146/月/2vCPU 起,Advanced $295/月/2vCPU 起(TechTarget 报道);
来源 14:2026-09 对比评测——自托管 Enterprise 授权 $1,400–2,200/vCPU/年。
证据等级
`多方印证(3 个独立来源)`,独立评测/媒体 ×3(2024-2026)。
最后核验
2026-10-03
备注
来源 6 与来源 14 的 per-vCPU-hour 数字口径不一致($0.092/$0.162 vs $0.50/$0.95),卡片采用 2026-09-23 最新对照厂商价目表核对的来源 6 数字,差异如实标注。

CockroachDB 年份:2026

免费档又缩水:Basic 的 $15/月免费额度下线了

多方印证
成本账单生态与信任
一句话
2024 年 Serverless 改名 Basic、保留 10GB+5000 万 RU/月免费档;2026 年 9 月定价页一改,Basic 从新用户页面消失——新组织只剩 30 天 $400 试用,之后直接出账单。
窄场景
靠免费档跑 side project、做 PoC 的独立开发者与小团队;照着旧教程("免费 10GB+5000 万 RU")来注册的新用户。
机制
免费档是获客漏斗,也是信任承诺。2024-11 的三档体系里 Basic 明确"从免费起步,超 10GB 存储和 5000 万 RU/月才收费"(来源 7);2026-09-15 随 Continuum 发布改版定价页:只剩 Standard 与 Mission Critical 两档,Basic($15/月免费额度)不在新页面上,老客户保留原计划,新组织只有 30 天 $400 试用(来源 6)。教程与现实脱节——旧版定价指南一夜之间过时。
生产验证
来源 7:2024-11 报道——Basic 从免费起步,超 10GB 存储 + 5000 万 RU/月后收费(TechTarget);
来源 6:2026-09 实测记录——2026-09-15 定价页改版后 Basic 不在新页面上,新组织无免费档,只有 30 天 $400 试用;来源 14(2026-09-14,改版前一天)还写着 Basic 免费档含 10GB + 5000 万 RU/月——前后脚互相印证了这次收缩。
证据等级
`多方印证(3 个独立来源)`,独立评测/媒体 ×3(改版前后对照)。
最后核验
2026-10-03

CockroachDB 年份:2026

跨区写入的延迟税:region survival 是每笔写入在交税

多方印证
性能问题
一句话
想要"挂掉一个 region 还能写",每一笔健康日的写入都要先凑齐跨区 quorum——地理距离变成写延迟的下限,光速税天天交。
窄场景
SURVIVE REGION FAILURE 的多区集群;对写入 p99 有预算(如 <50ms)的 OLTP 业务;把"多活"当默认架构的团队。
机制
强一致 + 跨区存活 = 写入必须等远端副本确认。最近的必需副本决定了写延迟的下限,再怎么调优也越不过物理距离(来源 8 引述 Cockroach Labs 自己的说法:region survival 至少增加一个跨区 RTT 的写延迟)。这不是实现缺陷,是 CAP 的账单——只是这张账单是按笔收的,不是灾难日才收。
生产验证
来源 8:2026-08 独立分析——"CockroachDB charges consensus on the write path";quorum 需要远端响应,最近的必需副本给写延迟定下限;作者结论:问题不是"多区好不好",而是"你想在哪天为故障付费——每笔健康写入,还是灾难恢复时";
来源 9:2026 架构剖析——需要 Raft 共识的写入"比只需要落一个单机 WAL+fsync 的写入慢";range 跨区部署做存活,等于"在每笔写入 quorum 上支付光速往返成本"。
证据等级
`多方印证(2 个独立来源)`,独立工程分析 ×2(2026)。
最后核验
2026-10-03

CockroachDB 年份:2026

单区也慢:Raft 共识 vs 单机 fsync

多方印证
性能问题
一句话
不跨区也别指望跟单机 Postgres 一样快——单区集群每笔提交大约慢 1.5–3 倍,按 id 查单行、做聚合都慢,这是架构税不是 bug。
窄场景
单 region 部署、期望"Postgres 平替"的团队;对 p50 延迟敏感的 OLTP;拿单机 PG 做基准压测的选型 PoC。
机制
单机 PG 写 = 一次本地 WAL fsync;CockroachDB 写 = leaseholder 协调 + range 内多数派 Raft 确认,多一次网络往返。读强一致也要找 leaseholder。共识的固定开销与负载无关——集群越闲,单笔越显得贵。
生产验证
来源 10:2026-08——"单区集群里,CockroachDB 每笔提交大约比单节点 Postgres 慢 1.5–3×(Raft 往返 vs 单次 fsync)";
来源 11:2022-11 HN 生产用户——"查询通常比 PostgreSQL 慢,不管是按 id 取一行还是做聚合;也许规模大到 Postgres 根本扛不住时表格会反转,我也不知道"。
证据等级
`多方印证(2 个独立来源)`,2026 独立分析 + 2022 生产用户实测体感(旧源仅作印证,机制未变)。
最后核验
2026-10-03

CockroachDB 年份:2026

Postgres 兼容的窟窿:触发器等关键特性缺失

多方印证
生态与信任
一句话
线协议是 Postgres 的,`psql` 连上去毫无违和感——直到你发现触发器没有、LISTEN/NOTIFY 没有、domain/range 类型没有、FDW 没有,迁移到一半才发现"兼容"的是子集。
窄场景
从 Postgres 迁移、重度依赖触发器/扩展/自定义类型的老应用;用 Ecto 等 ORM 做迁移锁定的项目;全文检索用 tsvector 的团队。
机制
CockroachDB 是自研 SQL 层、不是复用 PG 查询层(与 YugabyteDB 路线不同),所以 PG 特性要逐个重新实现。2026 年 9 月的兼容性对照表仍列:LISTEN/NOTIFY 不支持、CREATE DOMAIN 不支持、range 类型不支持、FDW 不支持、列级权限不支持、表继承不支持、deferrable 约束不支持、DROP TRIGGER…CASCADE 不支持、tsvector 全文检索仅有限支持、PL/pgSQL 存储过程仅有限支持(来源 13)。注意:存储过程已在 23.2 重做补上(来源 15),不再列为缺失;但触发器从 2022 年生产用户抱怨至今仍无(来源 11、来源 10)。
生产验证
来源 11:2022-11 HN 生产用户——缺失最多的三样:扩展(逐个核对内置支持)、全文检索、触发器(以及更广义的 procedure/function);
来源 10:2026-08——"不支持:触发器、存储过程(PL/pgSQL)、LISTEN/NOTIFY、SEQUENCE、自定义类型;避开这五样的 Django/Rails 应用才能无改动运行";
来源 13:2026-09 兼容性对照表——触发器相关(UPDATE OF 列级触发器、DROP TRIGGER…CASCADE)不支持,另有 advisory lock 静默 no-op 等行为差异;
附带实录:来源 12 的 Fly.io 用户发现 CockroachDB 不支持 `LOCK TABLE`,Ecto 迁移必须加 `migration_lock: false`(2021-07)。
证据等级
`多方印证(4 个独立来源)`,HN 生产用户 + 独立分析 ×2 + 开源兼容性对照表。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。另:来源 10 称"存储过程不支持"与来源 15(DBTA 2024-01 报道 23.2 新增存储过程/UDF)矛盾,卡片以较新的版本事实为准,标注了口径分歧。

CockroachDB 年份:2026

Serializable 默认 + 40001 重试:并发一上来应用层改代码

多方印证
性能问题运维复杂度
一句话
默认隔离级别是 Serializable——写冲突不排队,直接甩给你一个 40001 "restart transaction",重试逻辑、幂等、退避全得应用层自己写;PG 里跑得好好的高并发代码搬过来先加一圈 try/retry。
窄场景
从 PG(默认 read committed)迁移的高并发 OLTP;事务里调外部接口(发邮件、扣款、发消息)的业务;热点行并发写的场景。
机制
无锁并发控制:写冲突靠 MVCC 时间戳检测,失败的事务由数据库判负、应用重做。40001/40003/CockroachDB 特有的 "restart transaction" 都是"整个事务重来"的信号;重试必须带指数退避+抖动+次数上限,且 COMMIT 阶段也可能报错要重试(来源 13 的生产检查清单要求"所有写事务"实现重试)。更坑的是:重试前已发生的外部副作用(邮件已发、款已扣)数据库管不了,会重复(来源 8)。
生产验证
来源 8:2026-08——"CockroachDB 默认 serializable;冲突时事务可能需要重试……如果事务在提交前发了邮件、调了外部扣款、发了消息,重试会复制副作用";
来源 13:2026-09 生产检查清单——"所有写事务实现重试逻辑;处理 40001 与 40003;COMMIT 的错误也要重试;指数退避+抖动;监控 40001 率,高即代表有 contention";
来源 9:2026——"Serializable、always" vs Postgres "Read Committed";"Transaction retries under contention" 列在营销页不写的 trade-off 清单里。
证据等级
`多方印证(3 个独立来源)`,独立工程分析 ×2 + 开源生产检查清单。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。另:23.2 已提供 read committed preview,迁移 PG 高并发应用可少写重试错误处理(来源 15)——属"已缓解于 23.2",未彻底修复(仍为 preview)。

CockroachDB 年份:2026

时钟即正确性:NTP 配错是真实故障模式

多方印证
稳定与故障
一句话
Postgres 不在乎服务器时钟漂多少;CockroachDB 的正确性压在"时钟偏移有界"上——NTP 没配好,节点直接拒绝启动,事务莫名重启。
窄场景
自建机房/混合云、NTP 没进基线配置的集群;跨区部署但时钟源不一致的环境;虚拟机时钟漂移大的平台。
机制
HLC(混合逻辑时钟)+ 不确定性区间:默认要求节点间时钟偏移 ≤500ms。超限的节点启动时直接报错退出("clock synchronization error: this node is more than 500ms away…",exit code 7);运行中读到落在不确定性区间内的时间戳,事务被强制重启。正确性依赖项里多了一项"全集群时钟同步",这是 PG 架构里不存在的故障面。
生产验证
来源 12:2021-07 Fly.io 社区实录——用户两节点(ams/lhr)集群节点反复以 exit code 7 退出,日志里就是 "clock synchronization error: this node is more than 500ms away from at least half of the known nodes";排查发现是几台欧洲宿主机没跑 NTP,修好即恢复;
来源 9:2026 架构剖析——"Postgres 不在乎服务器时钟漂移;CockroachDB 的正确性保证依赖有界时钟偏移——配错的 NTP 是真实存在、虽罕见、但 Postgres 没有对应物的故障模式"。
证据等级
`多方印证(2 个独立来源)`,2021 用户故障实录 + 2026 机制分析(旧源仅作机制印证,约束至今未变)。
最后核验
2026-10-03

CockroachDB 年份:2026

Serverless 是个黑盒:扩到更大反而更慢,账单方差 9 倍

多方印证
性能问题成本账单
一句话
Serverless 仓库扩到 Large 以上不再提速只涨价,相同 workload 成本能差 9 倍——而你看不到任何实例细节。
窄场景
Serverless SQL Warehouse + dbt 并发;按"越大越快"直觉选型的团队。
机制
Serverless 计算全托管,实例选型与底层变更对用户不可见;独立实验显示 Medium 之后扩容收益归零(Amdahl 定律),成本却随规格线性上涨。实验者进一步指出厂商的收入激励是"降自身成本、保持客户 runtime 不变",加速技术未必转化为客户账单下降。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,独立基准实验 + 个人实测(来源 3 作者供职于 Spark 成本优化厂商 Sync,雇主身份已在原文披露)。
最后核验
2026-10-03

Databricks 年份:2026

Photon:提速 2 倍、账单也涨 2 倍的"加速"

多方印证
性能问题成本账单
一句话
Photon 常被宣传 2x+ 提速,但它的 DBU 费率也高 2–3 倍——没把 runtime 真砍半,等于加钱没提速;Python UDF 还会悄悄绕过它。
窄场景
PySpark 为主、重度用 Python UDF、轻量短任务的作业;默认勾选 Photon 的团队。
机制
Photon 是向量化 C++ 引擎,job compute 上费率约为标准计算 2.9 倍(all-purpose 上约 2 倍);提速收益高度 workload 相关——重 join/窗口函数受益,Python UDF 会静默回退到非 Photon 路径,轻量任务还有引擎启动开销。TDS 实验者指出厂商曾用"2x 提速配 2x DBU 涨价"实现收入中性。
生产验证
—
证据等级
`多方印证(3 个独立来源)`,具名团队博客 + 个人实测 + 独立基准实验。
最后核验
2026-10-03

Databricks 年份:2026

Unity Catalog 迁移:迁的不是数据,是全部访问模式

多方印证
运维复杂度升级迁移
一句话
上 Unity Catalog 不是"打开开关",而是全仓库扫描替换 mount point、重构权限模型、接受 shared 集群的功能阉割——还要先搞清哪些配额是硬上限。
窄场景
历史包袱重的 Azure Databricks 老工作区(大量 mount point、DBFS 依赖);多订阅、多项目的大型组织。
机制
mount point 绕过 UC 安全控制,必须全量替换为三级命名或路径;因代码风格多样,全自动替换困难。UC 下 shared(Standard)集群不支持 ML runtime 与 RDD API,装库/init 脚本需 allowlist + metastore admin 特权。同时 UC 配额分"软上限可提"与"硬上限"(identity 类多为硬上限,storage credential 默认仅 200),设计前不摸清会直接卡死。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,咨询公司双客户实录 + 独立工程师迁移系列。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Databricks 年份:2026

"不如 Snowflake 好伺候":扩缩与调优的体感差距

多方印证
运维复杂度生态与信任
一句话
多位用户直言 Databricks"不如 Snowflake 好伺候"——扩缩资源慢半拍、调优要人肉,容错度低。
窄场景
从 Snowflake 对比选型/双跑的团队;缺专职数据平台工程师的小团队。
机制
Databricks 把集群选型、扩缩、调优暴露给用户(实例家族、spot、Photon、warehouse 类型),灵活性高但心智负担重;Snowflake 把计算抽象成仓库,启停扩缩对用户近乎无感。PeerSpot 用户原话点出 "not as forgiving as Snowflake"。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,具名用户复评 ×2。
最后核验
2026-10-03

Databricks 年份:2026

foreachBatch 只是 at-least-once:重启就重复,幂等得自己写

多方印证
稳定与故障运维复杂度
一句话
Structured Streaming 的 foreachBatch 看起来像"每批处理一次",实际只保证 at-least-once——job 重启后同一 batch_id 会被再调一次,不幂等的写入就写重。
窄场景
foreachBatch 里做 DeltaTable.merge 或写外部系统;有状态算子的流作业。
机制
API 的简洁掩盖了运维复杂度:checkpoint 只能保证 at-least-once;Delta 的 txnAppId+txnVersion 只保证 append/save 幂等,**不包裹** DeltaTable.merge(...);有状态算子后必须消费完整 batch,否则状态膨胀/过期驱逐会拖住 micro-batch。"Treat every handler as if Spark will call it again with the same batch_id."
生产验证
—
证据等级
`多方印证(2 个独立来源)`,两篇独立从业者生产复盘。
最后核验
2026-10-07

Databricks 年份:2026

VNet Injection 合规之路"painful":子网规划失误=全量重建,且不可逆

多方印证
运维复杂度生态与信任
一句话
VNet Injection 是唯一让 InfoSec 点头的组网方案,但"although painful"——subnet CIDR 规划错了只能全量重建,已有 workspace 事后无法切换。
窄场景
金融/医疗等强合规行业 Azure 上云;初期图省事用默认网络、后期被审计要求整改的团队。
机制
网络配置不可逆:已有 workspace 无法事后注入 VNet;子网扩容/迁移至今不是自助操作,要维护窗口 + 支持团队协调,Terraform 尚不支持;出站流量全走防火墙例外,复杂度外溢到整个 landing zone。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,独立咨询公司实战 + 2026 年社区最新确认。
最后核验
2026-10-07

Databricks 年份:2026

共享仓库"钱算不清":语句级成本归因缺失多年,Query Tags 2026-09 才 GA

多方印证
成本账单
一句话
`system.billing.usage` 没有 query_id,join 不上 query history——共享仓库里"谁花的钱"长期只能事后反查,官方 Query Tags 2026-09 才 GA 补上打标一环。
窄场景
多团队共享 warehouse 做 FinOps 分账;从"一 team 一仓库"合并降本后丢了可见性的团队。
机制
账单表粒度是 compute-hour,无 query_id/statement_id;实测 30 天窗口 89,264 行 usage 里 84.4% 完全无 custom_tags、usage_metadata 表名字段 0 行有值。用户只能自建 6 层归因管线。Query Tags(2026-02 preview → 2026-09 GA)补上"打标",但账单表本身的粒度问题在 2026-09 实测中依然存在。
生产验证
—
证据等级
`多方印证(4 个独立来源)`。
最后核验
2026-10-07

Databricks 年份:2026

预算只有"告警"没有"熔断":跑飞的仓库,原生机制拦不住

多方印证
运维复杂度成本账单
一句话
账户 Budgets 对计算支出只有邮件告警(延迟可达 24 小时),"Block usage" 熔断仅限 Genie/AI Gateway——$14k 周末跑飞事件里,用户只能自建 Lambda 轮询 Billing API,连"及时发现"都做不到。
窄场景
Serverless 仓库 + BI 长连接;没有专人盯账单的团队。
机制
官方文档明示:"Per-user overrides and usage blocking is only available for Genie budgets.";"There could be up to a 24-hour delay between usage occurring and an email notification being sent." 仓库级语句超时(防"跑飞查询")2026-07 才进 Beta——此前连平台级熔断都没有。
生产验证
—
证据等级
`多方印证(3 个独立来源)`,用户实案 + 官方文档 + 站内卡交叉。
最后核验
2026-10-07

Databricks 年份:2026

Delta Sharing 分享不了带行级安全/列掩码的表:想按 recipient 过滤?先人肉建 view

多方印证
运维复杂度生态与信任
一句话
UC 表一旦加上 row filter / column mask,就不能作为 Delta Sharing provider 资产分享——"这个 recipient 只能看 IN 区客户行"这种需求,得为每个 recipient 预建 view 再分享。
窄场景
跨组织数据共享 + 行级权限;用 Delta Sharing 做数据产品的团队。
机制
provider 端直接拒绝带 RLS/列掩码的表(报错原文 "InvalidParameterValue: Table <fqn> has row level security or column masks, which is not supported by Delta Sharing.")。行级安全是"粗粒度"的:只能按分区过滤,不能按 recipient 动态过滤行。
生产验证
—
证据等级
`多方印证(3 个独立来源)`,独立博客 + 生产工具文档 + 官方文档。
最后核验
2026-10-07

Databricks 年份:2026

UC 行列级安全是"孤岛治理":上了 RLS/掩码,就告别 13 项能力

多方印证
运维复杂度生态与信任
一句话
行过滤器/列掩码一旦启用,官方文档 Limitations 清单列出 13 项同时失效:time travel、deep/shallow clone、view、streaming 读取、Iceberg REST API、Delta Sharing 分享……安全越细,能力越少。
窄场景
从 Snowflake 迁来、指望"行策略+clone+time travel 正交组合"的治理团队;要给测试环境 clone 生产数据的团队。
机制
官方文档逐条在列:"Time travel does not work with row-level security or column masks." / "Deep and shallow clones are not supported…" / "You cannot apply row-level security or column masks to a view." / "You cannot use Iceberg REST catalog or Unity REST APIs…"。用户原声:上了行过滤器就得放弃用 clone 拷生产数据到测试环境,"will probably discourage us to use Row Filters"。
生产验证
—
证据等级
`多方印证(3 个独立来源)`,官方文档 + 独立仓库 + 社区实案。
最后核验
2026-10-07

Databricks 年份:2026

Ranger 线程泄漏:每次元数据 checkpoint 漏两个线程,拖垮 Ranger Admin

多方印证
稳定与故障生态与信任
一句话
每次元数据 checkpoint 都会永久残留两个 Ranger PolicyRefresher 线程,线程数随 checkpoint 次数线性增长,最终把 Ranger Admin 的请求打爆、拖到 OOM。
窄场景
云模式(存算分离)+ 接入 Apache Ranger 做权限管控的 Doris 4.1.0 集群;默认 1 小时一次 cloud checkpoint。
机制
checkpoint 会新建一个临时 Env 做元数据镜像,Env 初始化时经 RangerDorisAccessControllerFactory 新建 Ranger 权限控制器,每个控制器启动 PolicyRefresher 后台线程;checkpoint Env 销毁时只清掉了静态引用,没有关闭 AccessControllerManager、没有停掉 PolicyRefresher 线程。于是每次 checkpoint 永久残留 2 个线程;每个线程按默认 30 秒轮询向 Ranger Admin 拉取策略与角色,请求量随运行时间线性增长。2.1 时期曾有人报过同类问题并修成单例(PR #45645),4.1 重构引入 Factory 后回归。
生产验证
来源 1:apache/doris#65524(2026-07),Doris 4.1.0 云模式 + Ranger 2.7.0——生产 FE 攒下 1321 个 PolicyRefresher 线程,按默认 30 秒轮询约 88 req/s 打到 Ranger Admin;Ranger Admin 积压 2000 万+ 异步任务、Full GC 5197 次累计约 18 小时、最终 `OutOfMemoryError: GC overhead limit exceeded`,Tomcat Acceptor/Poller 线程消失、6080 端口看似监听实则不可访问。报告给出完整复现步骤与根因调用链,作者表示愿意提交 PR;
来源 2:apache/doris#45641(2024,Doris 2.1 时期)——同一症状的早期报告:"每次 checkout 操作都新建 RangerDorisAccessController,每个控制器再新建 ranger policy refresher","Too many policy refreshers will cause ranger admin overload",作者同样表示愿意提交 PR(后由 PR #45645 修成单例)。
证据等级
`多方印证(2 个独立来源)`,GitHub 用户生产复盘/缺陷报告 ×2(#65524 具名复现步骤 + #45641 同症状早期报告)。
最后核验
2026-10-03

Apache Doris 年份:2026

Tablet 版本链断裂:一次 BE 硬杀,tablet 永久不可读写

多方印证
稳定与故障
一句话
BE 在版本发布中途被硬杀(或磁盘迁移与 compaction 竞态),tablet 元数据的 rowset 版本链出现"洞",tablet 永久不可读写,连 `ADMIN SET REPLICA VERSION` 都修不好。
窄场景
K8s 部署下 BE pod 被 kubelet 硬杀(OOM/节点故障),或 BE 多磁盘间 tablet 迁移与 compaction 并发;副本数=1 时直接等价于数据丢失。
机制
Doris 的 tablet 数据由一串 rowset 版本组成版本图(version graph),读/写需要一条从版本 0 到可见版本的连续路径。publish 阶段的 tablet meta 更新不是崩溃原子的:硬杀落在中间状态,重启后版本图出现断档 → `fail to find path in version_graph`。FE 侧的 `ADMIN SET REPLICA VERSION` 只改 FE 侧状态,BE 下一次 tablet report 会用磁盘真实状态覆盖回来,所以"修了跟没修一样";BE 侧没有任何 salvage/repair 路径。RF1 下没有健康副本可克隆,唯一出路是删表从上游重建。
生产验证
来源 1:apache/doris#66301(2026),Doris 4.1.0-rc03 on K8s + Ceph——kubelet 硬杀 BE 落在 publish 中途,tablet 报 `fail to find path in version_graph. spec_version: 0-51946`,读写与 compaction 全部永久失败;`ADMIN SET REPLICA VERSION` 被 BE 上报覆盖;RF1 下只能删表从上游重建。报告人列出 #36832/#42021/#49524 三个同错误签名的历史 issue,横跨 2.0.x–4.1.x,均被 stale 关闭、无根因无修复;
来源 2:apache/doris#49524(2025-03),Doris 2.0.13——磁盘迁移(SSD→HDD)任务与 cumulative compaction 并发,迁移只搬了合并后的版本文件,tablet 报同样的 `fail to find path in version_graph`,读取失败。
证据等级
`多方印证(2 个独立来源)`,GitHub 用户缺陷报告 ×2(2026 K8s 生产 + 2025 磁盘迁移),同错误签名横跨 2.0.x–4.1.x。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Apache Doris 年份:2026

单写者文件锁:把它当服务器库用的都会被锁教做人

多方印证
性能问题运维复杂度
一句话
一个进程以读写模式打开 DuckDB 文件后,其他任何进程(哪怕 `read_only=True`)都打不开同一文件——直接报锁冲突,读也要等写。
窄场景
把 `.duckdb` 文件当共享数仓,同时被 BI 工具(Metabase)、notebook、定时同步进程访问的团队;带着"连上就能查"的服务器数据库心智来用 DuckDB 的架构。
机制
DuckDB 是嵌入式库,没有 server 进程仲裁访问,文件锁按 PID 持有。一个进程持有读写连接时,其他进程的任何连接(包括只读)都会失败,报错 `IO Error: Could not set lock on file … Conflicting lock is held`。MVCC 只在同一进程内提供读写并发;跨进程的读只能在写连接释放后"错峰查询",或另行做快照拷贝。官方长期立场是多进程并发写"不是主要设计目标"。
生产验证
来源 1:Dango 项目 ADR-003(2026)——选定 DuckDB 做单文件数仓后,被迫把 dlt 同步、dbt run/test 全部串行化(调度器 `max_instances=1`);Metabase(独立 Java 进程)与 Marimo notebook 在写入期间被文件锁挡住,只能在同步间隙查询或用快照拷贝,消费者连临时表都建不了;磁盘一坏就只能从源头重建,无复制;
来源 2:ChunkHound 项目的并发探针实验(2026)——1 写 + N 读的多进程实验里,所有读进程在 connect 阶段即失败(`Could not set lock on file`),实测结论是"一个 DuckDB 文件同一时间只能属于一个 OS 进程",项目被迫全站走单进程串行访问层(对照组 LanceDB 同场景可正常读写)。
证据等级
`多方印证(2 个独立来源)`,独立项目工程记录 ×2(2026,均为带实测数据的记录)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠(单写者限制是 DuckDB 最广为人知的约束)。

DuckDB 年份:2026

On-Demand 按量计费:一次成功的流量,就是一次账单灾难

多方印证
成本账单
一句话
按量计费没有上限:一个每页发 47 个查询的 dashboard 功能上线一个周末,账单从每月 $150 变成 $9,247。
窄场景
On-Demand 模式 + 查询扇出(无 JOIN 导致一个 API 拆成数十个 Query)+ 没有实时成本监控的团队。
机制
On-Demand 按请求数 × item 大小计费(读按 4KB、写按 1KB 向上取整),没有 JOIN 意味着关系查询被拆成 N 个独立 Query;与预置容量不同,按量模式没有"到顶变慢/报错"的天然熔断——流量即账单;常规监控只看延迟和错误率,看不到"单次请求的成本",出事时一切指标都是绿的。
生产验证
来源 1:CodexLab 2026-01——周五下午上线用户活跃度 dashboard(每页加载 47 个 DynamoDB 查询,随后向 12,000 用户发邮件推送),周末 AWS 账单 $9,247.83(其中 DynamoDB $8,963.22/72 小时);应急加 Redis 缓存、合并查询 47→8,最终迁回预置容量(上限 $680/月);
来源 2:HN 2017 年讨论——从业者原话 "DynamoDB's billing and provisioning model is awful to deal with",另一条评论称曾见某初创公司出现约 $85K 的 DynamoDB 账单。
证据等级
`多方印证(2 个独立来源)`,个人博客账单复盘 + HN 社区多方印证。
最后核验
2026-10-03

Amazon DynamoDB 年份:2026

访问模式先行:漏掉的查询没有"加个索引"那么简单

多方印证
运维复杂度成本账单
一句话
DynamoDB 要求你在第一天就想清楚所有查询:漏掉的访问模式,代价是回填、双写和迁移,而不是一条 DDL。
窄场景
需求还在演进的业务应用(报表、admin 后台、多条件筛选排序)。
机制
只能按键查询;FilterExpression 在 key 命中之后执行,不省 RCU;跨分区全局排序不支持;新增查询维度 = 新建 GSI(整表回填 + 写入成本翻倍)或反范式化冗余;改一个字段语义 = 全表 backfill(每条目一次读 + 一次写、限流管理、热点风险、双读兼容层)。
生产验证
来源 6:maxime 2025-11,多年 SaaS 生产经验——"small change"(1200 万条目改一个字段)= 数天设计 + backfill + 双写 + feature flag,原话 "You'll spend more time building the migration machinery than the feature that prompted it";单表设计下 Streams 变成混合事件流(每个消费者重做路由)、监控指标跨实体类型模糊、PITR 无法只恢复"某租户的订单"、一个坏写者可污染无关实体;
来源 7:Bhoos Games 2026-08——除 id 外没有任何索引,非 id 查询"既耗时又贵",用户数据分析根本做不了;为省空间把字段名编码成 `$a$1`/`$b$11b$5`(分别代表 diamond/coin/XP),外人看到的是乱码。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2(含 1 个具名迁出复盘)。
最后核验
2026-10-03

Amazon DynamoDB 年份:2026

热分区:表级容量还剩 85%,请求却被限流

多方印证
性能问题稳定与故障
一句话
表级容量仪表盘一片健康,但某个 key 的流量打满了它所在的物理分区——你的真实上限由最热的那个 key 决定。
窄场景
多租户 SaaS(按 tenant 粒度做分区键)、事件型突发流量(大促、单 campaign 爆量)。
机制
DynamoDB 按分区键哈希分片,每个物理分区有固定吞吐上限(约 3000 RCU / 1000 WCU);表级容量是各分区预算之和,一个热 key 打满所在分区即返回限流(ProvisionedThroughputExceeded/ThrottlingException),其余分区完全空闲;"加总容量"只能按比例抬高所有分区,治标不治本且更贵;分区按吞吐自动分裂,但单个 key 永远分不到两个物理分区。
生产验证
来源 8:Rajamohan Jabbala 2026-01——广告实时竞价平台(50K 写/s、200K 读/s、2TB、on-demand 约 $18K/月),超级碗期间单个 campaign 占 80% 流量,打爆 `campaign_id` 分区,修复方案是分区键加随机后缀打散;
来源 6:maxime 2025-11——把 "fighting hot partitions and throughput tuning" 列为 DynamoDB 建模债清单之一。
证据等级
`多方印证(2 个独立来源)`,具名生产事故 + 独立博客印证。
最后核验
2026-10-03
备注
分区级上限为架构性设计(文档化行为),adaptive capacity 只能缓解、不能消除单 key 上限,故保留收录,未作"已修复"标注。

Amazon DynamoDB 年份:2026

预置容量的运维税:为"4KB 涨到 8KB"开会

多方印证
运维复杂度
一句话
用预置容量,团队要为"数据值从 4KB 涨到 8KB"这种事认真开会:容量规划成了日常运维税。
窄场景
流量有波峰波谷、用 provisioned + auto-scaling 控成本的中等规模团队。
机制
WCU 按 1KB、RCU 按 4KB 向上取整,item 平均大小翻倍 = 容量需求翻倍;auto-scaling 按分钟级调整,突发靠 burst 余额扛;新增功能(夜间分析 scan、备份)都要重调 auto-scaling 参数,否则限流 = 应用随机报错;缩容每天限次,峰值过后要为闲置容量继续付费。
生产验证
来源 2:HN 2017 年讨论——从业者原话 "having to constantly manage and change our provisioned capacity so that we could respond to usage spikes and keep our bill from becoming stratospheric…anytime we'd add new functionality…it meant revisiting the parameters for our auto-scaling or risk getting throttled";"serious conversations about the repercussions of your data values going from 4kb to 8kb";
来源 1:CodexLab 2026-01——账单惊魂后迁回预置容量,"Predictable costs: $680/month max…Auto-scaling with limits we control",即用"为闲置容量付费"换"可预测"。
证据等级
`多方印证(2 个独立来源)`,HN 社区 + 个人博客(2017 与 2026,机制九年未变,属持续性抱怨)。
最后核验
2026-10-03
备注
HN 来源为 2017 年(预置容量时代);2026 年 CodexLab 复盘印证同一结构性抱怨仍然存在,故保留收录。

Amazon DynamoDB 年份:2026

按 vCPU 计费:生产库、备库、分布式节点个个都要花钱,长期预算成"移动靶"

多方印证
成本账单
一句话
许可按 vCPU 数算——为了高可用加的备节点、为了分布式加的节点,全都要计费,扩容一次账单涨一截,提前几年做预算几乎不可能。
窄场景
按 EDB 订阅跑生产的中大型团队;上了备库/DR、EDB Postgres Distributed 多节点、或云上按 vCPU 小时计费(BigAnimal)的架构。
机制
EDB 订阅按 CPU/vCPU 规模定价,计费的不是"数据库实例"而是"算力单元"。而企业级高可用恰恰要求更多算力单元:流复制备库、见证节点、分布式集群每个写节点都占 vCPU。于是"为了更可靠"和"为了更便宜"直接冲突——备节点提升了韧性,也同步抬高了许可费。云上 BigAnimal 按 vCPU 小时计费更把这种冲突实时化。
生产验证
来源 1:Artee Y.(Novartis,企业用户,2026-04-20)原话:"Licensing based on vCPUs means costs increase as databases scale, especially with distributed configurations. Standby nodes improve resilience but also increase infrastructure and licensing cost. Estimating long term costs upfront is challenging."(按 vCPU 许可意味着成本随扩容上涨,备节点提升韧性也同步增加许可成本,提前估算长期成本很困难);
来源 1:Vineet K.(小企业,2026-04-24)原话:"because it is often tied to vCPU counts, costs can spiral quickly as you scale or add standby nodes for resilience, making long-term budget forecasting a bit of a moving target."(成本常与 vCPU 挂钩,扩容或为加备库加节点时成本迅速失控,长期预算预测成了移动靶)。
证据等级
`多方印证(2 个独立来源)`,具名评价 ×2。
最后核验
2026-10-03

EDB Postgres / EDB Postgres Advanced Server(EPAS) 年份:2026

Oracle 兼容的"最后一公里":最后 5–10% 的小众特性,迁移工具修不好,只能人工填坑

多方印证
升级迁移
一句话
PL/SQL 主体能过去,但 Advanced Queuing、专有包、特定分析函数(如 lag() ignore nulls)这类边角特性不在兼容清单里,工具链修不了,只能人工重写。
窄场景
从 Oracle 迁往 EDB Postgres Advanced Server、且原库深度使用了 Oracle 专有能力(AQ 消息队列、DBMS_* 包族、特殊分析函数语义、BFILE 等)的团队。
机制
EPAS 的 Oracle 兼容是"语法子集"实现:PL/SQL 包、触发器、函数的主体语法被重写解释,但 Oracle 的专有运行时服务(队列、调度、全文、外部表、存储管理)没有对应实现。迁移工具只能做语法转换,遇到语义级缺口只能打报告、留人工。用户原话印证了厂商口径之外的真实缺口:lag() ignore nulls 这类单个函数语义缺失,意味着"兼容 85%"的每一份缺口都落在具体业务代码上。
生产验证
来源 1:Vineet K.(小企业,2026-04-24)原话:"while the Oracle compatibility is excellent, it is not a 1:1 perfect match, and hitting that final 5-10% of niche features like advanced queuing or specific proprietary packages often requires frustrating manual workarounds."(Oracle 兼容很优秀但不是 1:1,最后 5–10% 的小众特性如 Advanced Queuing、专有包经常需要令人抓狂的手工绕行);
来源 3:Ahmad H.(软件研发经理,中型企业,2025-11-04,5/5 好评中仍提)原话:"there are some missing features, like 'lag() ignore nulls', that would significantly speed up development."(缺少 lag() ignore nulls 这类特性)。
证据等级
`多方印证(2 个独立来源)`,具名评价 ×2。另有厂商自认佐证:来源 5(EDB 官方 PGD 已知问题)承认 EPAS 17 的 BFILE 数据类型在分布式复制中不支持、Eager 复制事务不能执行 DDL。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠(Oracle 兼容缺口类)。

EDB Postgres / EDB Postgres Advanced Server(EPAS) 年份:2026

专有特性锁死退路:哪天想迁回社区 PG,"解绑"本身是架构级工程

多方印证
生态与信任
一句话
Oracle 兼容模式、EDB Failover Manager、TDE、数据脱敏视图这些"魔法功能"全是闭源专有——用得越深,迁回社区 PG 时要拆的东西越多。
窄场景
已把 EDB 专有能力写进应用或运维体系的团队(用了 Oracle 兼容语法、EFM 自动故障转移、TDE、redacted views、PL/SQL 包装器);未来考虑降本迁回社区 PG 的 CTO。
机制
EDB 的商业价值恰恰来自社区 PG 没有的那一层:Oracle 兼容的 SQL 方言、专有故障转移编排、透明加密与脱敏。这些能力以闭源扩展/分支形式存在,没有社区等价物。应用代码一旦调用 EDB-only 函数、视图定义依赖脱敏列、运维依赖 EFM,迁回社区 PG 就不是"换个发行版",而是逐项重做:改 SQL 方言、换掉故障转移方案、重做加密与脱敏层。
生产验证
来源 2:匿名已验证用户 "II"(IT 与服务行业,中型企业,2026-05-15)原话:"many of the 'magic' features (Oracle compatibility, EDB Failover Manager, TDE) are proprietary. If you choose to move away from EDB later, your application code could end up closely tied to these EDB-only functions, making a transition more involved."(很多"魔法功能"是专有的,日后想离开 EDB,应用代码可能已与这些 EDB-only 函数深度绑定,迁移更麻烦);
来源 1:Vineet K.(小企业,2026-04-24)原话:"if you ever want to move back to community Postgres, untangling yourself from EDB-specific enhancements like redacted views or PL/SQL wrappers can be a significant architectural burden."(想迁回社区 PG 时,解开 redacted views、PL/SQL 包装器这类 EDB 特有增强是沉重的架构负担)。
证据等级
`多方印证(2 个独立来源)`,G2 已验证评价 ×2(含 1 具名)。说明:本站尚无"从 EDB 迁回社区 PG"的具名完成案例(已知证据缺口),本卡收录的是用户明确感知的"迁出摩擦",非已发生的迁出复盘。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠(供应商锁定类)。

EDB Postgres / EDB Postgres Advanced Server(EPAS) 年份:2026

文档散、社区小:EDB 特有的问题,在 StackOverflow 上几乎找不到人问

多方印证
运维复杂度
一句话
官方文档"很全但散在各处",而 EDB 分支特有的行为在公开社区几乎没有问答积累——出问题要么啃厂商文档,要么开支持工单。
窄场景
用 EPAS Oracle 兼容模式、EDB 专有工具链的团队;半夜排障、需要快速找到"别人踩过没有"的 DBA。
机制
EDB 是 PG 的商业分支:Oracle 兼容模式的报错语义、EPAS 特有系统视图、PEM/EFM 的工具行为,都与社区 PG 有差异,社区 PG 的海量问答对这些差异无效。而 EDB 用户基数远小于社区 PG 和 Oracle,StackOverflow/论坛上 EDB 标签的问题量和回答者都很少,形成"文档是唯一指路牌"的局面;文档本身又按产品线拆成多套(EPAS、PEM、EFM、PGD 各一套),导航成本高。
生产验证
来源 2:Kanishka R.(中型企业)原话:"Limited Community Resources: While PostgreSQL has a huge open-source community, EDB-specific features don't always have the same breadth of community-driven documentation or tutorials, so you often rely on vendor docs or support."(社区资源有限:EDB 特有功能没有社区 PG 那样丰富的社区文档/教程,经常只能依赖厂商文档或支持);
来源 1:Subhajit P.(中型企业,2026-04-25)原话:"documentation and troubleshooting resources, while comprehensive, can sometimes be difficult to navigate when trying to resolve specific issues quickly."(文档虽全,但紧急排障时很难快速导航到要找的内容);
来源 4:TrustRadius Vetted Review(在线教育 MOOC 服务商)原话:"It is sometimes hard to find a community of users on StackOverflow so a larger community, and a dedicated forum with active members to answer questions and work through issues would be nice."(在 StackOverflow 上很难找到 EDB 用户社区)。
证据等级
`多方印证(3 个独立来源)`,G2 评价 ×2 + TrustRadius Vetted Review ×1。
最后核验
2026-10-03

EDB Postgres / EDB Postgres Advanced Server(EPAS) 年份:2026

管理/监控工具 UI 欠现代:功能有,但用起来像上个时代的软件

多方印证
运维复杂度
一句话
PEM 等管理工具"能用",但界面与交互明显落后于新一代数据库平台,高级功能经常要回头翻文档才找得到。
窄场景
日常用 PEM 做监控、性能诊断、备份管理的 DBA;从 Datadog/PgHero 这类现代工具转过来的团队。
机制
EDB 的工具链(PEM 监控、性能诊断、Index Advisor 等)是随订阅附赠的"全家桶"组件,演进节奏服从数据库发行版而非独立产品迭代;且 PEM 客户端历史上是桌面应用架构,Web 化后交互包袱仍在。结果是:核心数据库能力持续加码,管理面的体验改进滞后,用户为"找一个功能"付出额外学习成本。
生产验证
来源 1:Subhajit P.(中型企业,2026-04-25)原话:"The user interface for some of the management and monitoring tools could be more intuitive and modern. Compared to some newer database platforms, navigation and usability can feel slightly less user-friendly."(部分管理/监控工具的 UI 可以更直观现代,相比新一代数据库平台,导航和易用性稍逊);
来源 2:Girishchand B.(测试工程师,中型企业,2026-02-20)原话:"There's also a bit of a learning curve because EDB adds its own tools and features on top of PostgreSQL, which takes time to get familiar with."(EDB 在 PG 之上加了自己的工具和功能,需要时间熟悉,有一定学习曲线)。
证据等级
`多方印证(2 个独立来源)`,具名评价 ×2。
最后核验
2026-10-03

EDB Postgres / EDB Postgres Advanced Server(EPAS) 年份:2026

企业版复杂度 vs 社区 PG:为了那层"企业",团队要多付一份学习税

多方印证
运维复杂度
一句话
EDB 在 PG 之上叠了自己的工具、扩展和概念,DBA 既要懂 PG 内核,又要懂 EDB 这一层——小团队常觉得"还不如直接用社区版"。
窄场景
PG 经验不深、被"企业级"卖点吸引的中小团队;本地化/培训资源有限的组织(如发展中国家公共部门团队)。
机制
EDB 的商业模式是"PG 内核 + 企业层":Oracle 兼容方言、专有扩展、自有工具链各自引入新概念和新参数。团队的知识负担不是 PG 的子集而是超集——排障时要先判断问题在 PG 层还是 EDB 层,再决定查哪套文档。对本来就缺 PG 资深人员的团队,这层增量直接转化为培训成本和招聘门槛。
生产验证
来源 1:Suon S.(IAMS 水资源管理专家,小企业,2026-04-25,3.5/5)原话:"Its enterprise complexity can feel heavy compared to community PostgreSQL, and the training burden for local teams"(企业版复杂度相比社区 PG 显得沉重,本地团队的培训负担大),另提"proprietary features that risk vendor lock-in"(专有特性有锁定风险);
来源 2:Daniel G.(小企业,5.0/5)原话:"The main drawbacks are the higher cost and learning curve. Some advanced features require extra setup and resources"(主要缺点是更高的成本和学习曲线,高级功能需要额外配置与资源);
来源 2:匿名小企业已验证用户(4.0/5,"Reliable PostgreSQL")原话:"It can feel more complex than plain PostgreSQL, and some features require extra setup."(比纯 PG 更复杂,有些功能要额外配置)。
证据等级
`多方印证(3 个独立来源)`,具名评价 ×2 + 匿名已验证评价 ×1。
最后核验
2026-10-03

EDB Postgres / EDB Postgres Advanced Server(EPAS) 年份:2026

2GB 配额打满:etcd 用 NOSPACE 把整个集群变成只读

多方印证
稳定与故障运维复杂度
一句话
MVCC 历史版本默认永远保留,bbolt 文件只涨不缩——到 quota 那天 etcd 直接全集群拒写,读正常、写全死,apiserver 接着 5xx。
窄场景
自建 Kubernetes/Patroni 集群,装机时没配自动压缩、没排 defrag、没改默认 2GB 配额;写越频繁(apiserver churn、Patroni 每几秒续租)死得越快。
机制
etcd 每个写操作(增删改)都产生一个新 revision,默认保留全部历史;compaction 只是在文件内部标记页面可复用,**文件本身不收缩**;`quota-backend-bytes` 默认 2GB(最大 8GB)。文件触及配额 → 触发 NOSPACE 告警 → 全集群拒绝一切写入。恢复必须三步按顺序:compact 丢历史 → 逐成员 defrag 真正回收 → 手工 `alarm disarm`,缺一步都继续拒写。
生产验证
来源 1:2026-07,Patroni 集群——leader 续租写 etcd 失败,`etcdserver: mvcc: database space exceeded`,自动 failover 机制在故障窗口内名存实亡;根因是装机以来从未配过 auto-compaction、从未 defrag,默认 2GB 配额原样保留;
来源 2:2026,自建 k8s 三 master——kubectl 先变慢后彻底无响应,三个节点的 etcd DB 文件大小竟是 1.1G/2.1G/2.4G(从未压缩/整理导致的不对称),`dbSize 2.1GB vs dbSizeInUse 829MB`,1.2GB 以上是纯碎片;compact 到 revision 98469458 + 逐节点 defrag 后 2.4GB→434MB,控制面复活。
证据等级
`多方印证(2 个独立来源)`,具名生产复盘 ×2。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

etcd 年份:2026

慢盘即原罪:fsync 慢几毫秒,选主风暴教你做人

多方印证
性能问题稳定与故障
一句话
etcd 每个写都要 fdatasync,官方线是 p99 < 10ms——HDD/网络盘/被邻居挤占的盘分分钟超标,然后就是 "apply request took too long"、心跳发不出、Raft 反复重选,写在选主窗口里直接停摆。
窄场景
etcd 跑在传统 HDD、虚拟化薄盘、云网络块存储(如 iSCSI)或与高 IO 业务混部的机器上;负载一高(备份窗口、存储重建、流量高峰)就从"看着健康"滑向 quorum 抖动。
机制
Raft 提交前必须把 WAL 落盘,leader 还要按时发出心跳;fsync 超时 → 成员判定 leader 失联 → 发起选举 → 选举期间写暂停 → 新 leader 若同样慢盘,选举反复触发(election storm),集群长时间无主可写。时钟漂移(NTP 被拦)会叠加放大同一风险。加 CPU/加内存对此毫无作用——瓶颈在同步写路径。
生产验证
来源 3:2026-08,Jason Chen 的生产 k3s 集群——三节点 quorum 明明"全健康",实测两台虚拟 HDD 节点 fsync 均值 14.2ms/13.9ms(**均值**已超 10ms 线),p99 估算 64–256ms(超标 6–25 倍),一小时内三台机器分别打出 512/1540/1223 条 "apply request took too long",单次 apply 延迟 100–600ms;另发现 NTP 被公司网络静默拦截,时钟漂移与慢盘叠加;
来源 4:2020-04,Gojek 生产 etcd 运维实录——存储延迟过线会引发 leader election storm("no leader keeps the lease for long enough"),明确建议**永不**把 etcd 放在远程块存储上,SSD 是硬性要求。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2(含 1 个带完整实测数据的生产调查)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

etcd 年份:2026

升级 etcd:只能逐个小版本爬,滚回去要停机全量恢复

多方印证 来源存疑
升级迁移
一句话
etcd 不支持跨版本跳跃升级(3.4→3.6 必须经 3.5),且升级会改磁盘数据结构让老版本读不懂——没有滚动回滚,翻车=停机、从备份全量恢复;更讽刺的是,升级编排的状态往往就存在你正在升级的那个 etcd 里。
窄场景
气隙/离线环境、客户数据中心的无人值守集群(Teleport Gravity 场景);用发行版包(Ubuntu 24.04 自带 3.4.30)而非上游二进制的用户;还依赖 v2 API 的老客户端。
机制
etcd 滚动升级只保证相邻小版本协议兼容,数据目录格式随版本演进且**不可逆**;一旦某成员写坏或升级后发现问题,不存在"逐个滚回"的官方路径,只能全停集群、清空数据目录、从备份恢复再重启。Teleport 的 catch-22:他们的升级流程协调状态存在 etcd 里,"把 etcd 下线一分钟做升级"等于在升级期间亲手关掉自己的协调器。另:v2store 自 3.4 起废弃、`--enable-v2` 在 3.6 被彻底移除,老客户端无退路;发行版打包严重滞后(2026 年的 Ubuntu 24.04 仍是 3.4.30,其 gRPC-gateway 的 member/list 行为与 Patroni 预期不一致导致 404)。
生产验证
来源 5:2018-07,Teleport 工程师 Kevin Nisbet 具名访谈——为 Gravity 用户做全自动无人值守升级时发现:不能跳版本(2→3.0→3.1 必须逐级走),没有干净的回滚,"might have to shut down your entire cluster, restore all of the data directories from backup",最终被迫自研"导数据→起空新集群→写回"的停机式升级方案(停 etcd 30 秒到 1 分钟);
来源 6:2026-10,Twinhull 实测——Ubuntu 24.04 的 etcd 3.4.30 上 Patroni etcd3 后端因 `/v3/cluster/member/list` 返回 404 而永远起不来,etcd 本体却显示 healthy;同机换上游 3.6 二进制立即恢复;并确认现行规则仍是"一次只能升一个小版本:3.4 → 3.5 → 3.6,逐成员"。
证据等级
`多方印证(2 个独立来源)[来源存疑:来源 6 为商业 HA 套件厂商博客,文末含产品推广;其事实部分(curl 404 复现、逐级升级规则)具体可核,已如实标注]`,具名工程师访谈 + 独立实测记录。
最后核验
2026-10-03

etcd 年份:2026

Galera 开源前途成疑:基金会主席说商业公司"想干嘛干嘛"

多方印证
生态与信任
一句话
MariaDB plc 2025 年收购 Galera 背后的 Codership 后,基金会执行主席公开表示商业公司对 Galera"想做什么都行"——集群技术的开源未来蒙上阴影。
窄场景
把 Galera Cluster 作为长期 HA 方案的重度用户。
机制
Galera 从来不是 MariaDB 服务端核心工程团队的产品(Codership Oy 独立开发),2025 年被 MariaDB plc 收购后归商业公司所有;基金会只承诺保护 MariaDB server 本体。参照 MaxScale 的 BSL→纯商业先例,商业公司可随时调整 Galera 的许可或产品线归属,用户没有话语权。
生产验证
来源 5:The Register 2026-09,基金会执行主席 Kaj Arnö 原话——Galera "attracted controversy over its open source future and its place in the company's enterprise product line","It's their freedom. It's their prerogative to decide what they want to do";
来源 4:Jepsen 2026 证实收购事实——"In 2025 MariaDB acquired Codership Oy, bringing Galera Cluster under the MariaDB umbrella"。
证据等级
`多方印证(2 个独立来源)`,独立媒体访谈 + 独立测试机构事实确认。
最后核验
2026-10-03

MariaDB 年份:2026

版本号迷宫:LTS/STS 交替发车,版本字符串还假装自己是 5.5.5

多方印证
运维复杂度升级迁移
一句话
10.11 LTS、11.0–11.3 一年支持、11.4 LTS、12.x 滚动——用户和面板厂商被版本号绕晕;驱动还得专门处理 MariaDB 假装 5.5.5 的握手字符串。
窄场景
选型定版本、面板(CyberPanel/CWP)用户、写驱动/连接器的开发者。
机制
2023 年后 MariaDB 切到 LTS/STS 交替:STS 只支持 1 年、不建议生产用,但 11.0/11.1/11.2 这类短命版本会先出现在发行版和面板里,用户分不清该追哪个;LTS 之间(10.11→11.4)又有优化器代价模型改写等大变更。叠加历史包袱:服务端握手报 `5.5.5-10.11.2`(当年为兼容老客户端拒绝前导 `10.` 的 hack),naive 的版本解析会误判成 MySQL 5.5.5 走 legacy 路径,驱动必须特殊处理。
生产验证
来源 10:CyberPanel 论坛 2024-07——用户想升 11.4 LTS,官方回复"我们还没支持这个版本,请等官方指南",用户不敢动;
来源 11:byteink/bit 驱动文档 2026-09——"Two traps that only show up against MariaDB"之首即版本字符串 hack,驱动被迫剥离前缀、显式判定家族;
来源 12:Vettabase 2024-05(Federico Razzoli)——"Short Term Support versions are not recommended for production, because support only lasts for one year"(引文为作者原话),11.4 LTS 支持到 2029-05。
证据等级
`多方印证(3 个独立来源)`,社区论坛 + 开源驱动文档 + 独立顾问评测。
最后核验
2026-10-03
备注
与现有 [避坑] 卡部分重叠(档案吐槽清单"版本坑:10.6 EOL"属同类主题)。

MariaDB 年份:2026

Oracle 治下的社区信任危机:裁员、零提交、公开信与"换库"建议

多方印证
生态与信任
一句话
2025-09 Oracle MySQL 团队裁员、GitHub 公开仓库超 3 个月零提交,社区成立 OurSQL Foundation 并发表公开信要求独立治理;多位具名人物公开建议迁往 MariaDB/PostgreSQL。
窄场景
选型期评估 MySQL 长期维护风险的技术决策者;依赖社区版的企业用户。
机制
MySQL 开发长期闭门(private code drops)、路线图不透明、安全 bug 不公开跟踪、企业版功能付费墙;2025 年公开提交量跌至 2000 年以来最低,社区贡献流程不透明导致外部无法实质参与,信任持续流失。
生产验证
The Register(2026-02-17):致 Oracle 公开信(letter.3306-db.org)初期获约 100 个签名、后增至 248+,Vadim Tkachenko(Percona CTO、前 MySQL AB)、Peter Zaitsev(Percona 联合创始人)具名发声,MySQL 创始人 Michael "Monty" Widenius 对裁员表示 "heartbroken";DEVCLASS(2026-01-13):GitHub 仓库自 2025-09 零提交,Julia Vural(Percona)统计 2025 提交量为 2000 年以来最低,Otto Kekäläinen(前 AWS RDS、前 MariaDB 基金会 CEO)称 MySQL "open source only by license, but not as a project",建议改用 MariaDB/PostgreSQL;WebProNews(2026-06):Oracle 于 2026-06-25 发布治理改革(技术指导委员会初始席位为 AWS/Google Cloud/Oracle),Zaitsev 回应 "advisory capacity…better than nothing, but not PostgreSQL-type engagement",2026-05 成立的 OurSQL Foundation 继续要求有约束力的承诺(binding commitments)。
证据等级
`多方印证(3 个独立来源)`,来源性质:科技媒体报道 + 具名人物观点(Percona CEO/CTO、MySQL 创始人、前 MariaDB 基金会 CEO),无阴谋论。
最后核验
2026-10-03

MySQL 年份:2026

8.4 LTS 默认禁用 mysql_native_password:老客户端升级即失联

多方印证
稳定与故障升级迁移
一句话
MySQL 8.4 LTS 默认不再加载 mysql_native_password,老驱动/老账号升级后直接认证失败;RDS 上修复还要改参数组并重启实例。
窄场景
8.0/8.3 升 8.4 LTS;PHP/PDO 老驱动、C 客户端等不支持 caching_sha2_password 的应用;账号仍用 mysql_native_password 的存量系统。
机制
8.4 起 mysql_native_password 从内置改为需显式启用的独立插件(--mysql-native-password=ON),authentication_policy 里配了也没用——插件没加载直接报 ERROR 1524;9.x 将彻底移除。老客户端在握手阶段就被拒,不是"连上后报错",排查时容易误判为网络或账号问题。
生产验证
AWS re:Post(约 2026-04):用户升到 8.4.3 后 PHP/PDO 应用报 unknown authentication method,而 DBeaver(新驱动)正常;修复=参数组 mysql_native_password=ON + 重启 RDS 实例(静态参数);GitHub kbk#13(2026-01):项目因 C 客户端不支持 caching_sha2_password 被迫把 MySQL pin 在 8.3.0,无法升级 8.4 LTS。
证据等级
`多方印证(2 个独立来源)`,来源性质:AWS 社区问答 + GitHub 项目 issue。
最后核验
2026-10-03

MySQL 年份:2026

VMware 软分区陷阱:虚拟机里只跑一个实例,按整个集群的物理核付费

多方印证 来源存疑
成本账单
一句话
Oracle 不承认 VMware 是"硬分区"——在 VMware 集群上跑 Oracle,哪怕只用其中几台宿主机,也可能被要求按整个集群(乃至整个 vCenter)的物理 CPU 买许可。
窄场景
在 VMware 上虚拟化部署 Oracle EE 的客户;这是审计中最常见的"大额缺口"来源。
机制
Oracle 的分区政策(partitioning policy)只认可 Solaris Containers、IBM LPAR、Fujitsu PAR 等"硬分区"技术;VMware 被归为"软分区",因此许可计量按 Oracle 可"触及"的全部物理处理器计算。独立授权顾问 2026 年的机制说明写道:"all servers within a cluster — or potentially an entire data center — must be licensed, even if Oracle is only running on a subset of hosts"(来源 13)。
生产验证
—
证据等级
`多方印证(2 个独立来源)`[来源存疑],具名前 Oracle 高管作证 + 授权咨询公司机制说明(咨询厂商,存在商业动机)。
最后核验
2026-10-03
备注
主题可能与现有 [避坑] 卡(虚拟化许可类)重叠。

Oracle Database(甲骨文) 年份:2026

误点一下鼠标:默认启用的付费选项包,按"使用"不按"购买"计费

多方印证 来源存疑
运维复杂度成本账单
一句话
Oracle EE 默认安装并启用全部付费选项包,且无任何许可密钥检查——DBA 在 EM 里点一下或跑个 AWR 报告,就可能欠下按整个数据库服务器计价的账单。
窄场景
任何 Oracle EE 部署;审计时 DBA_FEATURE_USAGE_STATISTICS 视图里的使用记录是铁证。
机制
EE 安装时全部选项默认可用,无 license key 门槛;CONTROL_MANAGEMENT_PACK_ACCESS 参数默认值为 DIAGNOSTIC+TUNING,意味着 EM 自动启用诊断/调优包功能;一旦使用(use triggers license),DBA_FEATURE_USAGE_STATISTICS 会永久记录,"过去使用仍算数",且计费按底层数据库的全部处理器/NUP 算,而非按实际使用的那台小机器。
生产验证
—
证据等级
`多方印证(2 个独立来源)`[来源存疑],亲历者故事 + 授权咨询公司统计(咨询厂商,样本与口径未经第三方复核;该公司自己也提醒审计防御厂商有夸大动机)。
最后核验
2026-10-03
备注
亲历故事发生在 2006–2007 年,但"默认启用、无密钥检查、按使用计费"的机制经 2026 年来源印证仍然有效,故保留。主题可能与现有 [避坑] 卡(选项包许可类)重叠。

Oracle Database(甲骨文) 年份:2026

Oracle Support:MOS 又慢又难用,升级 SR 得靠隐藏按钮

多方印证
运维复杂度生态与信任
一句话
连 Oracle 社区意见领袖都公开吐槽:MOS 网站迟缓、AI 搜索难用、补丁下载报 400 错误,SR 升级路径藏在一个连客户经理都不知道的"Manager Actions"按钮里。
窄场景
需要下载补丁、开 SR 解决生产问题的所有客户;越是紧急越能感受到。
机制
MOS(My Oracle Support)前端臃肿导致页面迟缓;补丁下载在浏览器端报 "400 Bad Request / Request Header Or Cookie Too Large"(cookie 过大),而 wget 或 AutoUpgrade 命令行反而正常——问题出在 Web 层而非后端;SR 升级(escalation)入口藏在 "Manager Actions" 菜单下,无文档指引。Tim Hall 的核心批评是:"it should work for everyone"——他需要 26 年建站积累的影响力、发公开 rant 才被官方约谈并解决问题,普通客户没有这条路。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,具名社区作者 2026 年记录 + 独立 DBA 论坛历史共鸣。
最后核验
2026-10-03
备注
来源 10 为年代不明的旧帖,仅作"支持体验抱怨由来已久"的历史印证,不单独成证。

Oracle Database(甲骨文) 年份:2026

锁管理器 LWLock 争用:大并发下"正确"的锁变成瓶颈

多方印证
性能问题
一句话
PG 的重量锁走共享锁管理器,fast-path 槽位每进程只有 16 个——超了就去挤 16 个分区的 LWLock,大并发下锁本身成为 CPU 瓶颈。
窄场景
数百上千连接、多表 join、多分区查询的集群;缩减副本数、单机承载更多查询后诱发。
机制
AccessShare 等弱锁默认走 backend 本地 fast-path(FP_LOCK_SLOTS_PER_BACKEND=16,编译期常量,改不了);规划阶段要对表及全部索引加锁,分区表每个分区都要加锁,极易超 16 槽 → 回落到共享 LockManager → 争抢 16 个分区的 LWLock。PG16 之前等待队列还有二次方级退化。
生产验证
来源 3:GitLab 2023 年,工程师 Matt Smiley 在公开 issue 中调查——合并一台副本后 API/Web 慢约 2 小时,用 bpftrace 定位到 lock_manager LWLock 等待,根因是单机查询量上升导致锁争用(pganalyze E91 转述,2023-11);
来源 4:WebProNews 2026-07 独立报道印证了 GitLab 这一事件,并指出 AWS 官方博客 2025-07 亦记载 Aurora PostgreSQL 在高并发读多分区表时出现相同症状。
证据等级
`多方印证(2 个独立来源)`,具名工程调查(经第三方转述)+ 独立媒体报道。
最后核验
2026-10-03

PostgreSQL(社区版) 年份:2026

复制槽失联 = 主库磁盘定时炸弹

多方印证
稳定与故障运维复杂度
一句话
复制槽承诺"消费确认前不删 WAL"——消费者一死,主库 pg_wal 无限堆积,直到写不进去。
窄场景
用逻辑复制/CDC(Debezium 类)或做过测试性订阅的 PG 主库;槽建完没人管、没人监控。
机制
slot 的 restart_lsn 钉住 WAL 回收下限;inactive slot 的 catalog_xmin 还会在**全集群范围**挡住 autovacuum 清死元组(一个库的槽能拖住所有库的 vacuum);安全阀 max_slot_wal_keep_size(PG13+)默认 -1 即无限。
生产验证
来源 5:2025-03 个人复盘——2 个被遗忘的测试逻辑槽让集群 1.06TB 磁盘被 WAL 占满,删槽后瞬间降到 40GB;同时槽挡住了 autovacuum,删槽后业务时段 CPU 从 ~80% 降到 <10%;
来源 6:2026-09 实战记录——"一次性的测试订阅者忘删槽"是最常见的真实起因;
来源 7:2026-01 on-call 手册——restart_lsn 不推进是逻辑复制"最常见的生产故障模式",并给出 pg_replication_slots 监控阈值。
证据等级
`多方印证(3 个独立来源)`,个人博客 ×3(含 1 个带完整数据的生产复盘)。
最后核验
2026-10-03

PostgreSQL(社区版) 年份:2026

执行计划深夜翻转:没人改代码,查询慢了几十倍

多方印证
性能问题
一句话
统计信息漂移 + prepared statement 通用计划 + autovacuum 改分布——PG 规划器会在你睡觉时换计划,且无任何预警。
窄场景
数据分布倾斜、有长尾值的表;用 prepared statement/JDBC 的应用;大表 autoanalyze 间隔长的库。
机制
规划器靠采样统计估行数,并假设列相互独立(相关列的选择率直接相乘 → 严重低估);prepared statement 前 5 次用定制计划、之后切通用计划(generic plan),长尾参数直接翻车;autovacuum 跑完更新统计/清理膨胀 → 成本模型突变 → 计划翻转。社区长期拒绝 hints,也没有官方的执行计划冻结/基线机制。
生产验证
来源 8:2026-01 工程师亲历——按 user_id 查的长尾查询在第 5 次执行后切通用计划,"花了一整周"才定位;session 表把 5 万行估成 10 行选 nested loop,查询超时被 pager 叫醒;
来源 9:2026-05 事故叙述——跑了两年一直 2ms 的 dashboard 查询,深夜突变为 45 秒,200 连接池被打满引发级联崩溃(连接池耗尽 → 健康检查失败)。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2。
最后核验
2026-10-03

PostgreSQL(社区版) 年份:2026

autovacuum 默认值:按比例触发在大表上形同虚设

多方印证
性能问题运维复杂度
一句话
autovacuum_vacuum_scale_factor=0.2 是按表大小百分比触发的——1000 万行表要死 200 万行才清理,之前全是膨胀。
窄场景
千万行以上大表、高频 UPDATE/DELETE 的 OLTP;默认参数直接上生产的团队。
机制
触发条件 = threshold(50) + scale_factor × 行数,默认 0.2;默认只有 3 个 worker 全库排队,大表一次 vacuum 跑很久占住 worker,其他表继续攒死元组;cost-based 限流默认保守。调激进怕挤占业务 IO,调保守表就膨胀——"死亡之角"。
生产验证
来源 10:2026-03 生产实录——接手 4000 万行表,已攒 800 万死元组、autovacuum 一小时没碰过,表膨胀 30%,顺序扫描拖慢、buffer cache 被垃圾页塞满;
来源 11:2026-06 事故清单——用户行为表 6 个月从 45GB 膨胀到 187GB,"六个月慢烧",最后靠 pg_repack 在线重整救回。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2。
最后核验
2026-10-03
备注
与现有 [避坑] 卡主题部分重叠(该卡已含 VACUUM 运维税)。

PostgreSQL(社区版) 年份:2026

Sentinel:故障转移不丢数据是幻觉

多方印证
稳定与故障
一句话
Sentinel 的故障转移不是零数据丢失——异步复制下,主库已确认的写只要还没送到将要晋升的从库,晋升那一刻就没了;网络分区时还可能出现双主,旧主的写在分区愈合后被整体丢弃。
窄场景
把 Redis 当队列/分布式锁/唯一状态源用的 Sentinel 部署;跨机房、网络分区场景。
机制
复制异步,主库 ack 写不等从库;Sentinel 选"最跟得上"的从库晋升,但窗口真实存在(min-replicas-to-write / WAIT 是 opt-in,非默认)。Sentinel 与 Redis 是两套分离系统:Sentinel 投票的是"它看到的"状态,脑裂时少数派分区照样晋升(被隔离的老主继续接受写),分区愈合后老主被降级、全量复制新主数据 → 分区期间的写被整体销毁。
生产验证
来源 11(Kyle Kingsbury,具名专家分析):"any system which uses asynchronous primary-secondary replication, and can change which node is the primary, is inconsistent";分区场景推演:双主并存、老主写在愈合后被整体替换;
来源 12(2026-09 实测):"A write acknowledged by the old primary but not yet copied to the replica is gone when that replica is promoted";
来源 10(2026-09):"if the master dies before a replica catches up, whatever writes hadn't made it across yet are gone"。
证据等级
`多方印证(3 个独立来源)`,具名专家分析 + 2026 年实测 + 独立印证。
最后核验
2026-10-03
备注
来源 11 发表于 2013 年;该结论针对异步复制架构(非已修复缺陷),且有 2026 年两个独立来源印证同一机制,故保留收录,未作"已修复"标注。

Redis / Valkey 年份:2026

把 Redis 当主库:一次崩溃,几分钟的写就没了

多方印证
稳定与故障
一句话
RDB 是快照不是日志——两次快照之间崩溃,中间的写静默消失;容器里常见的"无持久化"配置下,一次重启就是一次删库。
窄场景
拿 Redis 存库存/订单/队列(无上游副本)当唯一真相源的团队;容器部署沿用默认或空持久化配置。
机制
RDB 按 save 规则周期快照,崩溃丢快照间隔内全部写入;AOF everysec 最多丢 1 秒、always 才接近不丢但写吞吐腰斩(生产几乎没人用 always);容器常见配置等于无持久化。雪上加霜:maxmemory 淘汰策略配错会把"主数据"当缓存悄悄删掉。
生产验证
来源 13(具名,2026-06):秒杀库存计数器用 DECR 当主库,"It was fast, it was simple, and honestly, it just worked in staging. Then production happened.";
来源 6:AOF everysec 仍可丢 1 秒写、数据集必须永远 fit in RAM、"Eviction chaos... quietly starts deleting your 'primary' data";
来源 15(Valkey,机制同源,2026):VPS 半夜维护重启,4000 个队列 job(发票/欢迎邮件/webhook)无声消失,"The reboot didn't crash anything. It just quietly forgot."(持久化未开)。
证据等级
`多方印证(3 个独立来源)`,含 2 个具名生产复盘(其一为 Valkey 案例,机制与 Redis 同源)。
最后核验
2026-10-03
备注
来源 13 部分付费墙,仅前半可见,已如实标注。

Redis / Valkey 年份:2026

换许可证:从 BSD 到 SSPL,社区信任的裂痕

多方印证
生态与信任
一句话
2024-03 Redis 把 BSD 换成 RSALv2/SSPLv1,"诱饵调包"(bait and switch)的指控、分叉与用户出走接踵而至——技术没变,信任变了。
窄场景
需要 OSI 认证开源许可的企业/发行版(Debian/Fedora/RHEL 系);基于 Redis 做托管服务或嵌入商业产品的公司;pin 了 redis:7 这类浮动 docker tag 的团队。
机制
SSPL 要求"把 Redis 当服务提供就得开源整个服务栈",Debian/Fedora 认定非自由软件、拟从发行版移除;外部贡献者归零(CHAOSS 数据:之前 12 个非雇员贡献 54% commits,之后 5+ commits 的非雇员为 0);浮动标签 redis:7-alpine 在 2024-07 静默从 7.2(BSD)滑到 7.4(RSAL/SSPL),"没人改一行,标签自己漂移了"。
生产验证
来源 16(2025-04,独立媒体):Madelyn Olson 在 Monki Gras 具名讲述——"they very kindly informed me I was no longer a maintainer by deleting it from the governance stuff";
来源 17(2024,独立媒体):Percona 调查 70% Redis 用户另寻出路、83% 大企业已采用或评估 Valkey;AlmaLinux 基建负责人 Jonathan Wright 具名确认切换,"Valkey continues the open source legacy of Redis prior to its license change";
来源 18(2024-03 开源社区):Foreman/Pulp 维护者连夜评估 Dragonfly、memcached、Solid Queue,Debian/Fedora 法律列表跟进;
来源 19(2026-09):norite 项目被迫把 redis:7-alpine 换成 valkey,"the swap was forced rather than chosen";评估过 Redis 8(AGPLv3)但 "Valkey wins on being plainly BSD with no license to read twice"。
证据等级
`多方印证(4 个独立来源)`,具名亲历 ×2 + 独立媒体 ×2。
最后核验
2026-10-03
备注
本卡只收录事实与具名表态,不收立场争吵;Redis 8 的 AGPL 回调标注为"已部分修复(许可层面),社区分裂未愈"。

Redis / Valkey 年份:2026

Valkey:分叉保住了协议,保不住"全家桶"

多方印证 来源存疑
升级迁移生态与信任
一句话
Valkey 保住了 BSD 与 RESP 协议,但没保住"全家桶"——Redis Stack 的 Search/JSON/TimeSeries 没有官方对应物,Redis 7.4 还被指破坏了与 Valkey 的数据文件兼容,"drop-in replacement"是有保质期的。
窄场景
用了 RediSearch/RedisJSON/RedisTimeSeries 后想迁 Valkey 的团队;从 Redis 7.4+ 向 Valkey 迁移。
机制
Valkey 从 7.2.4 分叉,只继承核心命令;Redis 8 把 JSON/时序/查询引擎并入核心发行版,Valkey 无对应集成(社区 valkey-search 等在追赶);RDB/AOF 二进制格式在 7.4 后被指不再互通(单方声称,见存疑标注),停机拷文件迁移的路变窄;RIOT(常用开源迁移工具)已归档。
生产验证
来源 21(2026,真实项目工程规范):"Valkey-safe commands... Avoid depending on RediSearch / RedisJSON / Redis Stack unless ticket explicitly targets Redis node migration";"Redis node — only if Redis Stack / modules required";
来源 20(2026)[来源存疑]:"Redis 8.0 also integrates Redis Stack technologies like JSON, Time Series, and the Redis Query Engine. Valkey lacks these integrated features.";
来源 22(2026,HN)[来源存疑]:BetterDB 作者(前 Redis 工程经理)称 "Redis 7.4 broke data file compatibility with Valkey",RIOT 归档后无开源替代。
证据等级
`多方印证(3 个独立来源)[来源存疑]`——来源 20 的站点有 AI 生成痕迹(文中有无意义插句),来源 22 为迁移工具厂商的发布帖;核心事实(Valkey 无官方 Stack 模块对应物)由来源 21 的真实工程规范印证。
最后核验
2026-10-03
备注
Valkey 2024-03 才分叉,社区吐槽样本天然少;本卡已是诚实上限,未硬凑。

Redis / Valkey 年份:2026

默认 10 分钟 auto-suspend:没人提醒你的空转税

多方印证
成本账单
一句话
仓库默认 10 分钟无查询才挂起、超配不告警——"能跑"不等于"跑得省",账单是事后才看到的慢漏。
窄场景
交互式 BI / adhoc 查询稀疏的仓库;默认配置直接上生产、之后无人复核的团队。
机制
`CREATE WAREHOUSE` 默认 `AUTO_SUSPEND=600`(10 分钟),每次查询结束后仓库再空转烧 9 分钟 credit;Snowflake 没有"利用率过低请降配"的反馈回路;workload 变化后当初合理的 size 不再合理,但没有任何东西会提醒你。
生产验证
来源 1:Surfalytics 2026-08-12 客户账单审计清单——"A warehouse running for 9 idle minutes after every query is pure waste",建议除 BI 仓库外一律 60 秒挂起;
来源 2:DSC 2026-02-24——仓库总 credit 中空转占比超 15% 是警告线、超 30% 必须处理;"Snowflake doesn't send you an alert that says 'hey, your ETL warehouse is running at 15% utilization, maybe size it down.' The warehouse just runs."
证据等级
`多方印证(2 个独立来源)`,独立从业者博客 ×2。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

账单惊魂:$2k 个人项目与"五位数意外"

多方印证
成本账单
一句话
Snowflake 默认没有"熔断器"——仓库配错、查询失控、dashboard 后台刷新,账单数字都是事后才知道的。
窄场景
个人项目/小团队试用;未配置 resource monitor 的账户;BI dashboard 高频自动刷新的团队。
机制
resource monitor 默认不存在,必须手动创建(`credit_quota` + 触发器);仓库按运行时间计费,查询"是否必要"不影响计费;浏览器后台 tab 里开着的 dashboard 会按刷新间隔持续触发查询,无人观看也照样计费。
生产验证
来源 3:Madison Schott 2025 年 LinkedIn 具名复盘——个人项目"losing $2k of my own precious money on a poorly optimized Snowflake cluster",所在公司 warehouse 年账单 $55,000;
来源 1:Surfalytics 2026-08-12——"A resource monitor will not optimize anything, but it stops a runaway query from turning into a five-figure surprise";
来源 4:Framesta Fernando 2026-07-22——某增长团队营销归因 dashboard 因后台 tab 自动刷新,一年产生五位数账单,"the refresh keeps happening in empty rooms, in background tabs, and through weekends, billing a full scan for an audience of zero"。
证据等级
`多方印证(3 个独立来源)`,具名个人复盘 + 独立从业者博客 ×2。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

60 秒最低计费:小查询税

多方印证
成本账单
一句话
仓库每次 resume 先收 60 秒的钱——5 秒的查询按 60 秒计费,高频小查询的账单里大部分是空气。
窄场景
高频小查询/监控探针/轮询式集成;BI dashboard 每次加载触发几十个几秒级查询。
机制
按秒计费,但每次 resume 有 60 秒最低消费且 resume 即重置;频繁 suspend/resume 的小查询 workload,实际工作量远小于计费量——suspend 越激进,税越重。
生产验证
来源 5:独立开源项目 detectkit 文档(2026)——"Snowflake bills each warehouse resume with a 60-second minimum — so detectkit's normal cadence of many small, frequent bookkeeping writes is disproportionately expensive against it",该项目因此被迫设计 hybrid mode:Snowflake 只许做只读数据源,状态一律写本地 DuckDB;
来源 4:Framesta Fernando 2026-07-22——"enforces a 60-second minimum charge each time a warehouse resumes, which creates an idle tax on exactly the frequent, short-running queries that dashboards generate"。
证据等级
`多方印证(2 个独立来源)`,独立开源项目文档 + 具名工程师博客。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Serverless 功能静默烧 credit:调优工具自己成了账单项

多方印证
成本账单
一句话
Automatic Clustering、Search Optimization、物化视图、Snowpipe 走 serverless credit 单独计费——省查询的钱可能不够付它们烧的钱,且只看仓库账单根本发现不了。
窄场景
给大表开了 automatic clustering / search optimization / 物化视图的账户;只看 warehouse 账单做成本复核的团队。
机制
serverless 功能不走用户仓库,走独立的 `SERVICE_TYPE` 计量(`METERING_HISTORY`);不适用 cloud services 10% 减免;automatic clustering 按数据变更持续烧 credit,物化视图按 base 表变更持续刷新——都是"开了就一直在后台跑"的计量项。
生产验证
来源 1:Surfalytics 2026-08-12——"Automatic clustering is not free — it runs in the background and consumes credits","If [pruning] is already small, clustering will just cost you money";
来源 7:GroupBWT 2026-09-28——"the extra spend may sit in Automatic Clustering, Snowpipe, retention, replication, or egress instead";"Warehouse resizing does not directly control Snowpipe, Automatic Clustering, Materialized View refresh, storage, or transfer spend"。
证据等级
`多方印证(2 个独立来源)`,独立从业者博客 + 咨询公司工程博客。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Warehouse 冷启动:suspend 一丢缓存,早高峰的查询就变慢

多方印证
性能问题
一句话
仓库挂起即清空本地 SSD 缓存——省钱的 auto-suspend 和热乎的查询是一对矛盾,早高峰的第一波查询替你付了"冷启动税"。
窄场景
夜间挂起、早间 BI 高峰的仓库;查询依赖本地 SSD 缓存命中的大表扫描。
机制
运行中的仓库把微分区缓存在本地 SSD(local disk cache),suspend/resize/drop 即清空;resume 后首批查询走远端对象存储重建缓存;result cache 只有 24 小时且只命中完全相同的查询文本,救不了"相似但不同"的 BI 查询。
生产验证
来源 1:Surfalytics 2026-08-12——"The exception is a warehouse serving interactive BI. There, suspend kills the cache, and users feel it. Keep those at 5-10 minutes and leave the rest at 60 seconds";
来源 2:DSC 2026-02-24——"There are cases where a longer suspend makes sense (like when cache reuse is critical), but the default of 5 to 10 minutes is almost always too high"。
证据等级
`多方印证(2 个独立来源)`,独立从业者博客 ×2。
最后核验
2026-10-03

Snowflake 年份:2026

主键外键只是"纸面约束":声明了也不拦重复行

多方印证
生态与信任
一句话
Snowflake 里 PRIMARY KEY / UNIQUE / FOREIGN KEY 只存元数据、不做强制——重复主键照插不误,RELY 还会让优化器基于"假唯一"消掉 join,静默算错。
窄场景
从传统 RDBMS 迁移、指望 DDL 约束保数据质量的团队;给约束加了 RELY 的表。
机制
列式 MPP 为保批量写入吞吐,不做唯一性/引用完整性检查;约束仅用于文档与优化器改写;RELY 让优化器信任"唯一"假设做 join elimination,数据若有重复则查询结果静默错误——"wrong results, faster"。
生产验证
来源 8:Roshan Bagde 个人 GitHub 实证项目(2026),《Snowflake Constraints — What's Enforced, What's a Lie》——可运行的 SQL demo:`01_proof_not_enforced.sql` 证明重复主键/外键违规插入成功(只有 NOT NULL 会拦),`02_rely_join_elimination.sql` 证明同一查询在 NORELY vs RELY 下返回不同结果;
来源 9:独立开源项目 dlt 文档(2026)——"`unique` and `primary_key` are not enforced and dlt does not instruct Snowflake to `RELY` on them when query planning"。
证据等级
`多方印证(2 个独立来源)`,独立工程师 GitHub 实证 + 独立开源项目文档。
最后核验
2026-10-03
备注
部分缓解——Hybrid tables(Unistore)支持强制主键/外键/唯一约束,但标准列式表至今仍不强制,故保留收录,未作"已修复"标注。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

裁剪失效:84 亿行表只返回 1284 行,却扫描 1.4TB

多方印证 来源存疑
性能问题
一句话
选择性谓词不等于选择性扫描——CDC 持续写入让 micro-partition 的 min/max 元数据"撒得很开",优化器有谓词也裁不掉 partition,查询计划看起来一切正常,直到你去数实际扫描的分区数。
窄场景
CDC/Kafka 持续写入的大表;写入顺序与查询访问模式长期错位、未做 clustering 的表。
机制
micro-partition 裁剪依赖每个分区的 min/max 元数据;持续追加写入使同一谓词值散布在大量分区里,裁剪彻底失效,查询静默退化为接近全表扫——且执行计划里看不出异常。
生产验证
来源 10:独立数据工程师 Sendoa Moronta 2026-09-08 复盘——ORDERS 表 84 亿行/3.7TB/约 190 万分区,一条只返回 1,284 行的查询耗时 41 秒,扫描 1.4TB、124.7 万个 partition(占全表 65%);"A selective predicate does not necessarily produce a selective scan";
来源 11:Alexandra Sampietro 2026-02-20 实验([来源存疑])——clustering key 列顺序放错会导致裁剪彻底失效:正确排序只扫 22/1600+ 个 partition,高基数列在前则扫 ~99%,第三列直接 100% 全表。
证据等级
`多方印证(2 个独立来源,含 1 个 [来源存疑])`,独立工程师生产复盘 + 机制实验。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

整点延迟尖刺:共享云服务层被挤爆,warehouse 是无辜的

多方印证
性能问题
一句话
每小时整点查询延迟翻倍,但查询执行时间只有 16ms——尖刺全在 cloud services(编译 200ms + 请求接收 350ms),根因是跨租户的共享层容量争用,调 warehouse 参数毫无用处。
窄场景
把 Snowflake 当低延迟 operational serving 层用的团队;对整点/半点延迟尖刺敏感的在线查询。
机制
Cloud Services 是处理全账号会话管理、编译与路由的共享层,有独立于 warehouse size 的容量与限流;整点时刻跨租户活动叠加导致争用,延迟与数据扫描量无关。
生产验证
来源 12:Mechanical Rock 2026-10 生产复盘——目标 <300ms、10 rps 的 hybrid 表 serving,每小时整点延迟从 200–300ms 跳到 400–600ms;"Root cause: shared cloud services capacity experiencing contention at hour boundaries from other activity across the Snowflake platform. The warehouse was irrelevant.";最终靠 escalation 让 Snowflake 为该账号单独 provision dedicated cloud services tenancy——"something that requires an escalation, not a configuration change";
来源 14:Slim Baltagi 引用的 2022-09-01 Snowflake 客服回复原文——"Cloud Services servers encountering heavier than normal usage. As a result, some queries had timeouts reading metadata";同一根因跨 4 年仍在发生。
证据等级
`多方印证(2 个独立来源)`,独立咨询公司生产复盘 + Snowflake 客服工单原文。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

并发一高查询就排队:2 秒的查询突然变 45 秒;spill 落盘是双重惩罚

多方印证 来源存疑
性能问题
一句话
warehouse 在压力下只有两条可预测的崩溃路径——并发饱和让查询在队列里等(执行时间没变,全耗在排队上),内存压力让中间结果 spill 到远端存储;spill 的小 warehouse 跑得越久烧得越多,"spill 六分钟的小 warehouse 比两分钟跑完的合适规格更贵"。
窄场景
并发突增的 BI 高峰;warehouse 规格偏小、中间结果大的复杂查询。
机制
CPU 饱和时查询在队列等待,可通过 `QUERY_HISTORY.queued_overload_time` 确诊;内存不足时中间结果从 RAM→本地 SSD→远端对象存储逐级 spill;Snowflake 按 size×time 计费,spill 让"小规格省钱"的直觉反转为"小规格更贵"。
生产验证
来源 13:Ismail Mezzour 2026-03——"Queries that normally take 2 seconds suddenly take 45 seconds.";"A small warehouse that spills for six minutes can cost more than a properly sized one that finishes in two.";"Performance breaks for predictable reasons: Concurrency saturation, Memory pressure.";
来源 14:Slim Baltagi——默认 `MAX_CONCURRENCY_LEVEL=8`,"Such a low query concurrency limit forces either increasing the size… or starting additional clusters… this forces you to burn even more credits";
来源 11:Alexandra Sampietro([来源存疑])——remote disk spillage 是"终极性能杀手",节点 16GB RAM / 200GB SSD,一旦 spill 到 S3 性能断崖。
证据等级
`多方印证(3 个独立来源,含 1 个 [来源存疑])`,独立作者 ×3,机制描述一致。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

RBAC 角色层级:一座没人敢动的"承重墙"

多方印证
运维复杂度
一句话
角色层级腐烂有四个阶段——随意起步、复制粘贴式增长、应急授权补丁、彻底纠缠,终点是 "The mess is now load-bearing — people are relying on access paths nobody remembers granting, and everyone is afraid to touch it."(这团乱麻成了承重墙——人们依赖着没人记得授权过的访问路径,谁也不敢动它。)
窄场景
多人多团队共用账号、role 层层嵌套的大型 Snowflake 租户;做过多次"临时授权"的组织。
机制
Snowflake 的 role 继承 + secondary roles 让授权路径难以审计:secondary roles 激活时用户可用所持任意角色的权限,但 query history 上记的 primary role 未必是真正放行的那个——"who can touch this"和"which specific grant let this exact query succeed"是两个不同的问题;撤销变成赌博:"Was this access load-bearing, or a leftover from an incident eighteen months ago? The only way to find out is to revoke it and see who complains."
生产验证
来源 20:DZone 从业者投稿 2026-10(作者在两家金融服务机构负责 Snowflake 治理)——非生产角色"临时"桥接生产原始数据,"Now your production PII exposure isn't just a function of who holds production roles. It's also a function of who holds non-production roles";
来源 21:Mayank Sethi 2025-12-26(两次 petabyte 级、七位数年 spend 落地)——Snowflake 上手太容易反而是问题,非正式授权模式一旦被人和 pipeline 依赖,"I've never seen it happen cleanly"(清理从未顺利过)。
证据等级
`多方印证(2 个独立来源)`,同一现象:RBAC 债务一旦形成几乎无法干净清理。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Snowflake Task:静默失败、没有重试、重启靠手

多方印证
运维复杂度
一句话
task 默认 SUSPENDED 且永不报错——"A suspended task will never fail or produce an error message because it's not running."(挂起的 task 永远不会失败也不会报错,因为它根本没在跑);无自动重试,父失败则子无限等待,"Failures happen but go unnoticed until data is missing"(失败发生时没人知道,直到发现数据没了)。
窄场景
用 Snowflake Task 做数据 ingestion/调度的团队;多步 DAG 依赖链。
机制
Task 的可观测性黑洞——SHOW TASKS 是唯一查状态的办法,INFORMATION_SCHEMA 无等价视图,包成 view 的路全被堵死(CREATE VIEW 不支持 SHOW、存储过程塞 FROM 子句也建不了 view);单 task 限一条 SQL,复杂逻辑被迫包进存储过程后,"Snowflake sees the procedure as one successful block even if internal steps fail, making debugging a nightmare in the QUERY_HISTORY";20 步 DAG 中间插 task 要手工重连;上一次运行超时会导致下一轮整轮被 skip,数据静默变 stale。
生产验证
来源 23:Greenhouse 工程团队(Matt Feeser)2025-11——"I spent much more time on this than I feel should be required. All I'm after is a list of suspended tasks. That should be easy, right?";
来源 24:Manoj Patil 2025-12——"Tasks do not retry automatically";"If a parent task fails, child tasks wait indefinitely";"Restarting a failed chain becomes manual and risky";
来源 25:Nazeer Syed 2026-01-26——单 DAG 上限 1000 个 task、单个 task 最多 100 个前驱。
证据等级
`多方印证(3 个独立来源)`,客户工程团队 + 2 个独立从业者博客,同一现象:task 失败静默、无自动重试、可观测性差、重启靠手。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

New Relic:"深陷单一厂商的存储、计算与查询模型之锁",迁 Iceberg 年化降本 35–52%

多方印证
升级迁移
一句话
New Relic 数据工程团队公开承认 "we were deeply locked into a single vendor's storage, compute, and query model";Snowflake 打包存储+计算+查询的模型让成本随数据量"阶梯式跳涨",且任何架构变更都必须"经过 Snowflake"——最终把 1000+ 数据集迁到 Apache Iceberg 开放表格式,年化开支降 35–52%,"We're not tied to anyone's roadmap or pricing decisions"(不再被任何人的路线图或定价决策绑住)。
窄场景
数据量持续增长、架构自主权重要的平台团队;被 Snowflake 打包模型卡住扩展路线的大客户。
机制
专有存储格式 + 计算绑定 + 查询引擎三位一体,迁出=重写整套管线;开放表格式(Iceberg on S3)把存储、计算、编排三权分立。
生产验证
来源 33:New Relic 官方工程博客(数据工程总监 Matt Olsen 与 Mehreen Tahir 合著)——并行双跑+行级校验,1000+ 数据集(批+流)迁往 Iceberg(S3 存储、Spark on K8s 计算、Airflow 编排),最终 "fully open and portable";
来源 39:fintech 数据工程师 Aniket Soni 2026-09——专有 micro-partition 是"引擎兼监狱"("we treated Snowflake as both the engine and the prison"),迁出只能 UNLOAD——"a massive export job that burns compute credits, messes with your time-travel metadata";"Stop paying for storage hostage-taking"。
证据等级
`多方印证(2 个独立来源)`,客户官方工程博客 + 独立从业者,锁定机制互相印证。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Dagster:Python Connector 时间戳 bug,2008 年变成 52170 年,上游明确"不优先修"

多方印证
生态与信任
一句话
`snowflake-connector-python` 存 timestamp 列会"搅碎"数据——年份 2008 变成 52170,下游 Pandas 读取直接报错;Dagster 两种 workaround 都恶心(转字符串/强制 UTC 时区),而上游维护者明确 "will not prioritize fixing this issue because some workarounds exist"(不优先修,因为有变通办法)——"until Snowflake fixes the underlying issues in their Python connector, it is unlikely that we will be able to provide a solution that works in all cases for all users."
窄场景
Python 生态(Dagster/pandas)写 Snowflake 时间列;跨时区时间数据。
机制
connector 底层类型映射 bug(`df.to_sql` + `pd_writer` 把 datetime 列误判为 VARCHAR(16777216));同讨论还列出:Pandas Timedelta 被存成纳秒整数、含 None 的整数列被存成 float 列。
生产验证
来源 43:Dagster 维护团队技术 RFC——引用 2020 年的 connector issue #319 为已知背景,多年未修;
来源 44:ibis 社区 issue #11983(约 2026-04)——同一类 Arrow/时间戳管线问题的另一个独立实例:`cursor.fetch_arrow_batches()` 按每个批次数据"猜"时间戳精度(ns vs us),多批次合并报 `ArrowInvalid: Schema at index 6 was different`;修复参数 `force_microsecond_precision=True` 默认 False 且藏在 docstring 里。
证据等级
`多方印证(2 个独立来源)`,Dagster 维护团队 + ibis 社区用户,同一 connector 时间戳管线痛点的两个独立实例;Snowflake 官方 connector 更新日志多次出现同类时间戳转换修复,说明反复出现。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

没有原生 MLflow:Databricks 一个 workspace 走完,Snowflake 要跨三个面

多方印证
生态与信任
一句话
Databricks 把 AI 当"system to engineer":Spark 做特征、MLflow 做跟踪、Model Serving 做端点、Unity Catalog 横跨表+特征+模型+向量索引——"Promoting to ML on Databricks: add a notebook that reads the same silver tables, trains a classifier, logs to MLflow, serves via Model Serving. **One workspace.**";Snowflake 侧是"AI as a function call from the warehouse",真要训自己的模型就得跨面:"either call Cortex from a SQL function, OR export features to a Snowpark Python session, train, register in Snowflake's model registry. **Two surfaces (SQL + Snowpark).**"——"The moment ML enters, Databricks pulls ahead — MLflow has no Snowflake equivalent."
窄场景
想在数仓内完成"特征→训练→跟踪→上线"全链路的 ML 团队。
机制
Snowflake 后来补了 Model Registry(Snowflake ML),但原生 MLflow 实验跟踪 / Model Serving 式端点 / 原生 Feature Store 仍无等价物;Celebal 实测补细节:"No in-built MLflow support, can connect to external server such as AML experiments";"Feature store not natively available";"No support for auto ML";当时模型"can only be deployed for batch inferencing and there is no support for real-time or streaming deployments"。
生产验证
来源 50:btriani 实测 repo 第 2/5 问(2026-05);
来源 51:Celebal Technologies 实测对比长文(Kaggle 数据集双平台实跑,含对比表)。
证据等级
`多方印证(2 个独立来源)`,独立实测 repo + 咨询公司实测对比。
最后核验
2026-10-07
备注
缺口状态:至今缺失(Model Registry 已补,MLflow/Feature Store/AutoML/实时 serving 仍无)。与现有 2 张 Snowpark 卡不重复——那两张讲"难用",本卡讲"ML 生命周期能力缺失本身"。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Git 集成:喊了多年,2025 年 11 月才 GA,至今仍要大量手工定制

多方印证
运维复杂度
一句话
2023 年 Summit 后咨询顾问写道,Git 集成"we don't yet have a release timeline for this"(连发布时间表都没有),但"this is a commonly-requested feature"(这是个被反复要的功能);时间线:2024 年 6 月 Summit 才宣布私有预览,2025 年 11 月 4 日官方通稿宣布 GA。但 GA 不等于好用:2026 年 DevOps 横评:"Snowflake Git Integration is worth exploring, though it currently requires significant customization and development effort"(值得一试,但目前需要大量的定制和开发工作)——一个喊了 N 年的功能,补上时已经是"能用但不好用"的状态。
窄场景
想把 Snowflake 对象纳入 Git 版控的团队;2025 年 11 月之前等集成的用户。
机制
版控是数据平台的刚需,Snowflake 用户等了多年;GA 版本仍需大量定制才能融入 DevOps 流程。
生产验证
来源 60:DAS42 Summit 2023 回顾(2023-07),"commonly-requested feature"原话出处;
来源 61:disqr DevOps 横评(2026),"requires significant customization and development effort"原话出处;
来源 64:Snowflake 官方通稿转述(bizwire,2025-11-04),GA 时间锚点(仅作时间核验用)。
证据等级
`多方印证(3 个独立来源)`,咨询公司回顾 + 第三方横评 + 官方 GA 时间锚点。
最后核验
2026-10-07
备注
缺口状态:已补上于 2025-11(GA);但按 2026 年第三方横评仍需大量定制,算部分补上,故保留收录。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Dynamic PIVOT:ANY 选项补上了,但在存储过程/UDF 里依然不行

多方印证
生态与信任
一句话
很长一段时间 Snowflake 的 PIVOT 要求把转置列一个个手写进 `IN (...)`——2023 年 Retool 论坛用户:"So I've searched several times for a solution to be able to pivot data in Retool. It's fairly complicated to do it in SQL (Snowflake) and have it be dynamic";后来 Snowflake 给 PIVOT 加了 `IN (ANY ...)`,新增列自动变新列,40 行代码变 6 行;但 2026 年 1 月实测指出两个至今未补的洞:"Dynamic pivot is not supported in the code of stored procedure or UDF"(编译时就要定死列);view 上用动态透视,新数据一来列数变了还可能直接报错——adhoc 查询爽了,工程化场景(UDF/SP/view)依然绕行。
窄场景
需要动态透视的报表/UDF/存储过程;列数随数据变化的宽表。
机制
`IN (ANY)` 解决了 adhoc 场景;但存储过程/UDF 编译时定列、view 上列数变化可能报错——动态透视补了一半。
生产验证
来源 62:Retool 社区用户实战帖,2023——动态透视缺失期的 workaround 实录;
来源 63:独立从业者 Fabien Monnery 个人博客,2026-01——ANY 原理+限制实测。
证据等级
`多方印证(2 个独立来源)`,社区用户实战 + 独立从业者实测。
最后核验
2026-10-07
备注
缺口状态:部分补上(`PIVOT ... IN (ANY)` 已可用;存储过程/UDF 中仍不支持,view 上有报错风险)。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

"MySQL 兼容"的代价:分布式版的功能阉割清单

多方印证
升级迁移生态与信任
一句话
TDSQL for MySQL(分布式版)顶着"MySQL 兼容"招牌,但触发器、存储过程、外键、全文索引、自建分区、视图、自定义函数一律不支持——存量 MySQL 应用迁过去等于重写。
窄场景
存量 MySQL 应用(含存储过程/触发器/外键/全文索引)评估迁移到 TDSQL 分布式版。
机制
Proxy + 多 SET 的 Shared Nothing 架构下,跨分片语义无法廉价实现的能力被直接砍掉。官方《使用限制》(2024-01-06)列明:不支持自定义函数、事件、表空间、视图、存储过程、触发器、游标、外键、自建分区、复合语句(BEGIN END/LOOP);DML 层面不支持不带 WHERE 的 UPDATE/DELETE、LOAD DATA/XML、用户变量引用;管理 SQL 连 KILL、ANALYZE TABLE 都不支持(需走透传语法)。
生产验证
来源 1:独立开发者 colask 2026-05 选型调研(GitHub,逐条引用官方文档)——"需要保留触发器/存储过程/外键/全文索引 → 不能选 TDSQL for MySQL";"TDSQL for MySQL 主要痛点:兼容性损失大、需 shardkey 规划";"如果你现有 MySQL 应用代码里出现了上述任何一项,迁移到 TDSQL for MySQL 都意味着重写";
来源 2:社区 SQL 方言参考 wenshao/sql-dialects(2026)"已知不足"——"与 MySQL 的兼容性在分布式特性(如全局 AUTO_INCREMENT、跨分片外键)上存在限制"、"部分 MySQL 存储过程和触发器在分布式场景下行为可能不同"。
证据等级
`多方印证(2 个独立来源)`,独立选型评估 ×1 + 社区方言参考 ×1(官方《使用限制》文档仅作机制佐证,不计入来源数)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

腾讯云 TDSQL 年份:2026

升级不能跳版本:1.24 直升 1.26,150 万条数据"凭空消失"

多方印证
升级迁移
一句话
Weaviate 官方只支持逐个 minor 版本升级——跳过任何一个 minor 版本,migration 脚本不跑,数据静默不可见,降级也救不回来。
窄场景
自部署 Weaviate(Helm/K8s/Docker Compose),版本滞后多个 minor 后想一次升到最新;多副本集群风险更高(单副本 staging 升级正常不代表生产集群没事)。
机制
Weaviate 每次 minor 发布都可能带存储层/schema 迁移(如 1.25 引入 Raft、1.22 的 fs 层级迁移),升级流程默认只执行"上一版本→当前版本"的迁移链。跳过版本后,旧数据目录的新版本二进制仍然能启动(日志无报错),但部分 shard/class 的元数据迁移没做 → /v1/nodes 显示 0 对象、或查 class 报 "shard not found"。数据文件还在磁盘上,只是读不出来;直接降级同样读不出来(schema 格式已部分改写),唯一出路是恢复升级前的备份后逐级重升。
生产验证
来源 1:2024-10,用户从 1.24.23 直接升到 1.26.4——150 万 chunks 变 0,无任何报错日志;官方客服确认"不允许跳版本",推荐路径 1.24→1.25.latest→1.26.latest;降级回 1.24.23 后依然 0,必须从备份恢复;
来源 2:2025-10,EKS 3 副本集群从 1.22.6 升 1.25.0——Raft schema 迁移不完整,19 个 class 里 7 个报 "shard not found" 不可访问,pod 全部正常启动无报错;staging 单副本升级正常,生产多副本才翻车,最终回滚。官方客服回复升级链要求 1.22.latest→1.23.latest→1.24.latest,并建议"数据量大的话直接搭新集群导数据更省事";
来源 3:2026-10 Dify 官方 troubleshooting 文档——Dify 1.17.1 内置 Weaviate 从 1.27.0 升到 1.39.2(跨 12 个 minor)被明确警告"必须逐个 minor 升级,直接重启会让向量检索静默永久损坏";文档还附带"修复孤儿 LSM 数据"的 shell 脚本——升级后部分 LSM 数据目录会被孤立,需要停机后手工 `cp -a` 搬回原位才能读到。
证据等级
`多方印证(3 个独立来源)`,用户踩坑帖 ×2 + 第三方项目官方迁移文档。
最后核验
2026-10-03

Weaviate 年份:2026

Tablet 数量爆炸:索引点查被拖到 13-15 秒

多方印证
性能问题运维复杂度
一句话
tablet 太多时,连"按索引查一行"这种点查都会被拖到十几秒——分片元数据与后台开销吃掉了整台机器。
窄场景
表数量多(2000 张非 colocated 表)、分区表多(单表 100+ 分区)、或建表时 SPLIT INTO 过度分片,导致单节点 tablet 副本数过万的大集群。
机制
每个 tablet 是一个独立 Raft 组,附带内存中的 tablet 映射、后台 compaction 线程与心跳;tablet 数膨胀 → TServer 内存/线程压力、compaction 排队、tablet 路由查找变慢。用户实测:tablet 少时同一查询 Execution Time 仅 2.178ms,tablet 过万后多数点查 13-15 秒,且空载 CPU 达 15-20%。
生产验证
来源 1:用户 Meteo 2024-12 发帖——43 节点(64C/256GB/6×NVMe),2000 张表,单节点 10,000+ tablet,"select one row by index"类查询多数 13-15 秒;官方人员回复 "You're most likely hitting tablet replica overhead",建议降低 tablet 数,但用户表示 tablet 数与表数成正比,"无法减少";
来源 2:letsbuildsolutions.com 2026-06 独立深挖——单 TServer 2,000-5,000 tablet 可管理,超过 10,000 会出现 compaction 延迟升高与内存压力,建议监控 tserver_tablets_num 并按节点内存封顶。
证据等级
`多方印证(2 个独立来源)`,厂商论坛客户发帖 + 独立技术博客(注:论坛为厂商运营,执笔人为客户)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

YugabyteDB 年份:2026

连接模型:YSQL 继承 PG 进程模型,连接数按节点算

多方印证
运维复杂度
一句话
YSQL 是"真 PG 进程",max_connections 默认 300/节点且按节点算——想撑 10 万连接,官方答案是"部署 350 个节点"或外挂连接池。
窄场景
物联网/网关类长连接、大并发短连接的应用;想直连、不想引入池化层的团队。
机制
YSQL 复用 PG 的 process-per-connection 模型,每个物理后端是独立进程、占常驻内存;max_connections 按节点限制总内存(调大吃内存,挤占文件系统缓存)。长连接持续忙碌时池化层也无法复用(用户原话:pgBouncer 只是复用空闲连接,长期忙碌的连接池化帮不上忙)。
生产验证
来源 6:用户 Meteo 2024-05 售前咨询帖——100+ 地域组、1000+ Go 服务每 5 秒上报,问 10 万+ 并发连接怎么撑(文档 max_connections 默认 300/节点);官方回复:max_connections 是按节点算的,"with the default setting, you can have 100000+ connections if you deploy to 350 nodes";当时内置 Connection Manager 还是 tech preview,建议 PgBouncer/Odyssey;
来源 2:letsbuildsolutions.com 2026-06——"500+ raw connections saturate the TServer processes quickly",建议 PgBouncer 或内置 YSQL Connection Manager(recent versions 已内置)。
证据等级
`多方印证(2 个独立来源)`,厂商论坛客户咨询帖 + 独立技术博客(如实标注:来源 6 为售前咨询帖,非生产事故)。
最后核验
2026-10-03
备注
后续版本内置 YSQL Connection Manager 已 GA(据独立博客,recent versions 已内置),本卡反映 2024-2025 年情况;本卡主题可能与本站 [避坑] 卡重叠。

YugabyteDB 年份:2026

v1 停服强制迁 v2:迁移路这么绕,版本还可能被顺手升级

多方印证
升级迁移
一句话
v1 停服,AWS 给的"自动升级"发生在维护窗口里——如果你的引擎版本 v2 不支持,它会顺手给你升大版本。
窄场景
2024 年底前仍跑 Aurora Serverless v1 的集群(MySQL 5.7 / PG 13 及更早)。
机制
v1 与 v2 是两套架构(v1 搬迁式扩容,v2 常驻式细粒度扩容),没有原地一键切换;官方迁移指南承认迁移"operationally complex"且"需要不可忽视的停机";官方通知写明:到期未迁的集群将在维护窗口被自动升级到 v2,若引擎版本不被 v2 支持则一并升级引擎大版本。
生产验证
来源 6:Datanami 2024-01-08 独立报道——AWS 邮件通知 v1 于 2024-12-31 停止支持(后延至 2025-03-31);JPMorgan 云架构负责人 Ganesh Swaminathan 具名吐槽"告别能自己缩到零的关系型数据库,你好,双倍账单(或更多)";
来源 7:re:Post 用户——"迁移路径极其绕"(migration path is so convoluted),质疑"既然 AWS 能自动迁,为什么现在不给我这个选项"。
证据等级
`多方印证(2 个独立来源)`,独立媒体报道 + re:Post 用户。
最后核验
2026-10-03
备注
v2 自 2024 年底支持缩容到 0(自动暂停),"v2 不能缩零"的批评已部分缓解;但强制迁移本身的运维复杂度不受影响。

Amazon Aurora 年份:2025

Serverless v2:0.5 ACU 常开,"serverless"但账单不睡觉

多方印证
成本账单
一句话
v2 上线时最低 0.5 ACU 全天在线——一个几乎没流量的库,一个月也要交约 45 美元的"占位费"。
窄场景
低频/间歇负载、dev/QA 环境;2024 年 11 月之前(尚无自动暂停)的 v2。
机制
v2 为消除 v1 的冷启动改为常驻式细粒度扩容,代价是最低 0.5 ACU(约 2GB 内存及对应 CPU/网络)永远在线、按秒计费;HN 用户测算约 $45/月保底,Reddit 用户约 $50/月。
生产验证
来源 4:HN 用户——"v2 价格翻倍","1 个开发者付不起 3 个 $45/月的 dev/QA 环境";
来源 6:Datanami 报道——JPMorgan 的 Ganesh Swaminathan:"你好,双倍账单(或更多)";Reddit 用户 zmose:"v2 似乎不能缩到 0,这可是 serverless 本该有的样子?最低也要 $50/月";
来源 8:独立工程师 HoangMNguyen 的 ADR(2025-01)——给 Aurora Serverless v2 配了 min 0 ACU 后实测:暂停后首次连接约 15 秒、单实例单 AZ,最终把库迁到了 Neon。
证据等级
`多方印证(3 个独立来源)`,HN 用户 + 独立媒体引述 + 独立工程师 ADR。
最后核验
2026-10-03
备注
2024 年底起 v2 支持 0 ACU 自动暂停,"不能缩零"已部分缓解;但唤醒约 15 秒、且有预置实例/在 Global Database 中/挂了 RDS Proxy 的集群不会暂停,"serverless"体验仍打折。

Amazon Aurora 年份:2025

GC STW 暂停:整节点停顿打爆尾延迟

多方印证
性能问题
一句话
JVM 的 Stop-The-World 暂停在 Cassandra 上不是"慢一点",而是整节点在集群视角短暂失联——病态读写模式触发的 GC 压力曾逼得一线团队在前面自研 Rust 查询层做限流,结果还是切到了 ScyllaDB。
窄场景
大分区(数百 MB ~ 1GB+)、高频访问热 key、墓碑堆积叠加的集群;CMS/G1 调优未跟上的老版本。
机制
查询命中分区时,Cassandra 把整分区(或大切片)从 SSTable 读出并反序列化为堆内 Java 对象(行、列、时间戳、墓碑全进堆);大分区 + 高并发 = young-gen 迅速撑爆、对象晋升老年代 → 频繁 Minor GC → 堆扛不住时 Full GC 全停顿,停顿期间该节点对集群表现为不可用。病态的租户读写模式会不成比例地放大这一效应(GC 压力 → 整节点 STW → 尾延迟雪崩)。
生产验证
来源 2:2022-12,HN 一线运维者——"pathological read/write patterns…triggering garbage collection pressure that would cause whole node GC STW pauses and severe tail latency";缓解手段包括自研 Rust 查询层(read coalescing + 限流/降载)以及最终"switching to ScyllaDB, a C++ rewrite of Cassandra which is of course void of any garbage collection issues";
来源 3:2025-05,客户生产实录——超 1GB 的大分区"contributing to long GC pauses";Full GC 期间 "Cassandra pauses all activity (Stop-The-World), and shows as node not available"。
证据等级
`多方印证(2 个独立来源)`,一线运维者评论 + 客户生产实录。
最后核验
2026-10-03

Apache Cassandra / ScyllaDB 年份:2025

数据建模反直觉:关系型思维建模,必翻车

多方印证
运维复杂度
一句话
Cassandra 的建模铁律是"按查询建模"而非"按实体建模"——带着关系型范式思维进来的人,几乎注定要经历一次 schema 推倒重来;连文档都要"逐行审计",默认配置几乎没有能直接用的。
窄场景
从关系型转过来的团队;按实体直觉建表、滥用二级索引、集合类型嵌套 UDT 的 schema。
机制
无 join、无子查询,查询必须命中完整分区键;"范式化"在这里是反模式,正确姿势是为每种查询模式建宽表、主动反范式化。二级索引是各节点本地索引,全局查询要 fan-out 到所有节点;物化视图有 read-before-write 开销与一致性边缘情况;`frozen<list<>>` 等集合类型误用会行为怪异。默认配置(分区大小、压缩策略、一致性级别)几乎都要按 workload 重调。
生产验证
来源 6:2015-01,HN 用户——"you can't run Cassandra with almost any of its default settings…It's also almost mandatory to read the internal design docs of cassandra even if you're not the admin…And modelling data is a lot less trivial than it looks - and almost always not what you assume";另一用户:"Cassandra…is very sensitive to how you model and store your database. The whole tombstone saga is never a fun one";
来源 7:2025-06,why amit 迁移实录——"Review the Data Model Like You're the Auditor…review your schema line by line";`frozen<list<>>` "can get weird if misused, especially when combined with nested UDTs";二级索引"just… don't",全部改写为显式反范式化表才"Way more predictable"。
证据等级
`多方印证(2 个独立来源)`,社区用户 + 2025 年迁移实录(2015 年的建模痛点在 2025 年实录中依然成立)。
最后核验
2026-10-03
备注
与现有 [避坑] 卡主题重叠(CQL 无 join、查询必须事先建模 query-first),双方保留。

Apache Cassandra / ScyllaDB 年份:2025

没有内置查询路由/负载均衡:自建集群必须在前面架 chproxy/NGINX

多方印证
运维复杂度
一句话
`max_concurrent_queries` 只在单节点生效——"集群层面没有任何办法限制并发查询数",用户不得不在集群前面维护 HTTP 代理,把 INSERT 打散、把 SELECT 发往可限流节点。
窄场景
自建多节点集群;读写分离、故障转移需求。
机制
chproxy 作者第一人称:"我们不得不在 ClickHouse 集群前面维护两个不同的 HTTP 代理……这很脆弱、很难管,于是就有了 chproxy。" `Distributed` 表只解决分片内数据定位,不解决跨节点并发限流/读写分离/故障转移。Tinybird 2025 年生产博客仍明示 load balancer 是架构关键。
生产验证
—
证据等级
`多方印证(3 个独立来源)`,工具作者 + CTO 生产博客。
最后核验
2026-10-07

ClickHouse 年份:2025

算错"计算类型":同一个集群,DBU 单价差 2–4 倍

多方印证
成本账单
一句话
把定时任务跑在交互式集群上,DBU 单价直接翻 2–4 倍——账单爆炸时,代码和集群规模看起来都"没问题"。
窄场景
交互式(All-Purpose)集群被复用于定时 pipeline;从 notebook 开发环境直接搬上生产的团队。
机制
Databricks 按计算类型分类定价,All-Purpose Compute 的 DBU 费率显著高于 Jobs Compute(约 2–4 倍);Classic/Pro 仓库另有第二张云厂商 VM 账单。Auto-termination 只管"闲置"不管"忙而贵",选错计算类型在成本审计里看起来一切正常。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,具名团队博客 + 个人生产复盘。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Databricks 年份:2025

Delta 小文件:OPTIMIZE 是个隐形运维岗位

多方印证 来源存疑
运维复杂度
一句话
Delta 的小文件不会自己消失——OPTIMIZE/VACUUM/ZORDER 是每个团队都要自建的"隐形运维岗",排重了还会互相踩死。
窄场景
流式/高频增量写入的 Delta 表(Silver 层);多团队共享表。
机制
高频小批量写入天然产生大量小 Parquet 文件,查询变成元数据开销主导;OPTIMIZE 是重写数据的昂贵操作,需要调度、错峰、监控;VACUUM 负责清掉 OPTIMIZE 标记作废的旧文件,不跑则存储一直涨。维护任务本身无中心协调时,不同团队的 OPTIMIZE 会撞车争抢同一张表。
生产验证
—
证据等级
`多方印证(2 个独立来源)[来源存疑:来源 9 的事故叙述发表于面试问答格式文章,其独立生产复盘身份无法确认]`,具名团队博客 + 个人技术文章。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Databricks 年份:2025

自带 BI 太弱,分析被迫外挂 Power BI/Tableau(vs BigQuery + Looker)

多方印证
生态与信任
一句话
多名具名用户评价 Databricks 自带可视化 "average"、"not comparable to Power BI/Tableau"——分析工作流必须依赖外部 BI,而 BigQuery 有 Looker 原生集成。
窄场景
想"一个平台走完数仓+分析"的团队;语义层/指标治理要原生落点的组织。
机制
Databricks Dashboards(原 Lakeview)仍在追赶;语义层无原生落点,指标定义散落在各 BI 工具里。BigQuery + LookML 是"模型即治理"的对照组。
生产验证
—
证据等级
`多方印证(4 个独立来源)`,3 具名复评(2020→2024 口径一致)+ 1 迁移博客。
最后核验
2026-10-07

Databricks 年份:2025

"号称 drop-in replacement":MySQL 8 ↔ MariaDB 早就不是一个东西

多方印证
升级迁移生态与信任
一句话
从 MySQL 8 迁到 MariaDB(或反向),dump 不再是直通车——认证、JSON、GTID、字符集四处硬分化,"无缝替换"只剩历史叙事。
窄场景
MySQL 8.x ↔ MariaDB 10.5+ 之间任何方向的迁移;习惯用 Navicat/mysqldump 直导直灌的团队。
机制
分叉十几年后的硬分化点:①JSON——MySQL 是二进制原生类型,MariaDB 是 LONGTEXT 别名,不给 JSON 列补 `CHECK (JSON_VALID(col))` 后续非 JSON 写入会静默污染;②认证——MySQL 8 默认 caching_sha2_password,MariaDB 11.4 之前没有兼容插件,用户密码要轮换重建;③GTID——MySQL 的 `uuid:seqno` vs MariaDB 的 `domain-server-sequence`,格式不互通,跨库复制无平滑路径;④字符集——`utf8mb4_0900_ai_ci` 在 MariaDB 11.4.5 之前根本不存在;⑤sqldump 互通已死——来源 1 原话:"drifted apart drastically and there is no longer a direct pathway from one to the other without using enterprise solutions"。
生产验证
来源 1:infophreak(SH3LL)MariaDB 11→MySQL 8 迁移指南,开篇即承认两者 sqldump 曾互通、如今"漂移严重、无直接路径",只能走应用层导出/导入;
来源 2:CSDN 2025-11,MySQL 8.0→MariaDB 10.5 签到系统迁移——导表第一条就报 `1273 - Unknown collation: 'utf8mb4_0900_ai_ci'`,随后 ALTER 权限不足、外键约束拦截、`Illegal mix of collations` 连环坑,全程手工修脚本。
证据等级
`多方印证(2 个独立来源)`,个人博客/迁移指南 ×2。
最后核验
2026-10-03
备注
与现有 [避坑] 卡主题重叠(档案吐槽清单已含 GTID/JSON/认证三行),本卡补上真实迁移现场的连环坑细节。

MariaDB 年份:2025

SkySQL/Xpand 说砍就砍:云业务是战略,客户是成本

多方印证
生态与信任
一句话
2023 年 10 月 MariaDB plc 砍掉 SkySQL 与 Xpand、裁员 28%,把"战略级产品"的用户(包括跑着 50 个 Xpand 节点的三星)晾在迁移计划上。
窄场景
2020–2023 年间采纳 MariaDB SkySQL / Xpand 的企业客户。
机制
SPAC 上市后财务崩盘(市值从 4.45 亿美元跌到约 1000 万美元,NYSE 发出退市警告),公司为降本砍掉"未来增长引擎":SkySQL(2020 年发布,对标云厂商 RDS)与 Xpand(2021 年加入的分布式后端,5 个月前刚推出 PG 兼容前端)。SEC 文件措辞是"帮助现有客户迁出"——即断供。
生产验证
来源 6:The Register 2023-10,引 SEC 文件——停售 SkySQL+Xpand,裁员 84 人(28%),靠 2600 万美元、年息 10% 的贷款续命;三星 50 个 Xpand 节点、日均数百亿事务受影响;
来源 7:InfoWorld 2024-02,分析师 Tony Baer(dbInsight):"客户被迫对公司失去信心……会担心自己的投入会不会是下一个被砍的";Matt Aslett(Ventana/ISG)称影响"深远";同期微软宣布 Azure Database for MariaDB 于 2025-09-19 退役。
证据等级
`多方印证(2 个独立来源)`,独立媒体 ×2(含具名分析师引述)。
最后核验
2026-10-03
备注
事件已属历史(公司 2024 年私有化重组),但"战略产品说砍就砍"的信任折价仍在;与档案判决中"MariaDB Cloud 2025-08 买回重建、连续性风险待验证"主题相关。

MariaDB 年份:2025

CVE-2025-64513:一个 HTTP header 就绕过全部鉴权

多方印证 已修复于 2.4.24
生态与信任
一句话
Milvus Proxy 把"内部组件流量"和"外部客户端流量"的区分押在一个客户端可控的 header 上——伪造该 header,即可无密码拿到整个集群的管理员权限。
窄场景
Proxy/gRPC 端口暴露在不可信网络、且版本在 2.4.24 / 2.5.21 / 2.6.5 之前的任何部署;开了鉴权也挡不住这次绕过。
机制
Proxy 的认证拦截器读取请求元数据中的 `sourceID`,base64 解码后与硬编码常量 `@@milvus-member@@` 比对;命中则判定为内部组件流量,直接跳过标准鉴权。该校验只认 header 值、不验证连接的真实身份,因此任何能向 Proxy 发请求的人都能伪造。官方公告明确:攻击者可借此读写删数据、管理数据库与集合;来源 2 的复现在 v2.4.23 上用伪造 header 成功建库,v2.4.24 上同样的请求被拒绝。
生产验证
来源 1:官方安全公告——未认证攻击者可绕过 Proxy 全部鉴权机制,获得集群完全管理权限;影响所有受影响版本用户,强烈建议立即升级;
来源 2:2025-11-13 由字节跳动 Volcengine 团队负责任披露,CVSS 9.3;披露与补丁同步发布;
来源 3:独立漏洞库交叉印证影响版本(2.4.24 / 2.5.21 / 2.6.5 之前)与修复版本一致,NVD 收录日期 2025-11-10。
证据等级
`多方印证(3 个独立来源)`,官方安全公告 ×1 + 独立安全分析 ×2。
最后核验
2026-10-03
备注
已修复于 2.4.24 / 2.5.21 / 2.6.5(2025-11),按规则不删除、作"已修复"标注。来源 2 系竞品厂商(CyborgDB)博客,技术细节与 GHSA 一致,其营销性结论("应用内加密才是正解")已剔除未引用;来源 3 页面自带 AI 生成声明,仅作版本与日期交叉印证。本卡主题可能与本站 [避坑] 卡重叠。

Milvus 年份:2025

改个分词器 = 重建整个集合:Milvus 没有 ALTER,只有"复制-交换"

多方印证
升级迁移
一句话
在 Milvus 里调个 BM25 analyzer 参数、改 schema 属性,没有原地 ALTER——标准做法是全量复制到新集合、校验行数、改名交换、旧集合留作备份,迁移期间应用还得停写。
窄场景
用了全文/BM25 稀疏索引需要调 analyzer 参数,或任何需要变更 schema 属性(非简单加减字段)的集合。
机制
Milvus 的 `analyzer_params` 等 schema 属性不支持原地变更(开着 text match 时连关都关不掉)。独立项目 OpenRAG 的迁移文档记录的标准流程是"重建集合":把行复制到 `<collection>_v2_rebuild`、校验行数、改名交换、旧集合保留为备份;复制读的是快照,迁移中途写入的行会丢失(行数对不上则中止重试),所以必须先停应用;两份拷贝同时存在,需预留约 2 倍磁盘。
生产验证
来源 5:2025-11 Software Finder 认证客户评价(中型企业用户 Issa M.)原话:"Changing collection schemas requires going through a migration process and that can be fairly complicated and pretty time-consuming to handle."(引用客户原话);
来源 6:Linagora OpenRAG 迁移文档——版本 2 的迁移 "rebuilds the collection rather than altering it",并列出停机、双倍磁盘、停应用、先备份等注意事项。
证据等级
`多方印证(2 个独立来源)`,认证客户评价 ×1 + 独立开源项目迁移文档 ×1。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Milvus 年份:2025

执行计划说翻就翻:复杂 SQL 计划突变,只能靠 DBA 人工干预

多方印证
性能问题
一句话
复杂语句的执行计划容易突然变化导致性能问题,稳住计划要靠管理员手工绑定。
窄场景
多表关联、分区表、带复制表的复杂查询;统计信息/参数变化频繁的业务库。
机制
优化器代价评估依赖分区采样(partition_index_dive_limit)与统计信息,采样分区小或数据为空时易误判;同一 SQL 模板在不同参数下复用同一计划(计划缓存),长尾参数直接翻车;含复制表的 SQL 在特定版本下无法复用执行计划;local rescan 规则曾错误裁剪掉低代价的 NLJ 计划。官方给出的解法是执行计划绑定(plan binding)把计划"钉死",等于把优化器的活转嫁给 DBA。
生产验证
来源 1:Gartner Peer Insights 验证用户原话——"Execution Plan: Complex statement execution plans are prone to sudden changes, leading to performance issues and requiring administrator intervention.";
来源 2:百丽/卢文豪 2025-11-25——执行计划问题涉及 partition_index_dive_limit 采样误判、同一计划用于不同参数(用 /*+USE_PLAN_CACHE(NONE)*/ 规避但引入硬解析 CPU 开销)、IN 参数过多导致硬解析慢(调 _inlist_rewrite_threshold);另有三个版本 bug:local rescan 计划不优(已修复于 V4.2.5.3)、tablegroup 调整遇空分区导致均衡任务卡住(已修复于 V4.2.5.4)、含复制表 SQL 无法复用执行计划(已修复于 V4.2.5.5)。
证据等级
`多方印证(2 个独立来源)`,Gartner 验证用户评价 + 具名客户生产复盘。
最后核验
2026-10-03

OceanBase 年份:2025

Terraform provider:社区野路子扛了多年,官方 v1 直到 2024 年底才来

多方印证 已修复于 v1.0.0
运维复杂度
一句话
2022 年实战文:"the Snowflake provider for Terraform is documented, but you will come to find out that not all the resources are updated or that some contain copy-paste bugs sometimes. Just don't take everything for granted";背景是 Snowflake 官方长期没有自己的 provider,全靠社区(chanzuckerberg)的野路子实现;Snowflake-Labs 接手后 0.x 一路 breaking change,有用户在 GitHub issue 直言:"It also degrades our overall confidence in using the Snowflake terraform provider in general because it shows that Snowflake is not maintaining a stable interface."——直到 2024 年底 v1.0.0 发布、2025 年 4 月 GA,官方支持才算落地。
窄场景
用 Terraform 管 Snowflake 的平台团队;2024 年底之前上 IaC 的用户。
机制
IaC 这条线用户自己凑合了好几年:社区实现→Snowflake-Labs 接手→0.x breaking change不断→v1.0.0(2024 年底)→GA(2025-04)。
生产验证
来源 57:dataroots dev.to 实战文,2022-05——最早一批系统记录 provider 坑的独立文章;
来源 58:Snowflake-Labs 官方仓库 issue(约 2025-02),用户原话见上;
来源 59:官方 ROADMAP,2025-04-10 GA 公告。
证据等级
`多方印证(3 个独立来源)`,咨询公司实战文 + 用户 issue 原话 + 官方 ROADMAP 时间线。
最后核验
2026-10-07
备注
缺口状态:已补上于 v1.0.0(2024 年底发布)、GA 于 2025-04;补上之前用户凑合多年,故保留收录。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2025

延迟税:ACID 永远在线,低延迟永远不在线

多方印证
性能问题
一句话
TrueTime 的外部一致性不是免费的——每次提交都要"等时钟不确定性过去",跨区写再叠加共识往返,写延迟天然比单机库高一个数量级。
窄场景
写密集、对写入延迟敏感、跨区部署的 OLTP;指望"全球一致还和本地 PG 一样快"的团队。
机制
TrueTime 返回的是时间区间 [earliest, latest](ε 通常 1–7ms);提交时取 commit timestamp s = latest,然后 commit-wait 到全系统时钟都越过 s 才向客户端确认——每次写入固定支付约 2ε 的等待;跨区还要再付 Paxos 多数派复制的 WAN 往返。读默认是强读,跨区强读可能还要先找 leader 确认最新位点。
生产验证
来源 1(HN 2023):"It's the best, but it's far from perfect. Default mode is non-ACID, and going serializable mode makes it very slow. Spanner is always ACID... but always slow.";
来源 4(Medium 2025-04,独立从业者):"Spanner's TrueTime API enables global consistency... but it also introduces some latency, especially for global writes",并给出设计建议 "Be mindful of cross-region writes — writes that span regions will always incur higher latency due to consensus and time synchronization"。
证据等级
`多方印证(2 个独立来源)`,HN 用户 + 独立从业者博客。
最后核验
2026-10-03

Google Spanner 年份:2025

按核许可:想读扩展或加硬件,先给微软写支票

多方印证 来源存疑
成本账单
一句话
2012 年从按 socket 改按核计费后,Always On 读扩展的数学就崩了——5 节点 AG 光许可就要 41 万美元,客户直接把 AG 从项目清单上划掉。
窄场景
想用 AG 可读副本做读扩展、或靠堆硬件掩盖性能问题的团队;ISV 客户(最终用户要为每核买单,堆内存不再便宜)。
机制
Enterprise 按核许可(当前约 $7k/核),AG 的每个可读副本都要全额许可(仅被动故障转移副本可免)。Brent Ozar 算过账:2-socket×6 核的服务器组 5 节点 AG,许可费 $412,440——"简直不可想象"。Standard 版又有 16 核/128GB 上限(后放宽到 24 核),硬件堆到头就只能跳 Enterprise。于是 DBA 的经典动作——"加内存掩盖问题"——变成了先写支票的财务决策。
生产验证
来源 1:Brent Ozar 2011-12 与客户访谈——客户两类反应,一类直接把 Availability Groups 从 2012 年项目清单划掉("pricing just makes this a no-go"),一类 ISV 抱怨客户"没法花 $1000 加内存就获得好性能";
来源 2:2025-10 个人转库实录——"SQL Server's licensing model quickly became restrictive… Scaling up meant moving to costly editions",免费 Express 版又有库大小/内存/CPU 三重上限,规模一涨就被迫跳付费版。
证据等级
`多方印证(2 个独立来源)`,具名顾问客户现场证据 ×1 + [来源存疑]个人博客 ×1
最后核验
2026-10-03
备注
与现有 [避坑] 卡「授权复杂度 —— 微软式"税"」主题重叠;该卡曾诚实标注"独立生产账单故事缺失",本卡补充了具名顾问的客户场景与报价(5 节点 AG $412,440),可视为该证据缺口的一次填补。另:来源 1 发表于 2011 年,但按核计费模型自 2012 年起未变(2025 年定价页仍为 Enterprise $13,748/2 核包),属结构性问题而非已修复缺陷,故保留收录。

Microsoft SQL Server 年份:2025

Linux 版"二等公民":首发功能缺席,性能/兼容弱于 Windows

多方印证 来源存疑
性能问题生态与信任
一句话
SQL Server on Linux 跑在 SQLPAL 兼容层上——2017 年首发就没有 SSRS/SSAS/复制/Stretch DB,八年后用户仍在抱怨 Linux 版性能和兼容性"明显弱于 Windows"。
窄场景
Linux 标准化企业、容器化部署团队;从 Windows 迁移到 Linux 指望"同一份许可换个 OS"的用户。
机制
Linux 版通过 SQLPAL(Platform Abstraction Layer)把 Windows 库调用翻译到 Linux,SOS 内存/线程管理直接调 Linux API。架构上能跑,但周边生态长期缺席:2017 年首发无 SSRS/SSAS/机器学习服务、无复制(HA 场景除外)、无 Stretch DB、FileTable 不工作、管理工具基本只有 Windows 版。微软当时给 Linux 版定的性能目标只是"达到 Windows 的 75% 以上"。
生产验证
来源 3:The Register 2017-09 首发报道——缺席功能清单如上;微软总经理 Rohan Kumar 对 SSAS/SSRS 的回应是"问题是,有需求吗?"("What's the demand?"),暗示短期不会补;
来源 2:2025-10 个人转库实录——"SQL Server does support Linux, but performance and compatibility were noticeably weaker compared to Windows",这是其转向 PG 的原因之一。
证据等级
`多方印证(2 个独立来源)`,独立媒体报道 ×1 + [来源存疑]个人博客 ×1
最后核验
2026-10-03
备注
2017 年的具体缺席清单随版本已部分收窄(如复制、SQL Agent 后续补上),但"Linux 版弱于 Windows"的抱怨从 2017 持续到 2025,故保留收录;本卡仅针对 SQL Server on Linux,不涉及 Windows 版。

Microsoft SQL Server 年份:2025

Azure SQL MI:"永远最新版"的营销,现实是 2019 的功能 2025 年还没有

多方印证
成本账单生态与信任
一句话
微软官网说 Managed Instance"永远运行最新版 SQL,不用担心升级"——Kendra Little 逐条审计发现,2022 的旗舰功能 MI Link 上线一年还在排队,2019 的 tempdb 元数据优化到 2025 年 11 月都没上,错误日志故障转移就丢。
窄场景
指望"lift & shift 上云就不用管版本"的团队;用到 Filestream/复制/事件通知/CHECKDB 修复选项等边缘功能的库。
机制
MI 是"近全功能"的 PaaS,但"近"字很贵:tempdb 加文件可以、调文件大小不行(G1 时代还要靠建超大文件换 IOPS,多花的存储照单全收);错误日志不持久化,故障转移就可能丢;DBCC CHECKDB 的 REPAIR 选项、单用户模式、数据库快照、修改时区全都不支持;实例关不掉——没有 Serverless 档,闲置也按 24×7 计费。Kendra 的原话(引):"Isn't it always a little creepy when it's easier to get into something than it is to get out?"(进去容易出来难,不觉得瘆人吗?)
生产验证
来源 11:Kendra Little 2023-12(2025-11 更新)——逐项列出缺席功能:2022 的 IQP 特性缺席(2025 年 11 月大部分已补,但 Query Store 优化计划强制仍无)、2019 的内存优化 tempdb 元数据缺席、错误日志不持久化、100 库上限、无最小日志恢复模式;并点名营销话术与现实的落差;
来源 12:Red9 咨询公司 2024——"写这篇文章时,我们在 Red9 没有一个客户在用 SQL Managed Instance";"限制让现有应用迁移变得困难(对大型复杂负载,大多数客户根本不会考虑)"。
证据等级
`多方印证(2 个独立来源)`,独立顾问功能审计 ×1 + 咨询公司客户侧观察 ×1
最后核验
2026-10-03

Microsoft SQL Server 年份:2025

升级后执行计划回归:有合理索引却走全表扫描

多方印证
性能问题升级迁移
一句话
升级到 v7.5.x 后,优化器对部分 SQL 倾向选全表扫描或错误索引,215 亿行表的查询 60 秒被 kill,强制绑索引只要 0.4 秒。
窄场景
从 v4/v5 老版本升级到 v7.5.x 的生产集群;超大表点查、按时间范围聚合的查询。
机制
优化器成本模型与统计信息解读随大版本变化(v7.5.x 的行数估计/代价偏好与 v4/v5 不同),老版本"恰好正确"的计划在新版本翻转。TiDB 没有 Oracle SPM 式开箱即用的计划基线冻结,得物团队的解法是手动绑定执行计划(SPM)或调系统变量(`tidb_opt_prefer_range_scan`、`tidb_opt_objective=determinate`),等于每个回归 SQL 都要人工兜底。
生产验证
来源 1:得物 2025 年升级实录——§5.1,215 亿行表、有合理索引却走全表扫描,60 秒被 kill,绑索引仅 0.4 秒;§5.2,聚合查询 v4.0.11 跑 12 秒→v7.5.6 跑 2 分 32 秒;
来源 2:asktug 1047626(2025)——生产 v7.5.6,215 亿行表合理索引下优化器倾向全表扫描,重收统计信息无效;
来源 3:asktug 1046610(2025-09)——生产 v7.5.6 聚合查询计划回归,评论区多方印证("线上已经多次 SQL 走错索引导致应用抖动"、"7.5.6 下执行计划确实有问题")。
证据等级
`多方印证(3 个独立来源)`,具名生产复盘 ×1 + 社区生产问题帖 ×2(含评论区多方印证)。
最后核验
2026-10-03
备注
评论区有用户反馈 v8.5.3 下同类问题已正常,属版本回归而非架构缺陷,保留收录并如实标注。

TiDB 年份:2025

自建起步 8 节点:分布式税还没跑业务就先交了

多方印证
运维复杂度成本账单
一句话
自建 TiDB 起步最少 3 PD + 3 TiKV + 2 TiFlash(8 节点),比同规模的 MySQL/MongoDB/PostgreSQL 贵得多——规模还没上来,账单先上来了。
窄场景
自建部署、中小规模业务;用"MySQL 替代"的预期做预算的团队。
机制
TiDB 是多组件分布式架构,最小生产拓扑天然就是多节点:PD 管元数据与调度、TiKV 存数据(三副本)、TiFlash 列存、再加监控备份全套。节点数、SSD、网络都是硬成本,且三副本存储冗余让"每 GB 有效数据"的硬件成本天然高于单机库。
生产验证
来源 4:PeerSpot 具名评价,Mafiree DBA——"自建最少 3 PD + 3 TiKV + 2 TiFlash,比 MySQL/MongoDB/PostgreSQL 更贵"(引自原文大意);
来源 1:得物 DBA 团队 2025 年升级实录引言——"能用分库分表能解决的问题尽量选择 MySQL,毕竟运维成本相对较低、数据库版本更加稳定、单点查询速度更快、单机 QPS 性能更高这些特性是分布式数据库无法满足的"(引自原文)。
证据等级
`多方印证(2 个独立来源)`,具名用户评价 ×1 + 具名生产复盘引言 ×1。
最后核验
2026-10-03
备注
与现有 [避坑] 卡「小数据量强行上 TiDB 是过度设计」主题部分重叠(该卡已含最小生产拓扑的运维成本论述)。

TiDB 年份:2025

版本 EOL 二选一:停机升级,或者自动开始交 Extended Support 费

多方印证
升级迁移成本账单
一句话
Aurora 的大版本 EOL 不给你"无痛"选项——PG 版是"关机、升级、重启,可能重启好几次";MySQL 版是"不升就自动 enroll 进按 vCPU 计费的 Extended Support"。
窄场景
跑在 PG 11(2024-01-31 EOL)或 Aurora MySQL 2.x(MySQL 5.7,2024-10-31 EOL)上的生产集群。
机制
Aurora 的大版本升级是停机式原地升级(时长取决于对象数量);AWS 对 MySQL 5.7 采用"到期自动 enroll Extended Support、下个月自动开始按 vCPU 每小时收费",最长收到 2027-02-28——不主动操作就等于默认开始付费。
生产验证
来源 10:The Register 2023-02-14 独立报道——AWS 致 Aurora PG 用户邮件原文:"升级过程将关闭数据库实例、执行升级、重启实例……可能重启多次";Percona 的 Charly Batista 评价"把迁移的成本和负担推给用户很方便";
来源 11:AWS re:Post 官方公告——2024-10-31 后未升级的 Aurora MySQL 2.x 自动进入 RDS Extended Support,2024-12-01 起自动收费、按 vCPU 每小时计价,直到用户升级或删库。
证据等级
`多方印证(2 个独立来源)`,独立媒体报道(PG 线)+ AWS 官方公告(MySQL 线)。
最后核验
2026-10-03
备注
来源 10 中 PlanetScale CEO Sam Lambert 为直接竞争者,其"embarrassingly low bar"等评价为竞争者口径,仅采信邮件原文与事实部分。

Amazon Aurora 年份:2024

"免费数据集"的 $14,000 账单:2 小时烧掉 2.5PB

多方印证
成本账单
一句话
HTTP Archive 数据集免费开放,但查询费算在查询者头上——一个 Python 脚本 2 小时跑出 $14,000,零预警。
窄场景
用 Python/官方客户端库(而非网页控制台)跑 BigQuery 的新手、学生、研究人员;成本控制默认关闭的项目。
机制
BigQuery 按量计费 $6.25/TiB,费用记在发起查询的项目上,与数据集是否"公开免费"无关;网页 UI 会在运行前显示"本次查询将处理 X 数据"的预估,但 Python 客户端没有这个机制;cost controls(自定义配额/熔断)默认不开启。用户脚本 2 小时处理了约 2.5PB,按单价折合约 $14,000。
生产验证
来源 1:用户 Tim 在 HTTP Archive 论坛的原帖(2024-02-20)——"被收 $14,000,zero warning whatsoever,Google 不给退";他指出用官方 Python 库跑查询时"unlike the web ui there's no mechanism to show costs";提议默认加一个 $5k 熔断器,手动确认才继续;
来源 2:The Register 2024-02-22 独立报道——印证了原帖内容与金额(2.5PB × $6.25/TiB),并引述维护者回应(已在 FAQ 加显式警告、99% 用户只看免费月报)。
证据等级
`多方印证(2 个独立来源)`,具名论坛原帖 + 独立媒体报道。
最后核验
2026-10-03

Google BigQuery 年份:2024

没有原生 Upsert:ReplacingMergeTree 是"最终一致"的去重,不是主键更新

多方印证
生态与信任
一句话
ClickHouse 没有 `INSERT ON CONFLICT`/原生主键 upsert——官方推荐的 ReplacingMergeTree 只是"写多版本、后台异步合并",不加 FINAL 会读到重复行;Kafka 重试导致重复消息,"clickhouse will create a new row for duplicated message"。
窄场景
CDC、Kafka 重试场景;从 PG/MySQL/Doris(Unique Key)迁来的用户。
机制
ReplacingMergeTree 的去重发生在后台 merge 时,查询时若不加 FINAL 新旧行并存;加了 FINAL 则查询期付去重税。没有开箱即用的幂等写入语义——用户被迫在写入前先查库判重。
生产验证
—
证据等级
`多方印证(2 个独立来源)`。
最后核验
2026-10-07

ClickHouse 年份:2024

两次换证:Apache 2.0 → BSL → 专有 Enterprise

多方印证
生态与信任
一句话
2019 年刚把 Apache 2.0 换成 BSL,2024 年连 BSL 的"开源遮羞布"都不要了——自托管只剩专有 Enterprise 许可,免费与否看你年营收过没过 1000 万美元。
窄场景
自托管部署的团队;把 CockroachDB 当"开源 Postgres 替代品"选型的公司;年营收接近或超过 1000 万美元门槛的企业。
机制
许可证是信任锚。BSL 1.1 虽非 OSI 开源许可,但至少有"3 年后转 Apache 2.0"的滚动回退条款(来源 5);2024-11 的 24.3 起 Core 退场,自托管统一为 Enterprise 许可:年营收 <1000 万美元免费(须每年自证),之上按 CPU 核数付费(来源 1、4)。代码仍"可见"但不可自由使用——从"fauxpen source"变成纯专有 + 免费试吃(来源 2)。
生产验证
来源 1:Percona 联创 Peter Zaitsev 称"CockroachDB 完成了从开源的彻底转向……又一个 Oracle";OpenUK CEO Amanda Brock 称"Cockroach 一直是开源许可的抱怨者,对其自有产品建不起开源商业模式不意外"(2024-08);
来源 2:HN 用户原话被引用——"Enterprise 版的问题是它很贵、销售导向,咬一口可能就是跟未来的 Oracle/房东型厂商签卖身契";另一条——"VC 支持的开源项目迟早都这样,开源只是诱饵,等投资人要增长就扯地毯"(2024-08);
来源 3:OSI 执行董事 Stefano Maffulli 称中途换成 BUSL 这类限制性许可是"从用户社区脚下扯地毯"、"打破开源社区信任的 switcheroo";Yugabyte 创始人 Karthik Ranganathan 称这是"short term thinking","开发者现在会犹豫选 CockroachDB,因为他们知道一旦长大撞上营收门槛,用法就要变"(2024)。
证据等级
`多方印证(5 个独立来源)`,独立媒体 ×4(含具名第三方评论)+ 2019 年换证历史报道。
最后核验
2026-10-03

CockroachDB 年份:2024

免费版长期无增量备份与 PITR:以弹性著称的库,丢数据类故障零方案

多方印证 已修复于 24.3
运维复杂度
一句话
节点挂了能自愈,数据写错了/删错了呢?免费版长期没有增量备份和 PITR——HN 生产用户的原话:"有一类错误/故障,(免费版至少)是 ZERO solution。"
窄场景
用免费 Core 跑生产、指望"弹性=备份"的团队;需要延迟只读副本做误操作兜底的场景。
机制
Raft 解决的是节点故障,不是逻辑错误。增量备份、延迟副本、PITR 这些"防人祸"能力长期是 Enterprise 付费功能;免费 Core 用户只有全量备份可用,误删/误写只能认。讽刺的是:一个以 resilience 为招牌的数据库,免费档对最常见的生产事故(人为误操作)没有恢复手段。
生产验证
来源 11:2022-11 HN 生产用户——"免费版刚开始时备份基本不可用;现在改善了,但对一个以弹性为卖点的数据库,免费版仍有严重短板:没有只读副本/延迟只读副本,没有增量备份,做不了 PITR……有一类错误/故障是 ZERO solution";
来源 4:2024-08 SD Times——24.3 起所有用户(含免费)可用此前付费才有的 cluster optimization、disaster recovery、backup、streaming 等高级功能。
证据等级
`多方印证(2 个独立来源)`,HN 生产用户 + 独立媒体(前后对照)。
最后核验
2026-10-03
备注
已修复于 24.3(2024-11,Enterprise Free 全量开放备份/容灾能力),按规则保留收录并标注修复版本。

CockroachDB 年份:2024

集群启动:5 分钟是常态,35 分钟"每周几次"

多方印证
性能问题运维复杂度
一句话
交互式/任务集群冷启动 5–6 分钟是常态,随机飙到 20–35 分钟"每周几次"——跑 5 分钟的任务要付 11 分钟甚至 35 分钟的账。
窄场景
Azure 上的 job compute;短时高频任务;被 Spark Connect 破坏性变更卡住、切不到 shared/serverless 的团队。
机制
经典集群每次从零拉 VM、装库、起 Spark;启动阶段 DBU 不计费但云厂商 VM 照收钱;启动时长受云厂商容量、网络、init 脚本多重因素影响,方差大。Serverless 靠 warm pool 把启动压到秒级,但那是另一套计费。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,官方社区用户实测 + 独立基准实验。
最后核验
2026-10-03

Databricks 年份:2024

存储过程缺失多年,2025 年中才补上——且仅限 Unity Catalog

多方印证
升级迁移生态与信任
一句话
2022 年 SQL Server 迁移用户问 DECLARE/存储过程等价物,被告知"用 Python 拼 SQL 字符串";具名 `CREATE PROCEDURE` 2025-06/07(DBR 17.0)才来,且仅 UC 可用。
窄场景
从 SQL Server/Oracle 迁移、重度依赖存储过程的团队;想给 Power BI 暴露可调存储过程的场景。
机制
Databricks SQL 长期没有过程化 SQL 与具名存储过程,2024 年仍有人问"Power BI 可调存储过程等价物"被建议用 view 凑合。补上后仍有前提:仅 Unity Catalog,游标等完整能力要 DBR 18.1+。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,修复版本有官方 release notes 证据。
最后核验
2026-10-07

Databricks 年份:2024

Atlas Data API / Device Sync 说砍就砍:生产系统一年内被迫迁移

多方印证
升级迁移生态与信任
一句话
MongoDB 于 2024-09 宣布 Atlas Data API、Custom HTTPS Endpoints、Device Sync(Realm 同步)停服(2025-09 EOL),大批已上线生产系统的客户被迫在一年内重写,社区出现信任危机。
窄场景
基于 Atlas App Services(Data API/HTTPS endpoints/Functions/Realm 同步)构建生产系统的团队,尤其是移动端与独立开发者。
机制
App Services 是 MongoDB 曾主推的 serverless 配套层,客户按官方引导把鉴权、函数、同步建在上面;停服后无官方迁移路径(密码无法导出、用户需重建),替代方案(如 Ditto)在当时尚未就绪。厂商战略转向的成本全部由客户承担。
生产验证
MongoDB 官方论坛停服公告帖(2024-09-11)下多名独立客户留言:"You lost trust"(14 赞)、全站基于 HTTPS endpoints + functions 的电商站(9 赞)、靠订阅收入的 iOS 开发者担忧迁移期用户流失、4 年 3 万用户的认证体系无迁移方案。
证据等级
`多方印证(4+ 独立客户)`(官方论坛公告帖内多名独立客户留言)
最后核验
2026-10-03

MongoDB 年份:2024

审计是"销售赋能工具":合规团队的 KPI 连着销售提成

多方印证
成本账单生态与信任
一句话
四名前 Oracle 许可证合规(LMS)高管具名作证:审计的产出直接交给销售谈判,销售部门在审计流程中的权力远大于审计团队。
窄场景
任何规模的 Oracle EE 客户;合同续签前、架构变更(虚拟化/上云/并购)后是高发期。
机制
LMS 审计发现"不合规项"后并不止于补款,而是作为销售谈判杠杆——客户常被引导用"买更多许可/转 Oracle 云"来"解决"审计问题。2020 年 City of Sunrise 消防员养老基金诉 Oracle 的投资者诉讼即指控 Oracle 以审计威胁迫使客户上 Oracle 云(Oracle 否认)。授权咨询顾问另指出,Oracle 销售与审计团队会以"健康检查"等名义从客户会议中收集许可缺口情报(来源 13)。
生产验证
—
证据等级
`多方印证(2 个独立来源)`,具名前 Oracle 高管 ×4 + 社区客户多方呼应。
最后核验
2026-10-03
备注
主题可能与现有 [避坑] 卡(许可证审计类)重叠。

Oracle Database(甲骨文) 年份:2024

Database@Azure:上了 Exadata 就被强制 RAC,算力需求翻倍

多方印证
成本账单
一句话
Oracle Database@Azure 跑在 Exadata 上,而 Exadata 必须开 RAC——从单实例迁过去,算力需求直接翻倍,被许可专家称为"运行 Oracle 数据库最贵的方式"。
窄场景
考虑把 Oracle 迁到 Azure 的 Database@Azure 服务的客户;从单实例/非 RAC 架构迁移时。
机制
Database@Azure 的底层是 Oracle Exadata,而 Exadata 平台要求启用 RAC;RAC 要求多节点,客户从单实例迁过去需要约两倍的计算容量;BYOL 许可按 2 vCPU 折 1 个 processor 计算。独立许可专家 Eric Guyer(Remend)原话:"Any customer moving from another Oracle database would require twice the compute capacity, 'if not more'... That is the most expensive way to run an Oracle database"。
生产验证
来源 9:The Register 2024-02-05 报道——前 Oracle LMS VP Craig Guarente 指出 Oracle 云许可文件"none of this is contractual; it's just stuff Oracle makes up"(都不是合同条款,是 Oracle 自己编的);Eric Guyer 给出"两倍算力"的量化判断。Oracle 官方回应称 Database@Azure 按 OCI 定价。
证据等级
`多方印证(2 个独立来源)`,独立许可专家 ×2(均曾长期从事 Oracle 许可工作)。
最后核验
2026-10-03

Oracle Database(甲骨文) 年份:2024

主键只是个"建议":声明了也不强制,重复数据自己查

多方印证
运维复杂度生态与信任
一句话
Redshift 接受 PRIMARY KEY/FOREIGN KEY/UNIQUE 语法,但一律不强制——ETL 写重复了不会报错;更坑的是优化器会"相信"这些约束,声明错了查询结果直接静默算错。
窄场景
从传统 RDBMS 迁移过来、习惯靠数据库保唯一性的团队;CDC 重放、幂等没做好的管道。
机制
约束纯信息性(informational),只给优化器做计划用;唯一性必须由 ETL/应用层保证,需自建去重校验。AWS 文档原话:"Do not define primary key and foreign key constraints unless your application enforces the constraints."(来源 8,已打开核实)
生产验证
来源 4:PeerSpot 2024-05-09,FNU AKSHANSH(Senior Data Engineer,平台标注 Real User)——"Redshift does not have primary-key tools. The vendor must consider adding them.";且元数据难取,"too many layers to get simple information";
来源 5:TrustRadius 认证用户评论,Cons 明写 "Missing option to restrict duplicate records";
来源 3:同一 HN 讨论串(2022-05)匿名评论——"Our most shocking discovery on Redshift was that primary key constraints are not honored."
证据等级
`多方印证(3 个独立来源)`,具名点评用户 + 点评平台认证用户 + HN 匿名评论。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Amazon Redshift 年份:2024

2024 失窃事件:Snowflake 怪客户没开 MFA,但当时管理员根本没有强制开关

多方印证
生态与信任
一句话
2024 年 4–6 月 UNC5537 用窃取的凭证登录约 165 家 Snowflake 客户租户,Snowflake 的公开口径是"客户没开 MFA"——但当时租户管理员根本没有"一键全员强制 MFA"的开关,"it cannot be enforced on users by the admin of the tenant"(租户管理员无法对用户强制执行),等于把开不开 MFA 交给每个用户自己决定。
窄场景
2024 年中的所有 Snowflake 租户;用用户名+密码(未接 SSO)的用户。
机制
平台侧缺失租户级 MFA 强制能力,安全责任被推给终端用户;讽刺的是 Snowflake 自己承认攻击者用"前员工的个人凭证"攻破了该员工名下的 demo 账号——同样因为"not behind Okta or MFA",而 Snowflake 对记者的十几个问题至少六次拒绝回答。
生产验证
来源 26:Hacker News 2024-06-02 社区讨论(49 条评论)——有租户安全实施经验的从业者:"I generally dislike Snowflake in this case and think they're attempting to deflect the blame off themselves for the architecture you get forced into as a tenant";
来源 27:InformationWeek 2024-06 引述 Mitiga CTO Ofer Maor、Stern Security、IP Architects、Silverfort CISO 四家独立信源,一致确认管理员无法强制 MFA;
来源 28:TechCrunch 2024-06-07 调查报道(仅作背景)。
证据等级
`多方印证(2 个独立来源 + 4 家专家信源)`,社区一线批评 + 媒体引述的多家独立安全专家。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2024

升级优化器回归:2019 的 UDF 内联翻车,2022 的 CE 估计仍不准

多方印证 已修复于 2019
性能问题升级迁移
一句话
每次大版本升级都动优化器——2019 的标量 UDF 内联让电商客户升级后性能暴跌只能全局关闭;2022 的基数估计换个数据类型长度就能给出"垃圾"估计,排序直接溢出到磁盘。
窄场景
升级 2019+ 并启用新兼容级别的库;大量使用标量 UDF、或有数据倾斜/长尾参数的查询。
机制
2019 引入标量 UDF 内联(把逐行执行的函数展平进计划),但内联后的基数估计并不稳定;2022 又在 CE 周边持续加东西(CE 反馈等)。Brent Ozar 用 Stack Overflow 数据库实测:NVARCHAR(40) 的函数版本 2022 估计精准、1 秒跑完;把函数参数改成 NVARCHAR(MAX),2022 直接忽略索引,"估计只有 1 行出来",排序内存不足溢写磁盘——"连'2019 内联后估计更准了'都说不出口"。
生产验证
来源 4:Pinal Dave 2020-08——某大型电商客户刚升级 2019 就遭遇大面积性能问题,排查到标量 UDF 内联,执行 `ALTER DATABASE SCOPED CONFIGURATION SET TSQL_SCALAR_UDF_INLINING = OFF` 后"性能大幅改善"(improved big time),客户决定保持关闭;
来源 5:Brent Ozar 2024-09——2022 下仅改函数参数的数据类型长度就导致估计崩坏、排序溢盘;并指出"即使你一直在用 2014+ 的新 CE,2022 的 CE 反馈也能把估计改回老版本"。
证据等级
`多方印证(2 个独立来源)`,具名顾问客户案例 ×1 + 带复现的机制分析 ×1
最后核验
2026-10-03
备注
标量 UDF 内联的已知问题已修复于 2019 CU31 / 2022 CU17(KB4538581),该部分标注"已修复";但 CE 随版本持续变化、估计不稳定是 2024 年实测现状,未修复。

Microsoft SQL Server 年份:2024

非 shardkey 建不了唯一索引:PG 迁 TDSQL,迁移评估第一天就被挡下

多方印证
运维复杂度升级迁移
一句话
PostgreSQL 里一条普通的 `create unique index`,在 TDSQL PostgreSQL 版上报 `Unique index of partitioned table must contain the hash/modulo distribution column`——非分布键列建不了唯一索引,业务强依赖的唯一约束在迁移评估阶段就被挡下。
窄场景
PostgreSQL → TDSQL PostgreSQL 版(分布式)迁移评估;表上有非分布键唯一索引、组合唯一索引的业务。
机制
分布式下唯一约束必须在单分片内可判定;TDSQL PG 要求分区表的唯一索引必须包含 hash 分布列(shardkey),否则跨分片无法保证全局唯一。绕法都有代价:把 shardkey 塞进索引会失去原列的唯一语义;换 shardkey 但分布键只能选一个字段,多张唯一索引无解;触发器+影子表方案发帖人自己都未实践。
生产验证
来源 1:V2EX 用户 2024-10 迁移实录——users 表(id 主键、user_name 唯一)在原生 PG 建唯一索引正常,TDSQL PG 直接报错;尝试三种绕法均不理想。引用原话:"我去咨询了官方客服,她们给我的反馈是分布式数据库是有挺多的限制,建议我使用她们的 postgresql"(即腾讯云客服建议改用普通 PostgreSQL);
来源 2:CSDN 用户 usoa 2024-09-29 实操笔记——建表 `distribute by shard(ct)` 而主键为 id 时,亲手复现同一报错 `Unique index of partitioned table must contain the hash distribution column`,并总结"有主键的时候,指定的 shardkey 必须为主键中的一个"。
证据等级
`多方印证(2 个独立来源)`,V2EX 迁移实录 ×1 + CSDN 实操笔记 ×1(后者为中性技术笔记,仅作机制印证)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

腾讯云 TDSQL 年份:2024

"Postgres 兼容"不等于搬过来就快:跨分片延迟税

多方印证
性能问题
一句话
表和索引不一定存在同一个节点上,join、外键检查、索引查找都可能变成多次跨节点 RPC;厂商 CEO 自己承认,开发者要"花额外周期为分布式特性优化 PG 应用"。
窄场景
从单机 PG 迁移过来的 OLTP 应用,未按分布键重做数据建模,直接 lift-and-shift 上 YugabyteDB。
机制
YSQL 复用 PG 查询层,但存储是 DocDB 分布式 KV:相关表/索引按 tablet 散列到不同节点,一次 join 或外键检查可能触发多次内部网络往返;分布式事务要走两阶段提交与 tablet 间协调。单分片事务快,跨分片事务付延迟税。厂商的缓解手段(colocated 表、批量、pushdown)都要求改建模,不是零成本。
生产验证
来源 4:HN 独立用户 2024-02 评论——"I think this con is very real":相关表与索引不一定存放在一起,join、外键评估、索引查找都可能产生过多内部网络 hops,强事务保证的额外锁与协调也会拖慢性能;"把整张表存在单节点"的缓解手段"违背了分片数据库的大部分收益";
来源 5:InfoWorld 2024-09 报道(zicos 转存)——Yugabyte 联合创始人兼 co-CEO Karthik Ranganathan 承认 "some developers faced challenges with query performance when porting applications from Postgres to YugabyteDB","Developers had to spend extra cycles optimizing their existing Postgres apps for YugabyteDB's distributed nature";2.19 为此加入 CBO、双模执行等特性。
证据等级
`多方印证(2 个独立来源)`,独立社区评论 + 独立媒体转述的厂商承认(非生产复盘,已如实标注)。
最后核验
2026-10-03
备注
2.19 已加入 CBO/双模执行等缓解手段;本卡主题可能与本站 [避坑] 卡重叠。

YugabyteDB 年份:2024

运维税:每个慢查询都要走一遍"为什么这么慢"排查手册

多方印证
性能问题运维复杂度
一句话
存算耦合、WLM 队列靠手调、每张表都要设计分布键和排序键——Redshift 的慢查询排查是一套固定手册,团队为此长期投入专人。
窄场景
DC2/DS2 时代及未做精细调优的集群;ETL、BI 报表、ad-hoc 查询混跑,查询模式多样的团队。
机制
Redshift 是 shared-nothing MPP,数据按分布键切分到各节点。查询性能同时取决于:分布键是否避免广播与倾斜、排序键是否让 zone map 生效、WLM 队列的并发槽位与内存分配、表是否及时 VACUUM/ANALYZE。任一环节失配就慢,而"慢"的原因分散在 STL_WLM_QUERY、SVL_QUERY_REPORT 等系统表里,只能按手册逐项排查,没有一键归因。
生产验证
来源 1:Faire 2023-02 具名复盘——Redshift "very high maintenance cost and needed consistent efforts to keep it fast";非 RA3 架构存算耦合,无法隔离工作负载;为回答 "why is my query so slow?" 有一整套 on-call 排查手册流程;100+ Airflow ETL、Mode 报表、SageMaker/Jupyter、AWS Batch 混跑时,WLM 队列调优与 SLA 难以兼顾;
来源 2:Robin 2023-09 迁移复盘——迁往 Snowflake 的理由之一是"不用再担心扩缩容时的维护窗口与停机",并期待 zero-copy cloning、time travel、integrated monitoring 等"quality of life"改进,反衬日常运维负担;
来源 3:HN 讨论串 2022-05——Redshift 性能调优公司创始人直言 "Too many knobs to turn, and it's just not something customers wanted to do";同串另一 5 年用户称 Redshift 经验是"constantly keep giving it TLC",从建用户/schema、WLM 调优到 Spectrum 的 Parquet 文件组织"everything was a chore",切到 BigQuery 后"mostly self driving"。
证据等级
`多方印证(3 个独立来源)`,具名公司工程博客 ×2 + HN 业内人士评论。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠(WLM/运维税)。

Amazon Redshift 年份:2023

扩缩容就是一次停服:换节点类型/规格要整集群停机

多方印证
运维复杂度升级迁移
一句话
在 Redshift 上扩容或换节点类型不是在线操作——旧流程要停整个集群再拉起来,终端用户会感知到明显中断。
窄场景
DC1/DC2 时代及需要换节点家族(DC2→RA3)或纵向扩缩的集群。
机制
classic resize 会终止所有执行中的查询,期间集群只读甚至不可用;elastic resize 仍需短暂停机;classic resize 只能按 2 倍乘子调整节点数。存算耦合架构下"加存储"必须"连计算一起买"。
生产验证
来源 4:PeerSpot 2023-07-27,Barathwaj Ramamoorthy(Senior Director Data Architecture,平台标注 Real User)——因扩展性不足切到 Snowflake:"if I need to switch from DC1 to DC2, or from one compute/storage optimization to another, I have to bring down the entire cluster and then bring it back up. That's a pain point.";
来源 2:Robin 2023-09——迁移动因之一:"We wouldn't have to worry about maintenance windows or downtime when scaling up or down.";
来源 4:PeerSpot 同页匿名评论(2023-05)——对比 Snowflake 可即时调整虚拟仓库大小,Redshift 做不到。
证据等级
`多方印证(3 个独立来源)`,具名点评用户 + 匿名点评用户 + 具名公司工程博客(点评页身份经平台标注,未经独立核实)。
最后核验
2026-10-03

Amazon Redshift 年份:2023

Robin:Redshift→Snowflake 迁移中最磨人的不是数据搬运,而是 SQL 翻译

多方印证
升级迁移
一句话
5 个月迁移里最痛的是 "SQL Translation"——一串静默行为差异:Redshift 里 `greatest(1, 10, 1000, null)` 返回 1000,Snowflake 遇到 null 直接返回 null;时间戳默认精度不同导致 `md5(created_at::varchar)` 两仓算出不同哈希;`type`、`start` 这类列名在 Snowflake 是保留关键字——"查得出来、修得回去,但机器翻译工具扫不出来"。
窄场景
从 Redshift(或其他数仓)迁入 Snowflake;历史 SQL 包袱重的团队。
机制
函数语义、类型精度、保留字等静默差异不在语法层面,SnowConvert 类官方工具最容易漏掉;团队总结的 QA 原则:"It's not reasonable to expect that data will be 100% the same between the two warehouses… the purpose of QA is to be able to explain differences"(别指望两仓数据 100% 一致,QA 的目标是能解释差异)。
生产验证
来源 40:Robin 数据工程师 Eric Wurtzbacher 2023-09-21 第一人称复盘;
来源 40 内引述:Instacart 数据团队早前在类似迁移中记录过同类 SQL 函数翻译坑("The SQL Challenge")。
证据等级
`多方印证(2 个独立来源)`,Robin 一线复盘 + Instacart 同类记录(经 Robin 引述)。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2023

没有查询工作负载管理器:重要查询和跑批只能"分仓",没有 WLM 式的资源调度

多方印证
运维复杂度
一句话
"No Snowflake query workload manager: Unlike other data warehouses, Snowflake lacks a resource manager to assign resources to queries based on their importance and overall system workload."(不像其他数仓,它缺少按查询重要性和系统整体负载分配资源的资源管理器。)媒体批评汇总:"Workload management. Or lack thereof. If you want to isolate higher-performance workloads with Snowflake, you just spin up a separate virtual warehouse. It works generally but will add expense."(想隔离高优先级负载,办法就是另开一台虚拟仓库。管用,但要加钱。)
窄场景
同一 warehouse 里跑批 ETL 和交互式 BI 互相挤占的团队;需要"这个查询优先"语义的组织。
机制
Snowflake 的隔离单位是 warehouse 整台,没有查询级优先级调度;隔离=拆 warehouse=每个 warehouse 独立计费="隔离"直接等于"加钱"。Redshift 的 WLM 队列(查询优先级、并发槽位、内存配比)是参照物。
生产验证
来源 14:Slim Baltagi §2.17(2023-11-08,与本清单来源 14 为同一篇文章的不同章节);
来源 53:SiliconANGLE 2020-11-14 媒体批评汇总(汇总"dozens and dozens"客户/从业者观点,仅作印证)。
证据等级
`多方印证(2 个独立来源)`,独立从业者长文 + 媒体批评汇总。
最后核验
2026-10-07
备注
缺口状态:至今缺失(截至 2026-10,隔离手段仍是拆 warehouse)。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2023

节点小时计费:低吞吐 workload 在为"不存在的流量"买单

多方印证
成本账单
一句话
Spanner 按预置节点小时收费,存储配额又和节点数绑定——吞吐低、数据量大的 workload 会被迫为闲置算力买单。
窄场景
低 QPS 但数据量大的库(被迫加节点只为拿存储配额)、流量波动大(只能按峰值预置)的业务。
机制
Spanner 的计算容量(节点/PU)同时决定吞吐上限和存储上限:小于 1 节点时每 100 PU 约 1TiB(1024.0 GiB),1 节点及以上每节点 10TiB;官方文档明确"Spanner doesn't have a suspend mode"——算力是专用资源,闲置也在计费。于是出现两种交税姿势:低吞吐大存储 → 加节点只为存储配额,闲置算力照单全收;流量波动大 → 按峰值预置,平均利用率低时大量容量空转。
生产验证
来源 1(HN 2023):"We had a huge spanner db with low throughput so had to add idle nodes just for storage which also ballooned costs";
来源 1(HN 2023,另一用户):"I have to provision for peak throughput on Spanner. Average throughput is much lower than the peak throughput, so I'm doubtful of seeing savings";
来源 1(HN 2023,另两位用户):"a production ready instance starts at $65/mo. DynamoDB can run for ~$0.00/month with per-request pricing" / "But you have to start by paying like $1k/mo, it's not serverless"。
证据等级
`多方印证(4 个独立声音)`,同一 HN 讨论帖内的 4 位不同用户;计费与存储耦合机制经官方文档核实。
最后核验
2026-10-03
备注
2023 年帖子里的 "$1k/mo 起步"吐槽基于当时的 3 节点起步口径;2024–2026 年 Google 改为 Standard/Enterprise/Enterprise Plus 版本体系并支持 100 PU 起步,绝对数字已变,但"按节点小时预置计费"的模型未变,本卡保留。

Google Spanner 年份:2023

热分区:你付了 1000 RPS 的钱,热点键却只能吃到其中一小份

多方印证
性能问题成本账单
一句话
Spanner 把键空间切成多个 split 并把配额均分——写入集中在少数键范围时,只有"热点分片"那一份配额能用,要么整体超配,要么在应用层自建缓存削峰。
窄场景
写分布不均的 workload(少数热键/热租户)、读多写少但写集中的业务。
机制
数据按主键字典序切分为 splits 分散到各服务器;单个键范围的写入吞吐受单个 split 的服务能力上限约束,加节点并不能提升热点范围的写入能力。热点出现后只有两条路:为热点超额预置整体算力(大部分闲置),或在应用层做 write-through 缓存把热点削平——而后者等于把本该数据库做的事搬回应用层。
生产验证
来源 1(HN 2023,细节充分的生产叙述):"we ended up creating a very complicated write through cache system in front of spanner that dynamically added memory/CPU capacity as needed to prevent hot shards",Spanner 每月数万美元 + 前置缓存计算每月数万美元;写只有几百 RPS、读是写的 1000 倍,"Postgres behind this cache system would have handled the load just as well and cost less than half as much";并抱怨 "Google's docs are incomplete (as usual); there are lots of performance gotchas like this that exist throughout the entire service, and they aren't clearly documented";
来源 1(HN 2023,另一用户):"I have seen two applications in my career... we paid an absolute arm and a leg for the privilege and ended up implementing a distributed cache in front of Spanner to reduce costs"。
证据等级
`多方印证(2 个独立来源)`,同一 HN 帖内 2 位不同用户。
最后核验
2026-10-03

Google Spanner 年份:2023

DeWitt 条款:你不可以公开 benchmark 它

多方印证
生态与信任
一句话
Google Cloud 服务条款第 7 条要求——公开 Spanner 的 benchmark 结果必须先拿到 Google 书面同意,还得允许 Google 反过来测你的产品。
窄场景
想做独立第三方性能对比、发表选型 benchmark 的团队与媒体。
机制
Google Cloud 通用服务条款 §7 "Benchmarking":Customer may only publicly disclose the results of such Tests if (a) obtains Google's prior written consent, (b) provides Google all necessary information to replicate the Tests, (c) allows Google to conduct benchmark tests of Customer's publicly available products or services and publicly disclose the results;且"on behalf of a hyperscale public cloud provider"时连"测"本身都要事先书面同意。效果:独立第三方不愿碰,公开可复现的对比数据长期缺席——这也是 Spanner 深度吐槽稀少的原因之一。
生产验证
来源 2(Cube 博客 2022-06,逐字引述条款原文):把 GCP(含 Spanner 适用的通用条款)列入"有 DeWitt 条款"名单;
来源 3(Google 开发者论坛 2022-08):用户核实 "customers cannot publicly disclose Cloud Spanner benchmarking results without getting written consent from Google";
来源 1(HN 2023):"If only someone could actually run and publish comparison benchmarks, but DeWitt clause by Spanner makes it impossible."(同帖另一用户贴出条款原文逐条解读)。
证据等级
`多方印证(3 个独立来源)`,独立厂商博客 + 官方论坛用户核实 + HN 用户。
最后核验
2026-10-03

Google Spanner 年份:2023

Google 式定价阴影:今天半价,明天呢

多方印证
成本账单生态与信任
一句话
Spanner 只能跑在 GCP 上,而 Google 有过 Maps 10–20 倍、App Engine 10 倍式涨价的前科——把核心数据库押在 GCP 上,等于把定价权交给一家"说变就变"的公司。
窄场景
把 Spanner 作为核心系统数据库、计划用 5–10 年的团队;对多云/可迁移性有要求的组织。
机制
Spanner 是 GCP 专属服务(无自托管、无其他云),迁出意味着重写数据层;Google 历史上对 Maps API(2018 年约 10–20 倍涨价)、App Engine(定价上调约 10 倍)都做过大幅调价。用户担心的不是"会不会涨",而是"涨了你毫无议价能力"。
生产验证
来源 1(HN 2023,多位用户):"Google Maps is the key lesson here. 10 to 20 times price increase, just because someone had a meeting." / "After they introduced Google Cloud they got bored of App Engine and 10x'd the price." / "Google also has a history of massively spiking the cost of its services. Vendor lockin is a dangerous thing." / "At the end of the day... I trust AWS to be a stable, long term foundation to build a product on, I don't trust GCP to be the same."
证据等级
`多方印证(4 个独立声音)`,同一 HN 帖内 4 位不同用户。
最后核验
2026-10-03
备注
涨价案例(Maps/App Engine)是 Google 其他产品线的历史,非 Spanner 本身的涨价记录;本卡收录的是"绑定 GCP 的定价信任风险"这一用户真实顾虑,不代表 Spanner 涨过价。

Google Spanner 年份:2023

为不存在的规模提前买单:Spanner 是"火车",你只想要"货车"

多方印证
性能问题运维复杂度
一句话
Spanner 的复杂度与成本是为 planet-scale 设计的——团队在只有个位数用户时就为"未来规模"选它,等于提前支付分布式协调税,却迟迟拿不到收益。
窄场景
初创/中小团队、流量远没到单机瓶颈、"以防万一要全球扩展"而选 Spanner。
机制
分布式事务的 2PC/Paxos/commit-wait 成本是每笔操作都要付的固定税,而收益(突破单机上限)只在超过单机容量后才兑现。规模没到之前,你同时支付了"分布式复杂度"和"单机本可免费拿到的低延迟"。
生产验证
来源 1(HN 2023,多位用户):"It seems like a lot of people like to plan for massive scale while they have a handful of actual users." / "Spanner is hard to recommend from an engineering perspective at anything except the absolute most massive of scales, and even then it will create nearly as many problems as it solves." / "My team bought the 'scale down' thing and got bit." / "The more I deal with scalable relational DBMSes (Spanner in particular), the more I doubt their usefulness even at large scale."
证据等级
`多方印证(4 个独立声音)`,同一 HN 帖内 4 位不同用户。
最后核验
2026-10-03

Google Spanner 年份:2023

Serverless v1:扩容要先找"事务间隙",找不到就卡你 5–50 秒

多方印证
性能问题运维复杂度
一句话
v1 扩容的办法是"冻结数据库、搬到另一台 VM、再启动"——前提是找到一个没有重叠事务的时间窗口;业务一忙,这个窗口根本不存在。
窄场景
持续有并发事务的 v1 集群("chatty" 数据库);依赖缩容到 0 省钱的 dev/staging 环境。
机制
v1 按 1 ACU 起步、翻倍扩容;扩容需暂停数据库并跨 VM 迁移内存状态(buffer pool 跨网络拷贝),大内存下拷贝本身就很慢;AWS 自述:很忙的库找不到事务间隙时,扩容耗时 5–50 秒,偶尔还会直接打断数据库;且 v1 的计算层没有多可用区高可用。
生产验证
来源 3:The Register 2022-04-29(AWS 赞助内容,此处仅引用 AWS 产品经理 Chayan Biswas 的自述)——亲口承认上述 5–50 秒机制与"有时打断数据库",并称这限制了 v1 只适合零星负载;
来源 4:HN 用户 2022 年详述——v1 扩容"慢且经常失败",高峰前只能手动先扩到超大;dev/QA 环境从休眠唤醒"差不多要一分钟";Data API"是个错误决定";
来源 5:re:Post 用户——开了缩容到 0 的 dev/staging 环境出现随机超时,连 `SELECT * FROM users WHERE user_id = 1` 都会超时,CPU 与慢日志一切正常,被判定为 v1 冷启动/扩容问题。
证据等级
`多方印证(3 个独立来源)`,AWS 官方自述(经赞助媒体转述)+ HN 用户实测 + re:Post 生产求助。
最后核验
2026-10-03
备注
v1 已于 2025-03-31 停止支持(见下张卡片),本卡为历史记录;继任者 v2 的问题见"Serverless v2:0.5 ACU 常开"卡。

Amazon Aurora 年份:2022

CQL 的坑位清单:长得像 SQL,处处是例外

多方印证
运维复杂度
一句话
CQL 的语法在"骗"你以为它是 SQL——LWT 只是单分区、quorum 写失败后数据在不在要靠猜、物化视图加了又弃、二级索引只能查单分区、insert 和 select 的时间戳格式还不一样;用下来感觉像"例外之上的例外"。
窄场景
把 CQL 当 SQL 用的团队;依赖 LWT 做条件写、依赖 MV/二级索引做查询的 schema。
机制
LWT(`IF NOT EXISTS`/`IF`)底层是 Paxos,但只保证单分区线性化,且延迟数倍于普通写、热点竞争下更糟;quorum 写"失败"不等于没写入(超时 vs 拒绝语义模糊),错误处理要按"maybe"写;BATCH 保证原子性但不保证隔离性;物化视图经历"加入—标记实验性—长期边缘"的反复;二级索引本质是各节点本地索引。
生产验证
来源 2:2022-12,HN 用户逐条列举——"LWT are single row only…error handling is asinine. E.g: A quorum insert fails. is the data there or not? Maybe!…material views. Added, removed, readded, deprecated…BATCH is atomic, but not isolated…CQL feels like a hack…It's just exception on top of exception";
来源 2:2022-12,同一讨论串另一用户——"Cassandra is good at ingesting data, bad at deleting, really really bad at anything remotely relational. Errors are almost pointless…Don't trust what the CQL language says you can do."
证据等级
`多方印证(2 个独立作者,同一 HN 讨论串)`,两条评论相互独立、指向同一组语义陷阱。
最后核验
2026-10-03
备注
与现有 [避坑] 卡"兼容坑"(CQL 无 join/子查询)角度不同——现有卡讲"缺能力",此卡讲"语义陷阱",双方保留。

Apache Cassandra / ScyllaDB 年份:2022

最终一致性的心智负担:应用层替数据库操心

多方印证
运维复杂度
一句话
读写一致性级别选什么、每档的延迟与可见性代价是多少、读到旧数据时应用层怎么兜——这些本该是数据库的事,在 Cassandra 里全是应用工程师的必修课;quorum 读"太慢没人用",ONE 读"读到旧数据出 bug",两头为难。
窄场景
多副本、多 DC 部署;读写一致性级别混用的应用;对"读到自己刚写的数据"有预期的产品场景。
机制
无主复制 + 可调一致性:`W+R>N` 只保证读写集合相交,不保证语义收敛;低级别读可能命中尚未收到最新写的副本;quorum 读写要多等副本,延迟翻倍且继承最慢副本的尾延迟;想跨分区强一致只有 LWT(Paxos,单分区、昂贵)。"最终一致"收敛靠 read repair 与 anti-entropy repair,而 repair 又是另一个运维科目(见本页 repair 卡)。
生产验证
来源 5:HN 用户生产经历——"We didn't have a good handle on the exact perf implications of different values of read/write replication. Writing product code to handle a range of eventual consistency scenarios is challenging";
来源 2:2022-12,HN 讨论串——"nobody does reads at quorum, they're slow"(quorum 读太慢没人用);"Unless they want 'read your writes', otherwise bugs start appearing 'why isn't the data i just put showing'?"(不要 read-your-writes,就等着"刚写的数据怎么查不到"的 bug)。
证据等级
`多方印证(2 个独立来源)`,HN 生产经历分享 + 2022 年 HN 讨论串印证。
最后核验
2026-10-03
备注
主贴经历约 2016 年前后,评论者自述"情况可能已有变化";2022 年讨论串显示一致性级别选型困境仍在被一线讨论,故保留收录,未作"已修复"标注。与现有 [避坑] 卡主题重叠(深水区一:可调一致性),双方保留。

Apache Cassandra / ScyllaDB 年份:2022

Ghost 5 只认 MySQL 8:应用生态用脚投票

多方印证
生态与信任
一句话
Ghost 从 5.0 起官方只支持 MySQL 8,MariaDB 用户要么锁死旧版、要么被迫迁库——生态漂移的账最终由用户买单。
窄场景
用 MariaDB 跑 Ghost(及类似只在 MySQL 上做 CI 的上游应用)的自托管用户。
机制
应用厂商的测试矩阵只覆盖 MySQL 8;"协议兼容"不等于"行为兼容"——Ghost 4.46 在 MariaDB 上的更新失败并回滚,根因是"MariaDB 与 MySQL 之间的某些差异";厂商随后把支持矩阵收紧为 MySQL 8 only,用户失去选择权:不迁库就等于放弃安全更新。
生产验证
来源 3:zblesk 2022-06,多年 Ghost+MariaDB 用户——4.46 更新失败被迫回滚;为升 Ghost 5 把库迁到 Docker 里的 MySQL 8,第一次 dump→导入直接失败、推倒重来,戏称"grit my teeth and make the switch";
来源 1:infophreak 专门给"被困在 MariaDB 上的 Ghost 用户"写了 14 步迁移指南(MariaDB 11→MySQL 8),开篇点名 Ghost 官方已宣布 MySQL 8 要求。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2。
最后核验
2026-10-03

MariaDB 年份:2022

只读节点的慢查询,能把主库的 DDL 一票否决

多方印证
运维复杂度升级迁移
一句话
PolarDB 的 DDL 要等所有只读节点同步 MDL——只读节点上一个没结束的大查询/长事务,主库加索引就直接超时失败回滚。
窄场景
一写多读集群、只读节点同时跑报表/慢查询;做分区表变更、加索引等 DDL 时。
机制
共享存储架构下,DDL 变更表结构前必须保证所有节点的读操作结束:主节点自己获取 MDL 锁后写一条 redo 日志,只读节点解析到后尝试获取同一表的 MDL,失败则反馈主节点;主节点等待全部只读节点同步(loose_innodb_primary_abort_ddl_wait_replica_timeout 默认 1 小时),只读节点加锁超时由 replica_lock_wait_timeout 控制(默认 50 秒)。于是 MDL 同步的"选民"从主库本地扩大到了每一个只读节点。
生产验证
来源 1:2022-01 事故记录——1 亿多行表改成分区表后,作者第二天执行 DDL 改回非分区表,跑了半小时后报 `ERROR 8007 (HY000): Fail to get MDL on replica during DDL synchronize`;查 `show full processlist` 发现只读节点上有几个 select 持续了一天没结束,正是它们挡住了 MDL 获取,kill 掉才继续;
来源 2:2022-12 社区问答——另一用户提问"polardb添加索引报错Fail to get MDL on replica during DDL synchronize"(已解决;该提问正文无细节,仅报错标题,故作为第二独立声音但偏薄)。
证据等级
`多方印证(2 个独立来源)`,具名事故记录 ×1 + 社区用户提问 ×1(第二个声音仅报错标题、无细节)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。另外:两起客户声音均早于 2023 年,但该故障模式源于共享存储 MDL 同步的架构约束,官方文档当前版本仍在描述同一报错与手动缓解参数(非默认修复),故保留收录,未作"已修复"标注。来源 1 文中引用的机制解释转述自淘宝数据库内核月报(厂商侧材料),仅作机制背景参考。

PolarDB 年份:2022

Python Connector 里 fetch_pandas_all() 跑个建表语句就抛"未知错误"

多方印证
生态与信任
一句话
`cur.execute("create temp table ...")` 后调 `cur.fetch_pandas_all()`,直接 `NotSupportedError: Unknown error`——cursor.py 里硬编码检查 `if self._query_result_format != "arrow": raise NotSupportedError`;只有 SELECT 返回 Arrow 结果集,DDL/DML 返回 JSON,四个 pandas/arrow 快捷 fetch 方法全部拒绝工作。
窄场景
用 Python connector 跑 DDL/DML 后想拿 DataFrame 的脚本;把 connector 当通用执行层用的工具。
机制
Snowflake 维护者承认这是已知取舍:为保"这四个函数永远比取 JSON 快"的保证,只愿意在用户显式 opt-in(如 `slow_ok=True`)时才做 JSON→DataFrame 转换;Snowflake 自家新 universal driver 的行为差异文档把"cursor 级 pandas/arrow fetch 方法拒绝 JSON 结果集"列为**破坏性行为差异**(`is_breaking_change: true`),且 Snowpark 的 `DataFrame.to_pandas()` 内部恰好依赖这个 fallback 分支——这个坑连 Snowflake 自己的上层工具都踩。
生产验证
来源 45:snowflake-connector-python 官方仓库用户 issue #1202(2022,复现堆栈完整);
Snowflake 自家 `snowflakedb/drivers` 仓库 SNOW-4072353 记录(官方文档,作机制印证)。
证据等级
`多方印证(2 个独立来源)`,真实用户 issue + Snowflake 自家新 driver 文档承认该行为差异。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2022

dataroots 实测:Snowpark Python 做 ML,"报错没有堆栈、包只能用 Anaconda 子集、HuggingFace 模型直接 OOM"

多方印证 来源存疑
生态与信任
一句话
只用 Snowflake 做完整 ML 方案的第一手实测:UDF/存储过程只能用 Snowflake 提供的 Anaconda 包子集("not always the latest"),pip 独有包得打 wheel 走 imports 上传——"feels like a hack rather than a feature";"Error handling is maybe the biggest of the 'issues' I have"——UDF 在 Snowflake 侧调用失败时 "I was not able to find tracebacks in the Snowflake IDE";HuggingFace transformer 权重不能直接下载、加载直接 OOM,"even tried increasing the warehouse size with no success",且 warehouse 内存/CPU 规格不透明,"hard to know what will work and what won't",也没有 GPU;UDF 限 1 分钟、存储过程限 1 小时且只返回标量。
窄场景
想在 Snowflake 里做 ML 训练/推理的团队;被"Snowpark ML"宣传吸引的选型。
机制
Snowpark 执行环境是受限沙箱:包白名单、执行时长上限、无 GPU、硬件黑盒;报错链路为 SQL 执行环境设计,Python 调试体验差。
生产验证
来源 47:dataroots 工程师 dev.to 实测复盘 2022(Snowpark Python public preview 时期);
来源 49:Empower 数据科学家横评([来源存疑],约 2022)——在 UDF/存储过程限制、包子集、无 GPU、内存黑盒四点上交叉印证,另补:单节点训练只有 UDF/存储过程两条路、真正的分布式训练在 Snowflake 执行环境内 "impossible"。
证据等级
`多方印证(2 个独立来源,含 1 个 [来源存疑])`,第三方咨询公司实测 + 从业者横评,四点交叉印证。
最后核验
2026-10-07
备注
2022 年 public preview 时期的实测,Snowpark 此后持续迭代,但"包白名单、无 GPU、执行时长上限"的架构约束是平台设计使然。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2022

半同步复制的 ACK 等待:gh-ost 迁移丢数据、管理命令堆积打满连接数

多方印证
稳定与故障运维复杂度
一句话
半同步复制下主库提交要等从库 ACK;ACK 迟迟不来时,等待中的事务对别的线程"不可见",能让 gh-ost 在线 DDL 丢数据,也能让 FLUSH BINARY LOGS / SHOW MASTER STATUS 堆积到打满 max_connections。
窄场景
开启半同步复制(rpl_semi_sync_master_enabled=1)、从库延迟或宕机、timeout 设得很大的主库;用 gh-ost 做在线 DDL 的团队。
机制
AFTER_SYNC 模式下事务先等 ACK 才返回提交;等待期间该事务已写入 binlog 并发往从库,但对新起的读事务不可见——gh-ost 读到的 max id 偏小,该行既没被 DML 监听捕获、也没被行拷贝复制,直接丢失。另一方面,FLUSH BINARY LOGS / SHOW MASTER STATUS 会被"Waiting for semi-sync ACK" 的会话间接阻塞;kill 掉的只是客户端,会话不释放,堆积可打满 max_connections,届时连"关闭半同步"这条救命命令都执行不了。
生产验证
github/gh-ost#1039(2021-10,MySQL 5.7.26,AFTER_SYNC,timeout=50000ms;id=3297 的行在迁移中丢失,附 gh-ost debug 日志与 processlist "Waiting for semi-sync ACK from slave" 实录);bugs.mysql.com#104012(Jean-François Gagné 提交,8.0.25/5.7.34 可复现:FLUSH BINARY LOGS 与 SHOW MASTER STATUS 被阻塞,kill 不释放会话,S2 级别,唯一 workaround 是禁用半同步)。
证据等级
`多方印证(2 个独立来源)`,来源性质:GitHub 生产 issue 复盘 + MySQL bug 库具名提交。
最后核验
2026-10-03

MySQL 年份:2021

Receipt Bank:迁完一年才敢说——Snowflake 比 Redshift 贵得多

多方印证
升级迁移
一句话
"It's important to say we pay much more for Snowflake than what we have been paying for Redshift, but it works well for our use-case."(必须说:我们为 Snowflake 付的钱比 Redshift 多得多,但它确实适合我们的场景。)——迁移前 "back-of-the-napkin calculations" 测算的降本,4 个月后才验证成立;"迁入 Snowflake 后账单是否真的下降"本身就是迁移中的不确定项。
窄场景
从 Redshift(预留实例/固定成本模式)迁入 Snowflake(弹性计费)的团队;按"弹性=省钱"做立项测算的迁移。
机制
Redshift DDL 在 Snowflake 下直接不兼容,团队自写爬虫式脚本枚举全部 schema/table/view 重建;全球多时区用户"缺一小时数据就抓瞎",并行 dump 速度与保留算力跑 SELECT 之间要找平衡——迁移工程本身就有成本,账单对比要在有监控(Looker 仪表盘看平均查询耗时和"快查询"占比)的前提下依然可能超预期。
生产验证
来源 41:Receipt Bank 数据工程师 Yordan Ivanov 约 2020-02 第一人称复盘;
来源 40:Robin 同样提到迁移前测算降本、4 个月后才验证成立。
证据等级
`多方印证(2 个独立来源)`,两家 Redshift→Snowflake 迁移复盘在"账单不确定性"上互相印证。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2020

XID 回绕保护停机:写库被"正确"地拒绝写入

多方印证
稳定与故障运维复杂度
一句话
事务号耗尽前,PostgreSQL 宁可停写也不让你继续——autovacuum 没跟上 freeze,就等于计划外停机。
窄场景
高写入 OLTP、存在超大表、autovacuum 被调得保守或被长事务/复制槽挡住 freeze 的集群;任何大版本(机制为架构性设计)。
机制
PG 用 32 位 XID(约 21 亿可用),MVCC 靠 XID 判断行可见性;vacuum 必须定期 freeze 旧元组以推进 frozen xid。freeze 跟不上 → datfrozenxid 老化 → 剩余不足约 100 万时触发保护模式拒绝一切写入,只能单用户模式 vacuum 或删表自救。Sentry 还发现当时 vacuum 的 maintenance_work_mem 有 1GB 硬上限,加内存也救不了。
生产验证
来源 1:Sentry 2015-07-20 停机大半个美国工作日,autovacuum 几小时跑完仍无效果,最终 truncate 一张事件映射大表,5 分钟后恢复;
来源 2:Mailchimp/Mandrill 2019-02-04,shard4(K/V 分片中最热)触发回绕保护停机约 40 小时,全量 vacuum 预估最长 40 天,最终 truncate TB 级 Search/Url 表恢复。两家此前都"知道风险但没排上修"。
证据等级
`多方印证(2 个独立来源)`,具名生产复盘 ×2。
最后核验
2026-10-03
备注
与现有 [避坑] 卡主题部分重叠(该卡已含 XID 回绕)。另:两起复盘分别发生于 2015 与 2019 年;该故障模式源于 32 位 XID 架构约束(需定期 freeze),非已修复缺陷,故保留收录,未作"已修复"标注。

PostgreSQL(社区版) 年份:2019

迁移工具链:导个 CLOB 表,逼得 DBA 用 Python 生成 INSERT 再粘贴

多方印证
运维复杂度升级迁移
一句话
一个只有几百行、带 CLOB 字段的简单表迁移,变成耗时一个月的工程:SQL Developer 导出随机截断 CLOB、Data Pump 因小版本差异拒绝工作、SQLLDR 报 ORA-42321,最后靠 Python 生成 INSERT 语句、粘贴进 GUI 分批执行——200 小时的 Oracle 顾问账单,客户多花约 100 万美元。
窄场景
跨实例/跨版本的数据迁移;表含 CLOB/BLOB 大对象字段时。
机制
Oracle 有十几种数据导入导出路径(exp/imp、Data Pump、SQL*Loader、SQL Developer 导出等),各工具行为"微妙而不兼容":SQL Developer 导出 CLOB 随机截断、部分格式导出时不转义导致无法解析;Data Pump 对源/目标小版本差异零容忍;SQL*Loader 报索引/约束错,而同样的 INSERT 粘贴进 GUI 却能成功——工具链把简单任务变成了需要"Oracle 黑魔法"知识的专家活。
生产验证
来源 12:HN 讨论串(2017)——原帖作者完整记录了上述全过程(200 billable hours 的 Oracle 顾问、$400/小时费率、客户多支出约 100 万美元);跟帖中至少两位独立从业者呼应:"I wanted to move schema and data... It took 6 days to move it"(有 3 名全职 Oracle DBA 的客户,迁个 schema 花了 6 天);"My experience is that the tools and the 'experts' leave a lot to be desired"。
证据等级
`多方印证(同一讨论串内 3 个独立声音)`。
最后核验
2026-10-03
备注
2017 年旧帖,涉及的工具为 10g/11g 时代版本;按时效规则降级保留——抱怨的是"简单任务需要专家级内部知识"的结构性问题,而非某个已修复的缺陷。英文原帖含发泄性措辞,本卡仅转述技术事实。

Oracle Database(甲骨文) 年份:2017

Reader endpoint:连接池一建,负载均衡就"钉死"在一台 reader 上

多方印证
性能问题运维复杂度
一句话
Reader endpoint 的"负载均衡"只发生在 DNS 解析那一刻——连接池建连一次,之后所有查询都钉在同一台 reader 上,加再多 reader 也分不到流量。
窄场景
PgBouncer/应用连接池 + 多 reader 的 Aurora PG 集群;读放大的报表/OLTP 混合负载。
机制
Reader endpoint 是 DNS 轮询的连接级分发,不是查询级负载均衡;长连接一旦建立就固定在某台 reader;想扩 reader 分流,必须让池子重建连接或应用重连;JVM 等运行时的 DNS 缓存还会让"重建"本身不生效。
生产验证
来源 12:独立开源项目 pgbouncer-aurora-operator 的 README——作者为解决"Reader endpoint 无法分散连接池、长连接钉死导致读负载 skew"专门写了一个 operator:逐实例 1:1 配 PgBouncer、用 K8s Service 做成员管理;
来源 2:The Build 独立分析——"这是所有 DNS 负载均衡的通病:长连接会粘在第一次分到的 reader 上;要分流就得让连接池轮换连接或应用重连"。
证据等级
`多方印证(2 个独立来源)`,独立开源项目文档 + 独立技术分析。
最后核验
2026-10-03

Amazon Aurora 年份:—

Failover"30 秒"是集群事件的时间,不是你的应用恢复的时间

多方印证
稳定与故障
一句话
AWS 的 30 秒是从"集群事件"口径量的——你的应用还要过 DNS 缓存、连接池重建、冷缓存三关,每一关都能把中断拉长。
窄场景
直连集群 endpoint、无 RDS Proxy、无拓扑感知驱动的应用;JVM 等有 DNS 缓存的运行时;p99 敏感的业务。
机制
Failover 本体(reader 晋升并绑定共享存储卷)确实通常小于 30 秒;但应用侧恢复取决于:DNS TTL(默认 5 秒,JVM/容器层层缓存可放大到分钟级)、连接池重建、被晋升 reader 的 buffer cache 是按"读负载"预热的、写负载上来后有 p99 毛刺。单实例集群(无 reader)则要现起计算节点,按分钟计。
生产验证
来源 12:pgbouncer-aurora-operator README——"集群 endpoint 强烈受 DNS 缓存/TTL 影响,failover 后即使 endpoint 已指向新 writer,陈旧的解析结果仍会被继续使用";
来源 2:The Build——failover 是"新 writer 快速绑定存储卷",但"不是缓存热的";p99/p999 敏感的应用会在首次生产 failover 时感受到延迟毛刺;无 reader 的集群 failover 按分钟计;
来源 13:Harshith——"单实例 Aurora 集群得不到 Aurora 的 failover 故事;没有 reader 时要先起一台新计算实例,以分钟计"。
证据等级
`多方印证(3 个独立来源)`,独立开源项目 + 独立技术分析 ×2(AWS 官方手册亦承认"集群事件 30 秒、应用中断更久"的现象,作为机制佐证)。
最后核验
2026-10-03

Amazon Aurora 年份:—

没有真 superuser:扩展白名单 + 参数子集 + 摸不到文件系统

多方印证
生态与信任
一句话
`rds_superuser` 不是 superuser——装不了白名单外的扩展(含自定义 C 扩展),调不了的参数只能认,`COPY ... FROM PROGRAM` 这类操作想都别想。
窄场景
依赖特定扩展(PostGIS、TimescaleDB、完整版 pg_cron、新版 pgvector、自研 C 扩展)或深度调参的工作负载。
机制
Aurora 沿用 RDS 的权限模型:最高只有 rds_superuser;扩展来自 AWS 维护的 allow-list(与 RDS 的清单还不完全一致,且随小版本变化);可调的 postgresql.conf 参数是子集,静态参数改完要重启;没有文件系统访问。
生产验证
来源 2:The Build——"没有真正的 SUPERUSER";扩展 allow-list 短于社区生态,TimescaleDB/Citus 这类直接出局;pg_tle 只允许过程语言表达的扩展,C 扩展不在 allow-list 就没门;
来源 13:Harshith——"你交出了 superuser:拿到的是 rds_superuser、精选扩展清单、没有文件系统;清单外的扩展就是不可用"。
证据等级
`多方印证(2 个独立来源)`,独立技术分析 ×2。
最后核验
2026-10-03

Amazon Aurora 年份:—

Global Database 写转发:备区域写一次,跨洋跑一趟

多方印证
性能问题
一句话
Write forwarding 让备区域"看起来"能写——但每一笔写都要先转发到主区域提交,备区域的写延迟是主区域的十几倍;这叫 active-passive,不叫 active-active。
窄场景
多区域部署、备区域有就近写入需求的应用;开了 write forwarding 却没读一致性模式文档的团队。
机制
Global Database 只有一个写区域;备区域 endpoint 接受写后经存储层转发到主区域 writer,跨区域 RTT 直接加在每次写上;区域间复制延迟按"秒、通常小于 1 秒"计;一致性模式(eventual/session/global)在延迟与可见性之间做交易,不读文档直接开会有"惊喜"。
生产验证
来源 2:The Build——"备区域秒级延迟对很多应用够用,对另一些不够";write forwarding"有一致性模式的微妙语义,不读文档就开的应用会遇到惊喜";
来源 17:独立工程师的本地 PoC(swa-roopa/event_ticketing_platform)——演示模型下备区域转发写约 80–120ms、主区域本地写约 5ms,结论"这是 active-passive,不是 active-active"。
证据等级
`多方印证(2 个独立来源)`,独立技术分析 + 独立工程师的概念验证。
最后核验
2026-10-03
备注
来源 17 为本地 PoC(MySQL 模拟 Aurora、dynamodb-local 模拟 Global Tables),80–120ms 为演示模型值、非生产实测,仅用于说明行为差异,不采信为精确数字。

Amazon Aurora 年份:—

换了 Aurora,vacuum 还是你的

多方印证
运维复杂度
一句话
很多人以为上了"云原生"就不用管 vacuum 了——但 Aurora 的 vacuum 跑在 writer 进程里,受 writer 的 CPU/内存限制;writer 配小了,膨胀和 XID 回绕一个都少不了。
窄场景
高频 UPDATE/DELETE 的 OLTP 跑在偏小 writer 上;"托管=不用管 vacuum"心智的团队。
机制
Aurora 的存储层只管 I/O,找死元组、清索引项、更新可见性图这些活还是 writer 进程干;vacuum 重的负载下瓶颈是 writer 的 CPU/内存,不是存储吞吐;MVCC/XID 回绕的架构约束原样继承。
生产验证
来源 2:The Build——"分布式存储不是 vacuum 溶剂,它只是存储";writer 配小会在重更新负载下复现社区 PG 的膨胀问题;
来源 13:Harshith——"Vacuum 还是完全你的问题……如果你没想过 autovacuum_vacuum_cost_limit 和 oldest XID,你的 outage 已经排期了,只是日期未知"。
证据等级
`多方印证(2 个独立来源)`,独立技术分析 ×2。
最后核验
2026-10-03
备注
主题可能与现有 [避坑] 卡及 PG「用户吐槽」autovacuum 卡重叠。

Amazon Aurora 年份:—

Too Many Parts 墙:小批量写入能把 MergeTree 写死

多方印证 来源存疑
性能问题运维复杂度
一句话
每次 INSERT 至少生成一个不可变 part,小批量高频写入让 part 数超过后台合并能力,最终 ClickHouse 先限流、再直接拒绝写入。
窄场景
Kafka/队列直连的流式写入、单行/小批次 INSERT、物化视图目标表(每个 INSERT 在每张 MV 表上都至少多一个 part)、高基数分区键把合并队列拆散的表。
机制
MergeTree 把写入先落成不可变 part,后台 merge 线程再把小 part 折叠成大 part;合并只发生在同一分区内、受 CPU/磁盘吞吐上限约束,而 part 的产生速度只受客户端并发限制。part 堆积触发两道护栏:先 `parts_to_delay_insert` 人为拖慢 INSERT,再超 `parts_to_throw_insert` 直接抛 `Too many parts` 拒绝写入。`async_insert`、Buffer 表只是把"攒批"搬到服务端,并没有改变 MergeTree 批式合并的本质;`wait_for_async_insert=0`(fire-and-forget)下,进程崩溃会直接丢掉缓冲中尚未落盘的行。
生产验证
来源 1:OpenPanel 创始人总结——"ClickHouse loves big inserts. It hates small ones…Do that one row at a time and you'll drown it",他们被迫在应用层用队列先攒批;
来源 2:Tinybird 指出读性能"无论 schema 多好"都会被 part 数拖累("If you are inserting data often, you'll get penalized while reading no matter what schema your table has"),回填时必须"increase the rows you push per block to avoid generating thousands of parts";
来源 6:长文拆解了阈值演进史与高基数分区键如何把合并队列拆散([来源存疑],见上);
来源 8:Altinity 记录"见过团队因为不懂 `wait_for_async_insert` 的含义丢了数百万行",且 async insert 默认关闭去重。
证据等级
`多方印证(3 个独立来源,含 1 个 [来源存疑])`,具名客户 ×2(OpenPanel 创始人、Tinybird)+ 机制长文 ×1。
最后核验
2026-10-03
备注
与现有深水区一(part 机制)与吐槽清单"高频小 INSERT"行主题重叠,互为佐证。

ClickHouse 年份:—

ZooKeeper 运维税:副本一致性外包给外部共识服务

多方印证
稳定与故障运维复杂度
一句话
ClickHouse 自身不实现共识算法,复制全靠 ZooKeeper/ClickHouse Keeper——ZK 一抖,所有副本表降级只读,写入直接被拒。
窄场景
自建 ReplicatedMergeTree 集群;ZK 与数据节点混部、ZK 节点内存不足或磁盘打满的部署。
机制
ZK 存 part 元数据、副本选举、mutation 队列、分布式 DDL 队列;会话断开后副本表为保一致性降级为只读。part 总数膨胀会直接放大 ZK 的元数据压力(每个 part 都是一批 znode)。
生产验证
来源 4:TechWolf 自建 K8s 集群初期用 ZooKeeper,"很快遇到节点 OOM、写入失败",被迫迁到 ClickHouse Keeper(C++ 重写,解决 ZK 扩展性上限);
来源 3:Tinybird CTO 明确要求至少 3 个 ZK 副本、且必须与数据节点物理隔离——"ZK 和数据库同机,机器一过载就全慢、最终全失败,表变成只读",这是纯粹的额外硬件与运维成本;
来源 5:Cloudflare 在 part 数涨到 16 万/副本后,ZK 同样出问题,原文预告"也许哪天讲讲我们的 100GB ZooKeeper 集群的故事"。
证据等级
`多方印证(3 个独立来源)`,具名客户 ×3(TechWolf、Tinybird、Cloudflare)。
最后核验
2026-10-03
备注
与现有深水区三(复制与一致性)部分重叠,但"ZK 运维税"角度在深水区中未展开。

ClickHouse 年份:—

Mutation:ALTER UPDATE 是整 part 重写的异步作业

多方印证
性能问题
一句话
`ALTER TABLE ... UPDATE/DELETE` 不原地改行,而是把受影响的 part 整个重写一遍——改几行逻辑行,代价按 part 大小算。
窄场景
把 ClickHouse 当 OLTP 用、需要频繁单行/小批量 UPDATE/DELETE 的业务;大表上跑大范围 mutation 的运维窗口。
机制
mutation 是异步后台任务:为每个受影响 part 生成重写后的新 part,旧 part 标记待删;写放大与受影响 part 的总大小成正比,与逻辑修改行数无关;默认异步、提交后不可普通回滚(只能 `KILL MUTATION`),查询可能同时读到新旧 part;大 mutation 与后台 merge 抢 IO/CPU,拖慢整表。轻量 delete/update 按版本逐步改善,但"重写 part"的本质未变。
生产验证
来源 1:OpenPanel 创始人——"ClickHouse was never designed for frequent updates or deletes. It's a write-once, append-forever kind of database…painful if you expect relational behavior. I still run into these kind of issues today",并表示指望 beta 中的 lightweight updates 救命;
来源 2:Tinybird 把"Mutations"列进必须监控的卡死清单——"Things get stuck sometimes, and killing the queries does not always work"。
证据等级
`多方印证(2 个独立来源)`,具名客户 ×2。
最后核验
2026-10-03
备注
与现有深水区二(Mutation 重写税)与吐槽清单"ALTER UPDATE/DELETE"行主题重叠,互为佐证。

ClickHouse 年份:—

没有优化器,你就是优化器:JOIN 能把内存吃光

多方印证
性能问题
一句话
ClickHouse 没有 Postgres/MySQL 那样的全功能查询优化器,大表 JOIN 默认 hash join 会把右表整个装进内存——不是变慢,是直接 OOM 被杀。
窄场景
BI/临时分析里的大表 JOIN、宽结果返回、高基数聚合状态列(如 `uniqExactState`)、`index_granularity` 设得过小的表。
机制
默认 hash join 先把右表完整建成内存 hash table 再扫左表;大右表直接触发 `MEMORY_LIMIT_EXCEEDED` 杀查询。排序键是物理布局合同,选错列查询退化 10-100 倍且无法低成本重排。聚合状态列(如高基数 `uniqExactState`)在合并时能把整台机器拖死;`index_granularity` 低于 128 同样可能拖垮服务器。`max_memory` 等参数是"熔断器"不是"优化器"。
生产验证
来源 2:Tinybird——"ClickHouse does not have an optimizer; you are the optimizer",排序键设计不好"you are losing 10-100x on your queries","even ClickHouse has a max total memory config, and it'll OOM",`uniqExactState` 高基数列"can kill your cluster on merges",`index_granularity` 别低于 128;
来源 1:OpenPanel——"It doesn't plan your joins intelligently. If you join two big tables, it'll happily try and load everything in memory and die trying…You'll notice when you have a bad join since it will take ages or die trying"。
证据等级
`多方印证(2 个独立来源)`,具名客户 ×2。
最后核验
2026-10-03
备注
与现有深水区五(JOIN 内存爆炸)、深水区六(排序键)与吐槽清单"默认 hash join"行主题重叠,互为佐证。

ClickHouse 年份:—

自建的便宜是假象:副本数 × SSD × Keeper 都是钱

多方印证
成本账单
一句话
单机 ClickHouse 便宜是真的,但生产要的副本数、SSD、Keeper 节点、运维人力加起来,"便宜"只存在于 benchmark 里。
窄场景
从单机 POC 放大到生产多副本集群;用 SSD 装全部数据的团队;被 ClickHouse Cloud 账单刺痛后转自建的团队。
机制
本地盘架构下每个副本都要存全量数据:300TB 表 × 10 副本(1000 QPS ÷ 单副本 100 QPS)= 3000TB SSD;另加至少 3 个独立的 Keeper/ZK 节点;读写分离、冷热分层都要自己搭。自建省的是云账单,花的是工程师时间——"Once you grow, it's a full-time job"。
生产验证
来源 1:OpenPanel——云 vs 自建对照表:云"Cost at scale $$$…the bill can sting hard once you start pushing data around",自建"Running ClickHouse yourself works fine for smaller setups. Once you grow, it's a full-time job";
来源 3:Tinybird 给出副本成本算式(300TB × 10 副本 = 3000TB SSD,"you have a problem"),以及读写分离、按负载类型隔离副本的额外硬件开销。
证据等级
`多方印证(2 个独立来源)`,具名客户 ×2。
最后核验
2026-10-03

ClickHouse 年份:—

升级比社区版更复杂:数据库、工具链、扩展三者的版本要一起对齐

多方印证
运维复杂度升级迁移
一句话
EDB 不是单个数据库,而是一套互相咬合的发行版+工具链——升数据库大版本时,PEM、EFM、Barman/BART、迁移工具的版本兼容矩阵也要一起算,比社区 PG 麻烦一截。
窄场景
跑 EDB 全家桶(EPAS + PEM 监控 + EFM 故障转移 + Barman/BART 备份)的生产环境;做 PG 大版本升级(如 PG13→16)或 EDB 订阅续期换版本的团队。
机制
社区 PG 升级只需考虑 PG 本体与扩展;EDB 发行版在 PG 之上叠了自有分支补丁和一整套闭源工具链,每件工具有自己的版本线且与服务端版本绑定。升级变成"解多元一次方程":服务端、代理、监控、备份、故障转移组件必须落在兼容矩阵内,任一错位都可能导致监控断连或备份失败。订阅制的软件源又意味着版本获取节奏受厂商发布牵制。
生产验证
来源 2:Kanishka R.(中型企业,4.0/5)原话:"Complexity of Upgrades: Managing version upgrades and ensuring compatibility across EDB's ecosystem of tools sometimes feels more complex than working with the community edition."(升级复杂度:在 EDB 工具生态里管理版本升级、保证兼容性,有时比社区版更复杂);
来源 3:匿名企业已验证用户(4.0/5)原话:"Cost, Time consuming Updates"(贵,更新耗时)。
证据等级
`多方印证(2 个独立来源)`,G2 评价 ×2(含 1 具名)。
最后核验
2026-10-03

EDB Postgres / EDB Postgres Advanced Server(EPAS) 年份:—

内存三本账:dashboard 显示 16GB,内核按 32GB 杀你

多方印证
性能问题成本账单
一句话
dashboard 显示 used_memory 16GB,你按 16GB 配机器,凌晨 3 点内核按 RSS 31GB 把你 OOM 杀掉——Redis 的内存有三本账,只看一本必翻车。
窄场景
value 大小参差、高 churn 的实例;按 used_memory 做容量规划的团队;Redis 与 Valkey 同理(同一分配器、同一机制)。
机制
`INFO memory` 里三个数是三层意思:used_memory(分配器交给 Redis 的逻辑占用)、used_memory_rss(OS 看到的常驻集,内核只认它)。jemalloc 按 size class 取整分配(33 字节占 48 字节槽)→ 天然内部碎片;删除 key 只把槽还到 size class 的 free list,一整页没有活对象才还给 OS → RSS 只增不减;ratio < 1.0 不是"负碎片",是部分内存被换到 swap(最坏状态)。maxmemory 按 used_memory(逻辑数)执行淘汰,于是"一边拼命淘汰丢缓存命中、一边 RSS 远超 maxmemory"可以同时发生。
生产验证
来源 1:32GB 机器,used_memory 16GB,凌晨 3 点被 OOM killer 带走,RSS 逼近 31GB,"the graph wasn't lying, it was just answering a different question";
来源 2:排查清单明确要求同时看 used_memory_rss 是否远大于 used_memory(碎片信号),以及 mem_fragmentation_ratio 指标。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2。
最后核验
2026-10-03

Redis / Valkey 年份:—

持久化 fork:备份窗口就是延迟毛刺与内存翻倍窗口

多方印证
性能问题稳定与故障
一句话
RDB 快照和 AOF 重写都要 fork;大内存实例上,fork 复制页表阻塞主线程、写负载下 CoW 让内存短时翻倍——备份时刻就是毛刺时刻。
窄场景
数十 GB 数据集、写负载高的生产实例;容器/VPS 上内存配得紧的部署;开了 RDB 或 AOF 重写的实例。
机制
fork() 复制页表是 O(RSS) 操作,大内存实例可阻塞主线程数十至上百毫秒(`latest_fork_usec` 可观测);子进程 CoW:快照期间父进程每写一页内核就复制一页,极端下子进程持有接近完整第二份数据 → 父子 RSS 之和趋近 2 倍数据集;vm.overcommit_memory=0 时内核按悲观会计直接拒绝 fork → 后台持久化静默失败;AOF 重写收尾"追加重写缓冲区并替换文件"同样阻塞主线程。
生产验证
来源 1:16GB 数据集 + 写负载 + RDB save 进行中,父子进程 RSS 之和可逼近 32GB,"the save itself is what tips you into the killer";
来源 2:fork 阻塞原理、latest_fork_usec 监控指标、AOF 重写期额外阻塞;
来源 15(Valkey 实证,机制同源):2GB droplet 跑 1.2GB Valkey 数据集,BGSAVE 恰在流量 spike 时触发,CoW balloon,OOM killer 杀掉的正是 Valkey 自己。
证据等级
`多方印证(3 个独立来源)`,含 1 个 Valkey 侧实证。
最后核验
2026-10-03

Redis / Valkey 年份:—

noeviction 默认:内存一满,写请求直接被拒

多方印证
性能问题
一句话
默认 maxmemory-policy 是 noeviction——内存一满,Redis 不删数据、不崩溃,只是礼貌地拒绝你所有的写。
窄场景
当纯缓存用、没设 maxmemory 或没改默认策略就上生产的实例;把写失败当致命错误处理的客户端。
机制
noeviction 下达到 maxmemory 后写命令返回 OOM 错误,读不受影响;应用若把写失败当致命错误,缓存层就在最需要它的流量 spike 时变成 fail-closed 的硬依赖。另一极端 allkeys-lru:压力下优先淘汰热 key → 命中率雪崩 → DB 被压垮;volatile-* 若 key 没设 TTL 则无 key 可淘汰,等于没配。
生产验证
来源 3:used_memory 3.98G / maxmemory 4.00G / noeviction,结算服务所有 SET 被 "OOM command not allowed" 打回,"Redis does not crash. Redis just stops saying yes.";
来源 4:"I have seen this take down checkout on a Tuesday that was supposed to be quiet";并指出重启不解决问题,20 分钟后照样回来。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2(其一为付费墙前半可见的生产叙述,已如实标注)。
最后核验
2026-10-03

Redis / Valkey 年份:—

单线程 + O(N):一条 KEYS 卡死整个实例 3.8 秒

多方印证
性能问题
一句话
Redis 的快建立在"所有操作都是 O(1)"的假设上;一条 O(N) 命令就是扔进单线程引擎的手榴弹——KEYS * 在 800 万 key 的库上卡了 3.8 秒。
窄场景
key 数百万级的生产主库;后台脚本/数据分析同学直连生产库;大 Key(MB 级 String、百万成员集合、超长 Lua)。
机制
命令执行单线程,一条 KEYS / FLUSHALL / 大 HGETALL / LRANGE 0 -1 / 长 Lua 执行期间,所有其他客户端命令(含 PING)在 TCP 缓冲区排队;DEL 大 Key 是同步递归释放内存(UNLINK 4.0+ 才把释放丢给后台线程),且 UNLINK 只解决"删"的阻塞,读大 Key 依然阻塞。
生产验证
来源 5:数据分析同学在 800 万 key 生产主库执行 `KEYS user_tag_*`,SLOWLOG 显示 3.84 秒;Go 网关 P99 从 25ms 飙到 5000ms+,连接池耗尽级联雪崩,可用性跌至 20%;
来源 6:Mistake #6 "one slow command blocks every other client",50 万 key 的生产库上 KEYS * 是灾难;
来源 1:KEYS 是 O(n) 全程阻塞主线程,"排查事故时亲手制造事故"(用 KEYS 找大 key 的经典死循环)。
证据等级
`多方印证(3 个独立来源)`,含 1 个中文社区具名生产复盘。
最后核验
2026-10-03

Redis / Valkey 年份:—

热 Key:一个 key 吃掉一个分片,加节点也救不了

多方印证
性能问题
一句话
一个 key 吃掉 40% 命令量,它所在的 slot、分片、CPU 核心就被吃满——集群其他节点再闲也帮不上忙,加节点也没用。
窄场景
排行榜/全局计数器/全员刷新的 session blob/配置 key;读写热点皆可。
机制
单分片命令执行单线程,一个 key 固定属于一个 slot、一个分片;热点 key 的流量无法被分片数摊薄(扩容只切分 slot 空间,不切分 key);同分片的冷 key 也被拖慢(排队),p99 从 2ms 爬到 400ms 而命中率仍 99%,极具迷惑性;加副本只救读热点,写热点无解。
生产验证
来源 7:p99 2ms→400ms、命中率 99% 不变,单 key 占 40% 命令量导致分片 CPU 打满;"重启、垂直扩容、加副本(写热点下)都救不了";
来源 8:hot key 导致分片 CPU/内存热点,且 reshard 治标不治本——热点根因(坏哈希/热 key)不除,不均衡会回来。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2。
最后核验
2026-10-03

Redis / Valkey 年份:—

缓存击穿:一个 key 过期,DB 被打穿

多方印证
性能问题
一句话
热门 key 一过期,成千上万个并发请求同时 miss、同时回源——缓存兢兢业业工作了几小时,死在它"正常过期"的那 200 毫秒。
窄场景
高并发读热点 key 的 TTL 到期瞬间;部署/预热时批量写入相同 TTL 的 key 群(集体过期)。
机制
过期窗口内每个请求独立看到 miss、独立回源打 DB;连接池按稳态配,一波重复查询直接打满;更隐蔽的是"集体过期":同一秒写入的大批 key 五分钟后同一秒过期,单 key 防御拦不住。
生产验证
来源 6:Mistake #3,key 过期 → 上千并发同时 miss → 上千并发打 DB;防御:TTL jitter、SETNX 分布式锁 singleflight、后台预刷新;
来源 14:200ms 窗口内上千请求同时 miss 的完整机制推演,"the busier and more successful your hot key is, the worse the stampede when it finally expires"。
证据等级
`多方印证(2 个独立来源)`,个人博客 + 公司技术博客。
最后核验
2026-10-03

Redis / Valkey 年份:—

Cluster 跨槽:MULTI/EXEC 一到集群就报 CROSSSLOT

多方印证
运维复杂度
一句话
单机上一个 MULTI/EXEC 原子搞定的事,一上 Cluster 就报 CROSSSLOT——跨分片没有原子性,这是设计不是 bug,但教程从不提前说。
窄场景
从单机/哨兵迁到 Cluster 的团队;库存扣减、转账类多 key 原子操作;Lua 脚本触多 key。
机制
key 按 CRC16(key)%16384 落 slot,一 slot 一主分片;多 key 命令/事务/Lua 要求所有 key 同 slot,否则拒绝;逃生舱是 hash tag({...} 内子串参与哈希),但 tag 选错(如 {listing} 通用词)等于把全部数据赶到一个分片,人造热 Key;已上线 key 加 tag 等于重写 key 名,retrofit 痛苦。
生产验证
来源 9:库存预订三 key 落三 slot 三节点,MULTI 直接 CROSSSLOT,"most tutorials never mention it until you hit it in production";
来源 10(具名):"If you want to run a command that touches multiple keys at once, those keys generally need to live in the same hash slot","reaching for Cluster before you have that problem trades a real, current cost for a hypothetical future one"。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2。
最后核验
2026-10-03

Redis / Valkey 年份:—

Reshard:在线扩容不是免费午餐

多方印证
运维复杂度
一句话
Cluster 在线 reshard 被当成"后台小事",实际上是带流量的运维事件——迁 slot 期间吃带宽吃 CPU,延迟毛刺可能超过 SLA。
窄场景
集群扩容/缩容、slot 迁移;把 --cluster reshard 当日常操作跑的团队。
机制
迁 slot 要在源/目标节点间搬 key,持续消耗带宽与 CPU;客户端 topology 缓存过期会在新旧节点间 ping-pong(MOVED/ASK 重定向风暴);更根本的是:若不均衡的根因是热 key/坏哈希,reshard 只是把歪移到别处,歪还会回来——治标不治本。
生产验证
来源 8:reshard 期间 "latency spikes that may exceed acceptable SLAs";对坏哈希要极高的分片数才有效,等于拿大量闲置分片换均匀,浪费资源;
来源 10(具名):"moving slots between nodes as the cluster grows is an online operation but not a free one, and it adds load while it's happening"。
证据等级
`多方印证(2 个独立来源)`,个人博客 ×2。
最后核验
2026-10-03
备注
NextLevelDev 2026-07 有一篇 reshard 致 MOVED 风暴的生产叙述("Your Redis Cluster Reshard Has Been Running for 6 Hours"),因浏览器请求限流未能打开核实,未收录;如需可后续补充。

Redis / Valkey 年份:—

"全托管"但 WLM/VACUUM 还得自己调:几十亿行表的自动 vacuum sort 罢工

多方印证
性能问题运维复杂度
一句话
Redshift 自称托管数仓,但 WLM 队列、查询队列、VACUUM 策略仍是用户必修课;自动 vacuum sort 在几十亿行大表上直接不工作,大表维护还得人工排期。
窄场景
TB/十亿行级大表、高频 UPDATE/DELETE 的集群。
机制
Redshift 列存追加写,UPDATE/DELETE 产生死行与乱序;AUTO VACUUM DELETE 与自动表排序在后台做,但大表的 VACUUM SORT 代价高、自动调度覆盖不到,只能人工在低峰期跑 VACUUM,且 VACUUM 与 ALTER DISTSTYLE 等操作互斥。
生产验证
来源 5:TrustRadius 认证用户评论(页面未标注日期)——"Amazon Redshift is a Managed Service. But it is Not a 100% managed service. We still need to configure it with WLM settings, and add Query Queues... 'Vacuum'... They recently started doing automated vacuuming. Prior to that we had to do that at regular intervals.";
来源 5:TrustRadius 同页 Cloudwalker 评论(5 年经验,认证评论)——"Automatic vacuum sort doesn't work for several billion rows tables"。
证据等级
`多方印证(2 个独立来源)`,点评平台认证用户 ×2。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠(VACUUM 运维税)。

Amazon Redshift 年份:—

2024-12-16 全球大故障:10 个区域 13 小时,CTAS 和 window function 批量报 internal error

多方印证
稳定与故障
一句话
一次软件更新引入向后不兼容的元数据 schema 变更,23 个区域中 10 个约 13 小时无法执行查询或 ingest——下游客户看到的是批量 `"SQL execution internal error"`,特定于 CTAS 和带 window function 的 INSERT。
窄场景
2024-12-16 当天在受影响区域跑 ETL/ingest 的所有客户;依赖 Snowflake 做数据管道的下游 SaaS。
机制
服务端 rollout 的不兼容变更直接击穿查询引擎;客户端无任何自救手段,只能等 Snowflake 回滚。
生产验证
来源 15:Keboola 官方状态页(Snowflake 下游数据平台)——其 Snowflake transformations 大量报错 `"SQL execution internal error ... incident 5370475"`,"specific to CTAS and INSERT statements with window functions",19:30 UTC 确认美国区恢复;
另有 Network World、InfoWorld、The Register 同日独立报道同一事件(10 区域、13 小时;Snowflake 归因于 "backwards-incompatible database schema update")。
证据等级
`多方印证(2 个独立来源)`,下游平台状态页 + 三家独立媒体报道同一事件。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:—

自增 ID 跳号、不从 0 起,容灾还要手工复制序列

多方印证
运维复杂度生态与信任
一句话
不同表的自增 ID 跳号、不从 0 开始;做容灾时还得把自增序列从生产环境复制到容灾环境——MySQL 用户的直觉在这里处处碰壁。
窄场景
从 MySQL 迁移过来、依赖自增 ID 连续/可预测的业务;有异地容灾、需要序列在两边对齐的部署。
机制
TiDB 的 AUTO_INCREMENT 是按 TiDB 节点批量申请、缓存分配的(`auto_increment_increment/offset` 语义与 MySQL 不同),各表独立计数,ID 不保证连续、也不从 0 起;序列(sequence)是独立对象,不在数据复制流里,容灾端不会自动对齐,切换后可能发号冲突或跳号。
生产验证
来源 4:PeerSpot 具名评价,Casafari 高级工程师 Ivan Makarenko——"IDs in different tables jump and do not start from zero"(引自原文);
来源 4:PeerSpot 具名评价,Verinite 首席顾问 Shailesh Shandilya——需要把自增序列从生产环境复制到容灾环境。
证据等级
`多方印证(2 个独立来源)`,具名用户评价 ×2。
最后核验
2026-10-03

TiDB 年份:—

事务日志账单暗坑:向量重嵌一次生成约 23GB WAL

单方声音
成本账单
一句话
AlloyDB 的 WAL 既是复制机制也是备份机制——7 天之后的日志保留单独收费,向量场景一次全量重嵌就能烧出几十 GB 的 WAL 账单。
窄场景
在 AlloyDB 上跑 RAG/向量检索、定期全量重嵌 embedding 的团队;写放大大的向量工作负载。
机制
AlloyDB 是日志型架构,事务日志支撑跨区复制与 PITR;前 7 天日志保留免费,超过 7 天按 $0.113/GB/月收费(备份同价)。向量重嵌本质是全表大 UPDATE,MVCC 下每行新版本都要写 WAL——10M 条 768 维向量一次全量重嵌约产生 23GB WAL,日志保留费用随重嵌频率线性累积。
生产验证
来源 1,2026-04 独立 field notes——明确点出 "The transaction log cost is a gotcha for write-heavy vector workloads",给出 10M embeddings / 768 维 / 全量重嵌 ≈ 23GB WAL 的测算,并提醒 "Plan accordingly"。
证据等级
`单方声音`,独立博客 field notes(细节充分:具体单价、23GB 测算过程、重嵌场景)。
最后核验
2026-10-03

Google AlloyDB(AlloyDB for PostgreSQL) 年份:2026

托管黑盒:无真 SUPERUSER、扩展白名单、存储内部不透明

单方声音
生态与信任
一句话
"PostgreSQL-compatible, not PostgreSQL"——超管权限被阉割、扩展只能用白名单、存储层文档语焉不详,习惯按原理排障的团队会很难受。
窄场景
依赖 PG 原生 superuser 操作、第三方/C 扩展(如全文检索、时序类扩展)的团队;习惯对照公开架构文档做性能归因的团队。
机制
托管 AlloyDB 只给 `alloydbsuperuser`(与其他托管 PG 一样,无真 SUPERUSER);扩展走 allow-list,自定义 C 扩展不支持;存储层被描述为 "intelligent",但 Google 公开的复制协议、仲裁、写路径细节远少于 AWS 对 Aurora 的披露——客户对实例之下发生的事情可见性更低。
生产验证
来源 4,2026-05 独立评测 "Non-brochure concerns" 章节——逐条列出:存储文档 "thinner than Aurora's","the customer has less visibility into what is happening under the instance";"AlloyDB is PostgreSQL-compatible, not PostgreSQL. Behaviors differ at the edges, and teams that rely on stock internals for operational reasoning will be frustrated.";扩展白名单与无真 SUPERUSER 同列为 Negatives。
证据等级
`单方声音`,独立技术评测(多条 concerns 出自同一篇系统性评测)。
最后核验
2026-10-03

Google AlloyDB(AlloyDB for PostgreSQL) 年份:2026

扩缩容是中断性事件:改规格要重启,HA 下触发故障转移

单方声音
运维复杂度
一句话
AlloyDB 实例改规格不是在线的——要重启实例,HA 部署下还会触发一次故障转移,扩缩容得当成计划内中断来排。
窄场景
负载波动大、需要频繁纵向扩缩容的团队;把"弹性"当成理所当然的云原生用户。
机制
AlloyDB 计算实例仍是 VM 形态的规格绑定,改 vCPU/内存需要重启实例进程;在 HA 部署(主+备跨区)下,重启走故障转移路径完成。无论扩容还是缩容,都是 operationally significant 的事件——和"无缝弹性"不是一回事。
生产验证
来源 4,2026-05 独立评测——"a resize involves an instance restart and, on an HA deployment, a failover. Both scale-up and scale-down are operationally significant events. Teams used to elastic-compute models tend to underweight how disruptive a resize is."
证据等级
`单方声音`,独立技术评测。
最后核验
2026-10-03

Google AlloyDB(AlloyDB for PostgreSQL) 年份:2026

Resources exceeded:serverless 不等于无限,估错资源就拒绝执行

单方声音
性能问题
一句话
BigQuery 按"预估扫描量"给你分配执行资源——查询实际比预估重,它不加价接着跑,而是直接报错让你重写 SQL。
窄场景
内存密集型写法(大 GROUP BY、窗口函数、无 LIMIT 的 ARRAY_AGG);数据量增长后原本能跑的定时任务突然失败的数据管道。
机制
BigQuery 根据扫描量预估分配 slot/内存,单槽内存有硬上限;`ARRAY_REVERSE(ARRAY_AGG(…))` 这类写法会把每组的全量宽行数组物化在内存里再取一个,数据量一涨就触顶(Peak usage: 103% of limit);报错信息 "Resources exceeded during query execution: The query could not be executed in the allotted memory";解法是改写查询(如 `ARRAY_AGG(… LIMIT 1)`),而不是加钱扩容——serverless 的自动扩缩在此处不兜底。
生产验证
来源 7,Mozilla bigquery-etl 公开 PR #9713(2026-07-22)——`search_terms_daily_v1` 自 2026-06-18 起在 Airflow 中持续失败,根因为 merino 流量增长后每组数组超内存上限;修复顺带暴露了更惨的后果:源表只保留 ~14 天,2026-06-18 → 2026-07-07 的数据**永久不可恢复**,形成数据缺口。具名生产事故,有 Bugzilla 编号(Bug 2048966)。
证据等级
`单方声音`,具名生产事故修复记录(Mozilla 公开仓库 PR,含事故时间线与数据缺口文档)。
最后核验
2026-10-03
备注
该机制早在 2019 年就有用户在 Google 开发者论坛记录过("Cartesian Blast"案例:估错资源后拒绝执行而非加价继续),Mozilla 2026 年事故证明该行为延续至今,故以新事故为主要证据。

Google BigQuery 年份:2026

分区键改出查询计划锁风暴:Cloudflare 账单管线的血泪

单方声音
性能问题
一句话
为了做按租户 retention 把分区键从 `(day)` 改成 `(namespace, day)`,结果查询计划阶段的全局 part 列表锁变成瓶颈,账单作业差点赶不上出账 deadline。
窄场景
part 数以万计、并发查询数百的大表;分区键含高基数列(租户/namespace)且 part 总数持续增长的集群。
机制
查询计划阶段每个线程都要拿 `MergeTreeData` 的**排他锁**、完整拷贝全表 part 列表、再按分区过滤。part 数涨到几万后,火焰图显示 45% 的叶查询 CPU 花在 `filterPartsByPartition`,超过一半的查询耗时是在等这一把互斥锁——"所有线程排成一队"。这不是读了更多 part,而是 part 的"存在本身"拖慢了计划。
生产验证
来源 5:Cloudflare 官方工程博客(2026-05)具名深挖——Ready-Analytics 表(2PiB,数百万行/秒写入),2025-01 开始迁移,3 月底账单聚合作业持续变慢;排查数天才发现 part 总数(3 万→一年后 16 万/副本)与查询耗时强相关。他们写了三个补丁:排他锁改共享锁(立竿见影)、延迟拷贝 part 向量(只拷贝过滤后的列表,已合入上游 PR #85535,随 25.11 发布)、按 namespace 二分查找裁剪 part(2026-03 上线,查询耗时再降 50%)。文末坦言"uneasy truce":优化只是买时间,分区方案长期是否正确仍是开放问题。
证据等级
`单方声音`,具名深度生产复盘(Cloudflare 官方工程博客,含火焰图数据与上游合入记录)。
最后核验
2026-10-03
备注
与现有深水区一(part 机制)部分重叠,但"查询计划锁争用"这一机制在深水区中未覆盖。

ClickHouse 年份:2026

后台合并 OOM:JSON 动态列撑爆 merge 内存

单方声音
稳定与故障
一句话
JSON 动态列在后台合并时要把所有被追踪的子列解压进内存,600GB 的日分区直接把 merge 干到 `MEMORY_LIMIT_EXCEEDED`,失败的合并反复重试还拖垮了写入。
窄场景
用 JSON/Object 动态类型存半结构化日志、分区粒度过大(日分区数百 GB)、merge 内存上限收紧的 ClickHouse Cloud/自建集群。
机制
MergeTree 后台合并需要把参与合并的 part 的列数据读入内存;JSON 列的每个动态子路径都是独立子列,`max_dynamic_paths=64` 意味着合并时要同时解压 64+ 个子列,内存需求随分区大小线性放大,超过 `max_memory` 上限即被杀;失败的合并会不断重试,重试风暴反过来挤占写入的内存/IO/CPU。
生产验证
来源 7:icanbwell/fhir-server 公开 PR(2026-06)——生产事故,ClickHouse 官方支持工单 Case #00046381(2026-05-31):`fhir.AccessLog` 的 `details JSON(max_dynamic_paths=64)` 列在约 600GB 日分区上合并时 OOM(Code 241),超过 14.4 GiB 上限,"Continuously retrying-and-failing merges starved inserts of memory, IO, and CPU",造成写入延迟尖刺。修复:`max_dynamic_paths` 64→16(实际只用 11 个 key,merge 内存降约 4 倍)、分区改按月、`insert_deduplicate=0`。
证据等级
`单方声音`,具名开源项目生产事故(公开 PR + 官方支持工单号;PR 正文为 AI 辅助起草,已如实标注)。
最后核验
2026-10-03

ClickHouse 年份:2026

Distributed 表"写入成功"但数据静默堆积:队列无上限,最后 inode 耗尽整机宕机

单方声音
稳定与故障运维复杂度
一句话
写 Distributed 表只落本地磁盘队列、后台线程异步刷往分片——刷失败客户端无感知,队列默认无上限,文件涨到数百万耗尽 inode,`df -h` 还有空间但整机无法建文件。
窄场景
多分片 Distributed 表写入;Keeper 抖动、超大 block、并发槽位配错的集群。
机制
三根因:Keeper 挂了→底层表只读、队列持续堆积;单个超大 block(如 5 亿行)触发 `max_execution_time` 被杀,又因队列按分片**串行**刷而成为"瓶塞"卡住后面所有正常 block;`max_concurrent_queries_for_user` 设太低,SELECT 占满槽位致后台 INSERT 拿不到执行位。缓解靠 `bytes_to_throw_insert` 当熔断器 + 告警 `DistributedFilesToInsert`——但默认全都没开。
生产验证
—
证据等级
`单方声音`,具名作者多环境复现、机制完整。
最后核验
2026-10-07

ClickHouse 年份:2026

备份在超多表下慢到不可用:FREEZE 与哈希查询抢锁,9.5 小时 vs 26 分钟

单方声音
性能问题运维复杂度
一句话
约 5 万张 MergeTree 表做一次全量备份要 9.5 小时——`FREEZE` 与取 `hash_of_all_files` 的查询在抢同一把锁,单表 FREEZE 从 100ms 膨胀到 5 秒;跳过该查询后备份降到 26 分钟。
窄场景
表数量极多(万级)的集群;用 clickhouse-backup 做全量备份。
机制
备份工具为校验完整性从 `system.parts` 取 `hash_of_all_files`,与 FREEZE 存在互斥锁争用;表越多争用越烈。用户自己提 PR 加 opt-in 开关绕过。
生产验证
—
证据等级
`单方声音`,生产数据具体的公开 issue。
最后核验
2026-10-07

ClickHouse 年份:2026

没有多语句事务:一次 sync 的新旧数据同时可见,逼得用户自建"类事务层"

单方声音
运维复杂度生态与信任
一句话
ClickHouse 不支持多语句事务——新一轮 sync 写入时用户同时看到新旧两批数据,CloudQuery 被迫在应用层造了个 high-level transaction layer 让每次 sync 对用户呈现原子性。
窄场景
ETL sync 场景;需要"一次同步原子可见"的数据产品。
机制
"technically wasn't a race condition, but it created a confusing experience"——没有跨语句原子提交,应用层只能自己实现"事务层"。官方有实验性事务,但限制极多(见"缺口"卡)。
生产验证
—
证据等级
`单方声音`,具名公司生产复盘。
最后核验
2026-10-07

ClickHouse 年份:2026

物化视图是异步黑盒:失败了不知道、何时算完不知道,CloudQuery 直接弃用

单方声音
运维复杂度
一句话
MV 相对创建/insert 语句是异步的——"Lack of visibility into failures…Unpredictable completion timing",换表迁移时无法确定 MV 何时追完,且无内置历史重算;CloudQuery 弃用 MV,改用定时任务显式刷新的 snapshot 表。
窄场景
用 MV 做预聚合/换表迁移的团队。
机制
MV 无失败可见性、无完成时间可预测性、无内置回填机制。"we know exactly what ran, when it ran, and what the output was—no guessing, no race conditions, no half-finished state."——这是弃用 MV 改手工快照表的理由。
生产验证
—
证据等级
`单方声音`,具名公司。
最后核验
2026-10-07

ClickHouse 年份:2026

ClickHouse Cloud 迁回自建是个坑:备份恢复不干净、查询行为有细微差异

单方声音
升级迁移
一句话
"We assumed we could just back up our managed cluster and restore it locally. Turns out, not so simple."——备份/恢复、查询行为、配置三处都有细微差异,"干净迁移"变成 patching/testing/head-scratching。
窄场景
从 ClickHouse Cloud 迁回自建(成本/合规原因)。
机制
Cloud 与自建在配置、查询行为上存在细微差异,备份恢复过去不保证行为一致。Cloud 起步快,迁出难——"上云容易下云难"的 ClickHouse 版本。
生产验证
—
证据等级
`单方声音`,具名公司。
最后核验
2026-10-07

ClickHouse 年份:2026

可靠写入没有官方答案:不用 Kafka,很多人根本不知道怎么把数据"可靠地"写进去[来源存疑]

单方声音 来源存疑
运维复杂度生态与信任
一句话
"every time I try to use it, I get stuck on 'how do I get data into it reliably'…inevitably end up with 'by combining clickhouse and Kafka', at which point my desire to keep going drops to zero."——方案全靠自拼:Vector 缓冲、攒批到 S3、Python connector 攒 100K 批。
窄场景
第一次用 ClickHouse 做 ingestion 的团队;不想引入 Kafka 的轻量场景。
机制
没有官方"标准写入姿势":小批次写触发 Too Many Parts,大批次要自己攒,不用 Kafka/ZK 就没有开箱即用的可靠写入语义。refreshable MV 当时还是 experimental。
生产验证
—
证据等级
`单方声音[来源存疑]`,多人附和但全匿名。
最后核验
2026-10-07

ClickHouse 年份:2026

分布式 JOIN 忘写 GLOBAL:结果静默变错,没有任何报错[来源存疑]

单方声音 来源存疑
稳定与故障
一句话
分片集群上对 Distributed 表做普通 JOIN/IN,每分片只跟自己本地的数据 join——"returns results that are silently smaller or different than expected…with no error at all…nobody investigates a query that returns a plausible-looking, wrong number."
窄场景
分片集群上的 JOIN/IN 查询;从单机迁到分布式的团队。
机制
普通 JOIN 只在分片本地执行,不加 GLOBAL 就得不到全局正确结果——但查询"正常"返回,看起来合理、实际是错的。修法是 GLOBAL JOIN/IN,但"记得加"是人的责任。
生产验证
—
证据等级
`单方声音[来源存疑]`。
最后核验
2026-10-07

ClickHouse 年份:2026

轻量更新的生产 bug:patch parts 致 MERGE_PARTS 卡死、重试 4000+ 次[来源存疑]

单方声音 来源存疑
稳定与故障
一句话
`fhir.dim_practitioners` 表出现 stuck MERGE_PARTS、>4000 次重试——"Likely cause: a ClickHouse bug in the lightweight updates/deletes ('patch parts') implementation for 25.10+",关联上游 open issue #89836、#89472。
窄场景
用轻量更新(25.10+ patch parts)的表。
机制
patch parts 实现的 bug 致合并队列卡死、反复重试拖垮集群。与同一团队的 JSON 合并 OOM 事故形成"连环踩坑"。
生产验证
—
证据等级
`单方声音[来源存疑]`。
最后核验
2026-10-07

ClickHouse 年份:2026

Mutation 报成功但数据是坏的:静默损坏 + 重启崩溃循环 + 静默跳行[来源存疑]

单方声音 来源存疑
稳定与故障
一句话
UInt32→IPv6 的 ALTER UPDATE 被接受但写下 4 字节的"UInt32 形"数据到 16 字节列——`mutations_sync=2` 返回成功、`is_done=1`、无日志,坏数据只有读时才爆 Code 48;随后复合 RENAME 撞上坏 part 进入无限重试,重启后继续崩溃→systemd 重启循环。
窄场景
大表 ALTER UPDATE/类型变更;带 DEFAULT 列的 UPDATE。
机制
三宗"报成功但结果错":类型变更写坏数据(成功+无日志)、RENAME 撞坏 part 无限重试(KILL MUTATION 在启动期无效)、带 DEFAULT 的列 UPDATE 约一半行被静默跳过且重跑写不进去。共同 UX 失败:"the mutation subsystem reports success while the underlying write either didn't happen or happened incorrectly."
生产验证
—
证据等级
`单方声音[来源存疑]`。
最后核验
2026-10-07

ClickHouse 年份:2026

字典不是免费午餐:逐行 dictGet 成瓶颈,外部源 credential 得写进配置

单方声音
性能问题运维复杂度
一句话
用字典替代 JOIN 后内存从 50GB+ 降到 3.5GB,但"if you perform a dictionary lookup per row (e.g. using dictGet in the SELECT for millions of rows), it can bottleneck";从集群内其他表建字典还得把 credential 写进 SOURCE 配置。
窄场景
用字典替代大表 JOIN;从外部源/自定义 SQL 建字典。
机制
逐行 dictGet 在数百万行上成瓶颈;字典源引用集群内表/自定义 SQL 时 credential 必须写进配置(后被 named collections 缓解),带来配置复杂度和安全顾虑。
生产验证
—
证据等级
`单方声音`,具名公司次要抱怨。
最后核验
2026-10-07

ClickHouse 年份:2026

分布式语义全靠手写:加分片不搬历史数据,"no safe built-in online rebalance"

单方声音
运维复杂度生态与信任
一句话
ClickHouse 没有"透明分布式"——每分片建本地表 + 外层 Distributed 表 + 手设分片键 + DDL 全加 ON CLUSTER;更狠的是加分片不搬历史数据,新分片只接新写入,老分片持续 hot。
窄场景
集群扩容;从 Snowflake/BigQuery/Doris(透明分布式)迁来的团队。
机制
OneUptime 运维手册称为扩容前必读的 "biggest gotcha":"Adding a shard does not move historical rows... ClickHouse has no safe built-in online rebalance, and naively re-inserting live rows through the Distributed table duplicates them." 想搬历史数据只能停写手动导。
生产验证
—
证据等级
`单方声音`,重度用户运维手册为主。
最后核验
2026-10-07

ClickHouse 年份:2026

强制遥测:免费版关不掉

单方声音
生态与信任
一句话
Enterprise Free 不要钱,但遥测必须开——"免费"的代价是你的集群使用数据持续回传,且没有 opt-out。
窄场景
对数据出境/合规敏感(金融、医疗、政务)的自托管用户;内网隔离集群;把"免费"当纯开源用的团队。
机制
24.3 起自托管统一 Enterprise 许可,年营收 <1000 万美元免费;免费档的条款里遥测是强制的、不可关闭(来源 6)。这不是技术缺陷,是商业模式写进许可条款:用数据回传换免费。
生产验证
来源 6,2026-09——"CockroachDB Core 于 2024-11-18 退场,被 Enterprise Free 许可取代(年营收 <1000 万美元企业);代价是强制遥测,免费许可下无法关闭,且集群还得自己运维打补丁。"
证据等级
`单方声音`,独立评测博客(细节充分:退场日期、门槛、遥测不可关闭三要素齐全)。
最后核验
2026-10-03

CockroachDB 年份:2026

迁出要重写:CRDB 特有构造没有 PG 对应物

单方声音
升级迁移
一句话
迁入时"PG 线协议兼容",迁出时才发现用了 `unique_rowid()` 默认值、hash-sharded 索引、多 region 表 locality——这些在真 PG 里都不存在,重写 schema 跑不掉。
窄场景
从 CockroachDB 迁回 Postgres/Neon/Aurora 的团队;当初为压热点行按 CRDB 官方指南改了主键与索引设计的项目。
机制
厂商锁定不一定靠许可证,靠方言。CRDB 为分布式做的官方最佳实践(UUID/hash-sharded 主键打散热点、`unique_rowid()`、REGIONAL BY ROW 等 locality 语义)都是 PG 没有的概念;迁出等于一次反向 schema 改造。来源 10 也承认:"迁离分布式 SQL 主库去单区方案是重新架构,不是改配置。"
生产验证
来源 6,2026-09——从 CockroachDB 迁到 Neon 的检查项:"注意 CockroachDB 特有功能:unique_rowid() 默认值、hash-sharded 索引、多 region 表 locality 在 Postgres 里没有直接对应物,需要重写。"
证据等级
`单方声音`,独立评测博客(迁移检查清单,细节充分)。
最后核验
2026-10-03

CockroachDB 年份:2026

auto-stop 的两道裂缝:BI 心跳"幽灵"让它永不触发,5 分钟下限还是 UI 定的

单方声音
成本账单
一句话
Tableau 每 8 分钟一次的心跳被判定为"活跃查询",10 分钟 auto-stop 计时器无限重置——一个周末烧掉 $14k;而 5 分钟的下限只是 UI 的假限制,API 早就能设 1 分钟。
窄场景
Serverless SQL warehouse 对接 BI 工具长连接;用默认 10 分钟 auto-stop 的团队。
机制
Serverless 仓库的"空闲"按是否有查询判定,BI 工具对 `system.information_schema` 的周期性心跳足以让计时器永远归零;Large 规格整周末为空查询全速烧 DBU。另一道裂缝:5 分钟最小值并非平台限制,只是控制台 UI 的约束,API 可设 1 分钟——差值是静默烧钱。
生产验证
—
证据等级
`单方声音`,两篇独立生产复盘(机制不同、主题同属 suspend 失效)。
最后核验
2026-10-07

Databricks 年份:2026

账单根本拆不清:billing 记录里 custom_tags 全空,分账靠事后"刑侦"

单方声音
运维复杂度成本账单
一句话
计费记录的 custom_tags 是空的、service principal 是一串不透明 UUID——钱花完之后,只能从 query history 反向"刑侦"这是谁花的。
窄场景
多团队共享 warehouse;FinOps 要做成本分摊/chargeback 的平台团队。
机制
`system.billing.usage` 的粒度是 compute-hour,没有 query_id/statement_id,join 不上 `system.query.history`;budget policy 打的标签不追溯历史;共享仓库的标签只能归到"shared"。归因基础设施缺失,账单精确到分却不知道该递给谁。
生产验证
—
证据等级
`单方声音`,具名工程师生产复盘为主。
最后核验
2026-10-07

Databricks 年份:2026

Auto Loader 默认"目录扫描":S3 LIST 请求在规模下变成烧钱项

单方声音
性能问题成本账单
一句话
Auto Loader 默认用目录 LIST 轮询发现新文件,规模一大,S3 LIST API 本身变成账单上的一项——切事件通知模式后 ingestion 从 15 分钟降到 3 分钟。
窄场景
S3/ADLS 上文件多、到达频繁的 ingestion;直接用默认配置的 Auto Loader。
机制
directory listing 模式周期性对存储路径发 LIST 请求做全量扫描;文件数上来后单次扫描可达 15 分钟,LIST 按次计费且拖慢 ingestion。事件通知模式(SNS+SQS)只处理增量,成本与延迟双降。
生产验证
—
证据等级
`单方声音`,具名客户生产复盘。
最后核验
2026-10-07

Databricks 年份:2026

实例族 DBU 费率迷雾:内存翻倍的机器反而便宜一半

单方声音
成本账单
一句话
DBU 费率不是按"算力"统一定价的——换到内存翻倍(64GB)的内存优化型实例,账单反而便宜了一半。
窄场景
按默认推荐选通用型实例的团队;做实例选型的成本优化。
机制
"the DBU rate is not the same across all instance families"——不同实例族的 DBU 费率不同,内存优化型实例的费率低到足以抵消规格上涨。按"配置越高越贵"的直觉选型,会系统性选贵。
生产验证
—
证据等级
`单方声音`,具名客户实测。
最后核验
2026-10-07

Databricks 年份:2026

Auto Loader 的运维坑二连:schema 推断只看先到文件,checkpoint 还能自我摄取

单方声音
运维复杂度
一句话
schema 推断只采样"先到的文件",回填历史数据时类型漂移全进 _rescued_data;更绝的是 checkpoint 若嵌套在源路径里,Auto Loader 会把自己的 RocksDB 文件当数据源吃掉。
窄场景
历史数据回填(backfill);checkpointLocation 随手放在源路径子目录的流任务。
机制
首次运行只采样最多 50GB/1000 文件推断 schema 并写入 schema location 成"合同"——"schema inference is only as good as your sample, and your sample is not random — it's whatever landed first." 回填 EDI JSON 时早期 string 后期 double 的列全被 rescue。另一坑:checkpoint 目录若在被监控路径内,Auto Loader 把 checkpoint 自己的 .zip/.log 反序列化(FAILED_READ_FILE.NO_HINT),RocksDB 损坏后关选项重跑也无法恢复,只能重置 checkpoint。
生产验证
—
证据等级
`单方声音`,两起独立运维事故(机制不同、同属 Auto Loader 运维坑)。
最后核验
2026-10-07

Databricks 年份:2026

UC External Location 陷阱:报错与 IAM 真实配置脱节,200 个 job 的迁移教训

单方声音
运维复杂度升级迁移
一句话
S3 路径没显式注册为 UC External Location,作业报 cryptic 的 PERMISSION_DENIED——即使底层云 IAM 角色配得完全正确,报错也指不到点子上。
窄场景
200+ 生产 job 的 Hive → UC 迁移;跨云存储路径多的老工作区。
机制
UC 把权限链条拆成两段:云 IAM 管存储、UC 管 External Location 注册。两段脱节时报错只说权限不足,不告诉你是"没注册";另有 metadata sync 窗口期双写损坏分区元数据、Hive 视图需重写 DDL。
生产验证
—
证据等级
`单方声音`,独立工程师具名生产复盘。
最后核验
2026-10-07

Databricks 年份:2026

Airflow 侧点了 skip,Databricks 侧照跑不误:"幽灵执行"写重数据

单方声音
稳定与故障运维复杂度
一句话
`DatabricksWorkflowTaskGroup` 把整个 workflow 打包成一次 Jobs API 调用,Airflow 的 skip 信号传不进去——Airflow UI 显示 Skipped,Databricks 侧任务照常运行、写数据、完成。
窄场景
Airflow 编排 Databricks workflow 且依赖条件跳过(回填、分支逻辑)。
机制
skip 只在 Airflow 侧生效(AirflowSkipException),Databricks 侧收到的是一次性整包调用,感知不到上游的跳过语义。结果:静默数据重复写入 + 审计轨迹失真(两边 UI 显示的状态互相矛盾)。
生产验证
—
证据等级
`单方声音`,具名工程师复盘 + 开源 issue 印证。
最后核验
2026-10-07

Databricks 年份:2026

LakeFlow 文件到达触发器:同名覆盖不触发、删过的路径"永远不报错也不触发"

单方声音
稳定与故障运维复杂度
一句话
从 Airflow 切到 LakeFlow 拿文件到达触发器做数据感知调度,结果同名文件覆盖不触发、指向已删路径的触发器"never errors and never fires"——静默不跑比报错更贵。
窄场景
用 LakeFlow file arrival triggers 替代 cron/Airflow 的团队。
机制
触发器多个 gotcha:同名覆盖写不触发、旧文件元数据过期后被修改会误触发、S3/GCS 上指向已删除路径的触发器既不报错也不触发;且切过去后失去 Airflow 的全局 DAG 视图,排查链路变长。
生产验证
—
证据等级
`单方声音`,社区用户回帖。
最后核验
2026-10-07

Databricks 年份:2026

notebook 习惯污染定时任务:一行 restartPython() 让 Job 随机失败且报错误导

单方声音
运维复杂度
一句话
notebook 里顺手写的 `dbutils.library.restartPython()` 被带进定时任务,在 Job 模式下杀死 Python 进程被判定为 Cancelled——报错却是 `AZURE_QUOTA_EXCEEDED_EXCEPTION`,排查方向全错。
窄场景
notebook 开发完直接转成 workflow 定时任务的团队;上云迁移后 job 随机失败。
机制
交互式 notebook 的"重启 Python 进程换依赖"习惯,在 Job 运行时语义完全不同:进程被杀 → runner 判 Cancelled → 冒出来的却是 Azure 配额超限的报错。误导性报错让一次"代码习惯问题"被当成"云配额问题"查了半天。
生产验证
—
证据等级
`单方声音`,具名从业者生产复盘。
最后核验
2026-10-07

Databricks 年份:2026

Shallow clone 的足枷:源表 VACUUM 会打坏 clone,UC 下还不能覆盖重建

单方声音
运维复杂度
一句话
Snowflake zero-copy clone 是元数据级 CoW;Databricks shallow clone 一串限制:源表一跑 VACUUM 就 FileNotFoundException、UC 下不能 CREATE OR REPLACE 覆盖、streaming 表不能做 clone 源——还有用户把 clone drop 掉后源表 VACUUM 永久损坏。
窄场景
用 clone 做测试环境、蓝绿发布的团队;UC 托管表。
机制
shallow clone 共享源表文件,VACUUM 清掉源文件即打坏 clone;UC 下覆盖重建 clone 不被允许;2023 年有用户经 SQL warehouse drop 掉 shallow clone 后源表 VACUUM 永久损坏(是否修复未见公开说明)。
生产验证
—
证据等级
`单方声音`,用户 bug 报告 + 官方文档。
最后核验
2026-10-07

Databricks 年份:2026

Delta Sharing 传 1.3TB 数据,在 60 分钟 token 过期处翻车

单方声音
性能问题运维复杂度
一句话
Delta Sharing recipient token 默认寿命 3600 秒——TB 级传输超 1 小时,整点处以 400 Bad Request 崩掉;修要改 workspace 参数且只对新 share 生效,老 recipient 得逐个手动 rotate。
窄场景
经 Delta Sharing 做 TB 级跨平台迁移/分享(如 Databricks→BigQuery)。
机制
token 寿命是 workspace 级参数 `delta_sharing_recipient_token_lifetime_in_seconds`,默认 3600;传输约 1 小时 40 分钟的任务在 60 分钟处被拒,整体失败。分享"开箱即用",上规模后续航要人肉调参。
生产验证
—
证据等级
`单方声音`,细节充分的压测复盘。
最后核验
2026-10-07

Databricks 年份:2026

UC 治理边界=region:同云同 region 的两个库,分享还得走"对外协议"

单方声音
运维复杂度
一句话
UC metastore 是 region 级的,一个 workspace 只能挂一个——同 region 建了俩 metastore,跨库分享数据还得走 Delta Sharing,"对外分享协议"用在了"自家后院"。
窄场景
prod/non-prod 分 metastore 的大企业;同 region 多业务线。
机制
架构设计:单 region 单 metastore。Valcon 顾问实录明确建议"不要在同 region 建两个 metastore"——Client B 用双 metastore 后,workspace 只能挂其一,跨 metastore 分享必须走 Delta Sharing,治理复杂度显著上升。
生产验证
—
证据等级
`单方声音`,顾问客户实录 + 官方文档。
最后核验
2026-10-07

Databricks 年份:2026

memory_limit 只是"建议":有一块缓存根本不归它管

单方声音
性能问题
一句话
`memory_limit` 设了 12GB,进程 RSS 照样涨到 14.8 GiB——`enable_external_file_cache` 这块内存绕过 buffer manager,内存上限管不着它。
窄场景
在容器/K8s 里给 DuckDB 设内存上限、跑"外部 Parquet/Arrow 文件只读一次"的 ETL/压缩/采集管道。
机制
`enable_external_file_cache` 是外部文件数据的内存 LRU 缓存,它不走 buffer manager,因此不受 `memory_limit` 约束。对"每个文件只读一次就丢弃"的管道(压缩、合并、采集),这个缓存永远命中不了,只会单调累积内存。关掉它之后吞吐不变,内存占用回到正常水平。
生产验证
来源 3,dazzleduck-sql-server 项目 2026-09 提交记录——压缩器在 12GB `memory_limit` 下约 44 分钟涨到 14.8 GiB RSS;关闭该缓存后稳定在 0.7 GiB,周期时长不变。项目方把 `SET enable_external_file_cache = false` 写进默认配置并在注释里说明了原因。
证据等级
`单方声音`,具名项目提交记录(带实测数据与已验证的修复方案)。
最后核验
2026-10-03

DuckDB 年份:2026

二级 ART 索引检查点损坏:最危险的是静默错结果,不是崩溃

单方声音
稳定与故障
一句话
1.4.0 引入的回归——同一进程内两个独立引擎共开一个文件做 checkpoint,二级 ART 索引会被持久化写坏;之后按索引查永远返回 0 行,而全表扫描结果正常。
窄场景
同一进程内加载了两份 libduckdb(混合 C API/Python 或插件场景常见)、且存在 `CREATE INDEX` 二级索引的库;DuckDB ≥ 1.4.0。
机制
DuckDB 的文件锁按 PID 粒度,同一进程内两份独立引擎可以绕过锁共开同一文件;第二个引擎对未 checkpoint 的 WAL 做 checkpoint 时,二级 ART 索引被错误序列化。损坏写入文件后永久生效:索引扫描返回错误结果、全表扫描正常——是"静默错结果"而非崩溃。若写者之后干净关闭会用正确的内存索引重写文件"自愈",掩盖问题;写者异常退出则损坏永久留存。
生产验证
来源 4,GitHub issue duckdb/duckdb#23788(2026)——Paradigm4 工程师 Rares Vernica 具名报告,附完整复现脚本与版本矩阵:1.1.3/1.3.2 正常,1.4.1/1.5.1/1.5.4 均损坏。
证据等级
`单方声音`,具名工程师报告(复现脚本完整、版本边界清晰)。
最后核验
2026-10-03

DuckDB 年份:2026

存储格式单向升级:新版打开旧文件,旧版就永远打不开了

单方声音
升级迁移
一句话
新版 DuckDB 打开旧文件会不可逆地升级存储格式——v1.5 写的库 v2.0 能读,v2.0 写的库 v1.5 只能报错,没有降级路径。
窄场景
多组件/多版本共存的环境(CI 与生产 DuckDB 版本不一致、桌面工具与服务端混用);把 `.duckdb` 文件当作可分发产物的团队。
机制
存储格式版本号随版本演进(v1.5 写 header version 64、读 64–68;v2.0 写 69、读 64–69)。升级是单向的:新版打开即升级,官方唯一的跨版本迁移手段是 EXPORT/IMPORT 全量导出导入。v1.4 起虽有 LTS 线,但 LTS 只保证同一大版本内的格式稳定。
生产验证
来源 5,DataverseDuck 项目(2026-09)实测记录——明确把"缓存单向升级"列为已知问题:v2 链接的客户端打开旧缓存后,该文件即超出 v1.5 客户端可读范围,打开报错 `Trying to read a database file with version number 69, but we can only read versions between 64 and 68`。
证据等级
`单方声音`,具名项目实测记录(版本边界精确)。
最后核验
2026-10-03

DuckDB 年份:2026

DuckLabs 被 AWS 收购:许可证没变,但写代码的人换了老板

单方声音
生态与信任
一句话
DuckDB 本体仍是 MIT + 独立基金会,但写代码、定路线的人现在归 AWS——社区担心的是路线图,不是许可证。
窄场景
把 DuckDB 嵌入自家产品/管线、赌的是"轻量本地优先"这条路线的团队;与 AWS 有竞争关系的厂商生态用户。
机制
DuckLabs(约 30 人,DuckDB 原作者创办)2026-08-26 签署被 AWS 收购的最终协议,9 月初交割;IP 与商标留在独立的 DuckDB Foundation,MIT 许可证不变。但历史上绝大多数贡献与路线决策来自 DuckLabs,外部贡献者提个简单修复 CI 就要跑五小时,社区实质影响力本就有限。收购前九天发布的 DuckDB 2.0 预览主打 server 模式(Quack)与 S3 对象存储加速——正是 AWS 想要的方向。
生产验证
来源 6,独立数据教育者 Walter Shields(LinkedIn Learning 讲师,2026-08-31)梳理 HN(1058 分、300+ 评论)与 Reddit 社区反应:一方庆祝创始人五年 bootstrapping 的成功,另一方担忧核心团队加入"靠云计算与存储赚钱"的公司后,路线图从"笔记本上的分析师"转向"AWS 的企业客户"。MotherDuck CEO Jordan Tigani 亦公开表示"他们收购 DuckLabs 不是因为热爱开源"。
证据等级
`单方声音`,独立评论者对 HN/Reddit 社区反应的梳理(引注了 GeekWire/The Register/SiliconANGLE 报道与 HN 高赞讨论)。
最后核验
2026-10-03
备注
交割时基金会技术咨询委员会的实际治理结构尚未确定,后续值得跟进;若治理落地且社区确有话语权,本卡应更新。

DuckDB 年份:2026

拆掉 DAX:缓存成了架构里唯一的单点故障

单方声音
稳定与故障运维复杂度
一句话
DAX 缓存成了架构里最脆弱的一环:扩容要手工、打满后恢复要 30 分钟;拆掉后系统反而更稳、更便宜。
窄场景
读密集但流量尖刺、DynamoDB 本体其实扛得住的业务;把 DAX 当"无脑加速器"引入的团队。
机制
DynamoDB 表级自动扩缩容近乎无缝,DAX 却是按节点小时计费的固定集群——扩缩容全手工,重建/rebalance 期间缓存失效;DAX 只支持最终一致读,不支持 TransactWriteItems、PartiQL、Streams;流量上涨时 DAX 先到容量上限,延迟反升,成为比数据库更脆弱的一环。
生产验证
来源 5,Muhammad Ali 2026-04——为降读延迟引入 DAX(Client → DAX → DynamoDB),流量上涨后 DAX 到容量上限、缓存性能退化、延迟不降反升;故障后约 30 分钟才恢复健康(期间 API 延迟飙升、错误率上升);评估发现性能收益边际、DynamoDB 本体可扛住流量,拆除后省 ~$600,架构简化为 Client → DynamoDB。
证据等级
`单方声音`,具名生产复盘(恢复时长、金额、决策过程完整)。
最后核验
2026-10-03

Amazon DynamoDB 年份:2026

Global Tables 双活:LWW 静默吃掉 847 条客户资料更新

单方声音
稳定与故障
一句话
Global Tables 的冲突解决是"最后写入胜出":一次 DNS 抖动让双区域同时写了 4 分钟,847 条客户资料更新静默消失,日志里没有任何错误。
窄场景
Global Tables 做多活/温备 + Route53 故障转移的团队;把 Global Tables 当"开箱即用灾备"的团队。
机制
默认 MREC 模式为异步复制,且复制延迟没有 SLA;两区域同时写同一 item 即冲突,按写入时间戳 last-writer-wins——没有版本向量、没有冲突记录(CloudWatch/CloudTrail 均无);时钟漂移下"时间戳更晚"未必是"实际更晚"的写入;MRSC 强一致模式代价是更高的写延迟且不支持事务。
生产验证
来源 9,Illya Yalovoy 2026-06——温备架构下局部区域降级导致 Route53 健康检查抖动,约 4 分钟内两区域同时写入同一批用户记录;复制收敛后 847 条更新被静默覆盖("overwritten by whichever region happened to have the later timestamp"),应用日志零错误、DynamoDB 零异常;排查花了两天,原话 "every observability signal said the system was healthy"(部分付费墙,仅前半可见)。
证据等级
`单方声音`,个人博客(细节充分:847 条、4 分钟、两天排查;部分付费墙,已如实标注)。
最后核验
2026-10-03

Amazon DynamoDB 年份:2026

S1 级支持也要先交"作业":要的是快速解决,给的是"请提供日志"

单方声音
稳定与故障
一句话
连最高优先级的 S1 工单,支持流程的第一步也是让用户收集上传诊断包,而不是先给止血方案。
窄场景
买了 EDB 24x7 支持、指望"出事有人兜底"的生产团队;真正遇到 S1 停机、按合同期待快速响应的场合。
机制
厂商支持的标准分诊流程要求"证据先行":Lasso 等诊断工具收集系统元数据、日志、配置,打包上传后支持工程师才开始分析。这套流程为降低支持成本而设计,但在 S1 场景下把"收集证据"放在了"恢复服务"之前——用户感知到的就是"要日志而不是要方案"。另一位用户在评价中也侧面印证了这套流程的存在(onboarding 即要求安装 Lasso 诊断工具)。
生产验证
来源 3:Rakesh kumar b.(Technical Authority expert,企业用户,2026-07-31,5/5 好评中仍提)原话:"Sometimes in S1 case they asking for logs and all insted of quick resolution"(S1 工单里他们有时要日志这日志那,而不是快速解决)。
证据等级
`单方声音`,具名评价(企业用户,Technical Authority expert,细节具体:S1 场景+日志要求)。
最后核验
2026-10-03

EDB Postgres / EDB Postgres Advanced Server(EPAS) 年份:2026

Galera:官方文档推荐的配置,丢已提交事务

单方声音
稳定与故障
一句话
Jepsen 按官方"更安全、推荐"的配置(`innodb_flush_log_at_trx_commit=0`)测试 Galera,节点相继崩溃时已确认提交的事务照丢不误。
窄场景
多节点同时/相继故障(断电、洪水、网络 bug 等关联故障);以及无故障健康集群上的普通读写事务。
机制
官方文档称 `innodb_flush_log_at_trx_commit=0` "是 Galera 下更安全、推荐的选项,因为不一致总能从其他节点恢复"——这个"总能"的前提是故障不关联;关联故障下未刷盘的提交在所有节点上一起消失(MDEV-38974)。即使设为 1,进程崩溃+网络分区下仍偶发丢失已提交事务(MDEV-38976)。更糟的是健康集群也测出 P4 Lost Update(MDEV-38977)与常态 Stale Read(MDEV-38999)——而官方口径是"无丢失事务"、"隔离级别介于 Serializable 与 Repeatable Read 之间"。
生产验证
来源 4:Jepsen 2026,MariaDB Galera Cluster 12.1.2(Galera 26.4.13–26.4.25),声明独立无偿测试——关联崩溃下 1 分钟测试丢 9 个已确认提交的值;`=1` 配置下数小时出现一次、一次丢约 19 秒写入;健康集群 P4 与 Stale Read 可复现;已提交 MDEV-38974/38976/38977/38999。
证据等级
`单方声音`,独立第三方实验室测试(非用户生产投诉,但细节充分、可复现;已如实标注)。
最后核验
2026-10-03
备注
与现有 [避坑] 卡部分重叠(档案吐槽清单已有 Galera 认证冲突/流控行),本卡新增"已提交事务丢失"的正确性质疑角度。

MariaDB 年份:2026

压实把去重结果反转了:数据静默"回到"第一次写入

单方声音
稳定与故障
一句话
同一批 insert 里对同一个主键写了 5 次,查出来是对的(最后一次写入胜出);等自动压实跑完一遍,再查就"回到"了第一次写入——全程无报错、无日志。
窄场景
流式管道 at-least-once 投递、客户端批量重试、ETL 分块未去重的写入模式;单 batch 内出现重复主键的集合;报告在 Milvus v2.6.20 / v2.6.21(standalone)上复现。
机制
同一 growing segment 内的行共享同一时间戳。查询层对同 segment 内重复主键按"最后一次出现"去重(last-write-wins),而压实在合并 segment、遇到等时间戳重复主键时取了"第一次出现"。两层去重语义不一致 → 压实后可观察到的"当前值"静默回退到最早版本。报告者另指出:重复主键会留下多个"幽灵"向量条目——每个历史向量都可被检索命中、`count(*)` 膨胀,压实不清理;只有改用 upsert(delete+insert)能同时避开回退与幽灵条目。
生产验证
来源 4,2026-07 GitHub issue——REST API 完整复现:建集合 → 单 batch 插入 5 条 pk=1(order 1..5)→ flush → compact → 再查。压实前查到 `order=5, label="fifth_LAST"`(正确),压实后查到 `order=1, label="first"`(数据回退),`count(*)=5`(幽灵条目未清理);全程返回 code 0,无服务端错误日志。报告者判定:"静默、自动触发(auto-compaction 定期跑)、压实删掉原 segment 后不可恢复"。
证据等级
`单方声音`,GitHub 社区 bug 报告(细节充分:完整 curl 复现、压实前后输出对比、根因定位到时间戳相同的去重分支)。
最后核验
2026-10-03
备注
报告者在 2026-07-24 于 v2.6.21 上二次确认可复现;是否已在后续版本修复,未找到公开记录,未作"已修复"标注。本卡主题可能与本站 [避坑] 卡重叠。

Milvus 年份:2026

WiredTiger 逐出线程被内核软中断饿死:CPU 看似空闲,写延迟却飙升

单方声音
性能问题运维复杂度
一句话
WiredTiger 后台逐出线程被内核网络软中断(ksoftirqd)抢占 CPU,导致缓存压力上升、读写延迟飙升,而常规监控指标(总 CPU、磁盘、内存)全部正常,极难定位。
窄场景
写密集、分片集群、高网络吞吐的自建 MongoDB;逐出/检查点线程被调度到软中断集中的 CPU 核上时。
机制
WiredTiger 依靠后台逐出线程持续回收缓存;当逐出线程长期得不到调度,缓存占用缓慢爬升,应用线程被迫亲自执行逐出,读写延迟被逐出开销污染。MongoDB 不会根据内核级争用动态重排后台线程,且对此类争用几乎没有可观测性——聚合 CPU 指标会系统性撒谎(个别核跑满、其余核空闲)。
生产验证
Gojek 工程博客 Yuvaraj A《When MongoDB Isn't Slow — It's Starved: A Performance Mystery》(2026-01-12);用 /proc/interrupts 与 /proc/softirqs 实证网络软中断在少数 CPU 核上堆积、逐出线程被抢占。
证据等级
`单方声音`(具名公司深度生产复盘)
最后核验
2026-10-03

MongoDB 年份:2026

跨大版本升级没有直达路:老系统只能逐版爬升或逻辑迁移

单方声音
运维复杂度升级迁移
一句话
MongoDB 不支持跨大版本直接升级,老版本只能逐版爬升(每个大版本一次停机窗口)或走 dump/restore 逻辑迁移;配套的 Mongoose/驱动升级还带来大量应用层 breaking。
窄场景
多年未升级的老系统(3.x/4.x)、单节点部署、无预发布环境。
机制
featureCompatibilityVersion 链式约束要求 3.4→3.6→…→8.0 逐版升级;4.2 起强制 WiredTiger(MMAPv1 被移除);6.0 起 mongo shell 被 mongosh 取代;Mongoose 7 把 ObjectId 改为 class(必须 new 调用)、强制 model 注册顺序。官方升级路径与老旧 OS/单节点的现实脱节。
生产验证
Blen Redwan《How I Upgraded MongoDB 3.4 to 6 on a Legacy Production System》(2026-07);14 万行 Express 生产单体,MongoDB 3.4.23 → 6,Ubuntu 16.04,逐条列出 breaking 清单与取舍(最终选逻辑迁移而非 7 次停机窗口的逐版爬升)。
证据等级
`单方声音`(具名个人生产复盘,版本/规模/报错俱全)
最后核验
2026-10-03

MongoDB 年份:2026

mongorestore --nsInclude 对 gzip 归档静默失效,归档内容还无法查看

单方声音
运维复杂度
一句话
mongorestore 的 --nsInclude/--nsFrom/--nsTo 对 `--gzip --archive` 归档静默失效——会恢复归档内全部集合;且归档是不透明二进制流,没有任何内置命令可查看其中包含哪些集合。
窄场景
用 `--archive --gzip` 做生产备份流水线、需要按集合选择性恢复的自建用户。
机制
目录式 dump 每个集合是独立 .bson 文件,恢复时可跳过;archive 是多路复用的单一二进制流,mongorestore 只能顺序读取、无法 seek,命名空间过滤在该路径下不可靠。JIRA TOOLS-2023(选择性逻辑改进)已 open 六年以上。雪上加霜的是没有任何 --list/--inspect 语义能枚举归档内容,作者被迫在每次备份时额外保存集合清单文件。
生产验证
thedecipherist《MongoDB Backups》(2026-02-25);作者自建 MongoDB 生产十年(34 个电商站、12GB 库、约 3650 次日备零丢失),实录一次只想恢复 products/orders 却恢复了 130+ 全集合的经历。
证据等级
`单方声音`(具名运维者十年生产复盘)
最后核验
2026-10-03

MongoDB 年份:2026

社区版 Search(mongot):索引卡 PENDING 无报错,状态字段"撒谎",查不存在的索引名静默返回空

单方声音
性能问题运维复杂度
一句话
社区版 Search(mongot)问题频出:磁盘超 ~89% 时索引永久 PENDING 且客户端无任何报错;$listSearchIndexes 汇总状态取"历史最差"(含已死主机);查询不存在的索引名静默返回空结果;$search 简单词查询比老 $text 索引慢 10-14 倍;mongot 空闲常驻内存是 mongod 的 4 倍多。
窄场景
自建 Community Server 9.0.2 + mongot-community 1.70.5,磁盘配额受限环境。
机制
mongot 的磁盘保护阈值(~90% 停、~85% 恢复)按底层设备全容量计算,与容器内 df 读数可差 60 个百分点;状态聚合逻辑取所有历史主机的最差值(含已不存在的主机);不存在的索引名只在 mongot 日志里 WARN,客户端无法区分"拼写错误"与"真无结果";$search 走 gRPC 跨进程,简单词项查询多一跳。
生产验证
dev.to alexgeorgiev17《MongoDB Community Edition's new search index stayed pending above 89% disk use》(2026-09);5 万文档实测,min/median/p95/max 对比数据俱全($search 中位 9.36ms vs $text 0.67ms)。
证据等级
`单方声音`(具名个人实测复盘,版本/数据俱全)
最后核验
2026-10-03

MongoDB 年份:2026

utf8mb3 遗毒:emoji 被静默截断,迁 utf8mb4 又撞三连坑

单方声音
运维复杂度升级迁移
一句话
MySQL 的 `utf8` 从来不是真正的 UTF-8(只是 utf8mb3 别名);存 emoji 等四字节字符在非严格模式下被静默截断,而迁往 utf8mb4 又会撞上 767 字节索引上限、连接字符集、CONVERT TO 锁表三连坑。
窄场景
2010 年代建库、字符集为 utf8(即 utf8mb3)的老业务;用户昵称、商品目录等含 emoji/国际文本的场景。
机制
utf8mb3 每字符最多 3 字节,四字节字符在非严格模式下静默截断(无报错,数周后才在客服工单里发现);迁移时索引按"最宽字符"计字节,VARCHAR(255) 从 765 字节(255×3)涨到 1020 字节(255×4),老实例/旧行格式下触发 ERROR 1071;字符集是连接级协商的,只改表不改 SET NAMES 照样乱码;CONVERT TO 是全表重写。
生产验证
GitHub 个人博客(2026-06-13):Magento 2 真实店铺迁移,客户 display name 带 emoji 被静默截断且日志无报错;ERROR 1071(Specified key was too long; max key length is 767 bytes)复现;三处必须联动(表、my.cnf server 默认、应用连接字符集),缺一则"mysql CLI 看正常、店面继续乱码";CONVERT TO 全表重写需维护窗口或 pt-osc/gh-ost;半库转换导致 Illegal mix of collations。
证据等级
`单方声音`,来源性质:个人博客(细节充分,含报错原文与复现路径)。
最后核验
2026-10-03
备注
与本站现有 [避坑] 卡提及的"utf8mb3 包袱"部分重叠;本卡角度为具体迁移事故(静默截断 + 迁移三连坑),而非性能。

MySQL 年份:2026

异步复制主从延迟:从库跑个报表,读到"刚下的订单不存在"

单方声音
性能问题稳定与故障
一句话
从库默认单线程回放又被拿去跑分析查询,一次主库 DDL 引发的写入突发就能让 Seconds_Behind_Master 冲到 1800 秒以上,读从库的业务看到"用户刚提交的订单不存在"。
窄场景
读写分离(写主读从)、从库被复用跑报表/分析查询、未开并行复制的 8.0 集群。
机制
主库 ALTER 拿 MDL 排他锁 → 写被阻塞排队 → DDL 完成后突发提交,binlog 密集;从库 I/O 线程照单拉取(relay log 涨到 4.7GB),但 SQL 线程默认单线程(replica_parallel_workers=0)且与分析查询争 CPU,追赶速度跟不上,形成"越慢越积、越积越慢";Seconds_Behind_Master 只反映 SQL 线程正在执行的事件时间戳、不反映 relay log 积压量,故障早期具有欺骗性。
生产验证
个人博客故障复盘(约 2026-06):MySQL 8.0.32,1 主 1 从,orders 表约 1000 万行;14:00 主库 DDL → 14:25 Seconds_Behind_Master>1800、Relay_Log_Space 4.7GB → 定位到从库上一个跑了 812 秒的 GROUP BY 分析查询 → KILL 后 15 分钟恢复;附 SHOW REPLICA STATUS / PROCESSLIST 实录。
证据等级
`单方声音`,来源性质:匿名个人博客故障复盘(时间线与命令实录细节充分,但作者身份不明,页面含 SEO 式关键词表、有 AI 辅助写作痕迹,采信时打折)。
最后核验
2026-10-03

MySQL 年份:2026

普通账号两道权限墙:装不了扩展,public 里建不了表

单方声音
运维复杂度
一句话
控制台建的"普通账号"既装不了扩展,又在 public 里建不了表——而库的 owner 是你碰不到的内建账号,连自建 schema 绕开都不行。
窄场景
PolarDB PostgreSQL 版;用控制台"普通账号"做初始化 DDL 的团队。
机制
两道独立的墙:① `CREATE EXTENSION` 要求 `polar_superuser`,普通账号 `rolsuper=f` 且不属于任何角色,直接 `permission denied to create extension "vector"`;② PG15 起 public schema 默认 ACL 只给普通用户 USAGE,而该库 owner 是 PolarDB 内建的 `aurora`(另有 `polardb_admin`、`replicator`,口令都不在用户手里),普通账号对库也没有 CREATE——于是连"自建一个 schema 绕开"这条路也被堵死。必须先建"高权限账号"(属 `pg_polar_superuser` 角色)执行 `CREATE EXTENSION` + `GRANT CREATE ON SCHEMA public TO <普通账号>`,之后才能全程用普通账号。
生产验证
来源 3,2026-08-30 实测记录——作者的五步冒烟脚本第一次跑出 2/5,第 2 步(装 vector 扩展)、第 3 步(public 建表)当场失败,完整报错与修复步骤均有记录;来源 4 为同一作者同一实例的配套记录(非独立来源)。
证据等级
`单方声音`,开源项目实测文档(细节充分:完整报错、pg_roles 盘点、修复命令)。
最后核验
2026-10-03

PolarDB 年份:2026

白名单没放行 = TCP 静默超时:连不上时先怀疑人生

单方声音
运维复杂度
一句话
白名单没放行 IP 时,PolarDB 公网地址的表现是 TCP 静默超时而不是拒绝——你会先去查网络,而不是查白名单。
窄场景
走公网地址连接 PolarDB PostgreSQL 版;白名单配错或出口 IP 变化时。
机制
白名单拦截发生在网络层静默丢包,客户端看到的不是连接被拒绝(RST),而是 SYN 发出去石沉大海直到超时。超时症状与"网络不通/DNS 故障/实例挂了"无法区分,排查方向天然先偏。
生产验证
来源 4,2026-08-30 实测——作者明确记录"白名单不放行时的症状是 TCP 静默超时,不是拒绝,容易误判成网络故障";且他第一次连接失败还叠加了 DSN 占位符未替换的自检盲区,分层诊断(DNS→TCP→鉴权)才定位。
证据等级
`单方声音`,开源项目实测文档(细节充分:症状描述、排查分层过程)。
最后核验
2026-10-03

PolarDB 年份:2026

SSL 默认关闭:公网连接串开局明文传口令

单方声音
生态与信任
一句话
PolarDB PostgreSQL 版实例默认 `SHOW ssl = off`,`sslmode=require` 直接连不上——公网连接串默认走明文,加密要自己去控制台手动开。
窄场景
走公网地址连接的实例;安全合规要求加密传输的团队。
机制
实例出厂默认不启用 SSL,客户端配 `sslmode=require` 会连接失败;不配则口令与数据明文过公网。作者 2026-08-31 在控制台手动开启 SSL 后 `SHOW ssl = on` 恢复正常,但明文期用过的口令是否轮换成了残留风险。
生产验证
来源 3(§3.5)与来源 4,2026-08-30/31 实测——同一实例开启前后的 `SHOW ssl` 取值、`sslmode=require` 连不上的现象均有记录。
证据等级
`单方声音`,开源项目实测文档(细节充分:开启前后对照)。
最后核验
2026-10-03

PolarDB 年份:2026

扩展版本被平台锁定:pgvector 落后上游两个小版本

单方声音
生态与信任
一句话
PolarDB PG 实例上的 pgvector 是 0.8.3.1,而同期社区已到 0.8.6——版本由平台定,用户自己升不了。
窄场景
PolarDB PostgreSQL 版上用 pgvector 等扩展做 AI/向量检索的团队。
机制
托管实例的可用扩展版本由平台统一提供:作者实测该实例 `pg_available_extensions` 共 189 个,vector 可装版本为 0.8.3.1;用户无权自行升级扩展或内核版本,只能等平台发布新修订版本。作者实测检索行为与本机 0.8.6 逐字节一致(本层只用 vector 类型与 `<=>`),但版本差意味着上游的安全修复与新特性滞后。
生产验证
来源 3(§3.2),2026-08-30 实测——版本号对照表(本机 0.8.6 vs PolarDB 0.8.3.1)、`SELECT version()` 输出 `PolarDB 16.14.20.0 build 1f03f15d` 均有记录。
证据等级
`单方声音`,开源项目实测文档(版本号实测)。
最后核验
2026-10-03

PolarDB 年份:2026

hot_standby_feedback:保读库查询还是保主库清理,只能二选一

单方声音
运维复杂度
一句话
开了 feedback,读库一个 4 小时的慢查询就能让主库 vacuum 四小时删不掉一行;关了,读库查询超 30 秒就被 cancel。
窄场景
物理从库同时承担 HA 和 BI/报表查询的架构(读库"身兼两职")。
机制
feedback 把从库 backend_xmin 回传主库,vacuum 不敢删除该快照仍可见的行版本;走复制槽连接时 xmin 钉在 pg_replication_slots.xmin 上,从库断开后依然钉着。旧的折中参数 vacuum_defer_cleanup_age 在 PG16 已被移除,中间档没了。
生产验证
来源 12,2026-09 实战复盘——给 BI 用的从库开了 feedback,一个写坏 join 的 dashboard 查询跑了 4 小时才被发现;这 4 小时里主库最热表的 vacuum"按时成功但一行没删",n_dead_tup 一路上涨,膨胀只能事后慢慢消化。
证据等级
`单方声音`,个人博客(细节充分:4 小时查询、排查过程、PG16 版本注记)。
最后核验
2026-10-03

PostgreSQL(社区版) 年份:2026

GIN 索引锁雪崩:1.5 万个进程排队等一把锁

单方声音
性能问题稳定与故障
一句话
GIN 索引 pending list 批量合并要拿扩展锁,写入突发时所有 writer 串行化;死锁检测再把 16 个 LWLock 全抓一遍,雪上加霜。
窄场景
GIN 索引(jsonb/数组/全文检索)+ 高并发写入突发的库。
机制
GIN pending list 攒到约 512 页/4MB 才合并,每次合并拿 extension lock;突发写入让所有后端排队等这一把锁;锁释放瞬间数千进程同时惊醒,各自触发 CheckDeadlock——而死锁检测要排他抓取全部 16 个 lock-manager 分区 LWLock,形成第二个 convoy。若还开了 log_lock_waits,每个后端再遍历等待队列写 10KB+ 日志,日志子系统跟着添乱。
生产验证
来源 4,WebProNews 2026-07 对 Recall.ai 具名复盘(Brendan Lockhart)的详细转述——AWS RDS 一夜之间 100% CPU(全是 system 态),1.5 万个进程等 GIN 扩展锁,等待队列超 4500,重启实例 60 分钟没救回来(负载一回来就重现)。
证据等级
`单方声音`,独立媒体对具名复盘的详细转述(原始复盘页未直接打开核实,已如实标注)。
最后核验
2026-10-03

PostgreSQL(社区版) 年份:2026

逻辑复制三连坑:DDL 不复制、序列不同步、初始全量拷贝拖垮源库

单方声音
运维复杂度升级迁移
一句话
逻辑复制只传 DML——加列要在订阅端手工同步,序列值根本不传(切主后主键冲突),400GB 表的初始 COPY 是源库上的一个长事务。
窄场景
用逻辑复制做跨版本升级、报表从库、CDC 的团队;照着"两条命令就跑起来"的教程上生产的。
机制
publication 只解码 DML,DDL 变更订阅端无感知(要么静默漏数,要么复制 worker 直接报错停掉);序列是独立对象不在 WAL 数据流里,订阅端序列停在初始值;初始同步是单事务 COPY 全表 + 快照,期间抢 I/O、拉长 vacuum 相关膨胀。
生产验证
来源 6,2026-09 报表从库实战——主库加列后订阅端出现静默的数据缺口(dashboard 空了才发现);"只读"从库转故障转移后 nextval 发出已存在的 id,几周后报 duplicate key;400GB 事实表的初始同步放在业务时段做,被 pager 叫醒。
证据等级
`单方声音`,个人博客(细节充分:三个坑各有现象与处置)。
最后核验
2026-10-03

PostgreSQL(社区版) 年份:2026

RF=1 丢一个节点:p99 飙 31 倍,还"半死不活"

单方声音
稳定与故障
一句话
三节点集群 RF=1 时 kill 掉一个节点,p99 从 12.7ms 飙到 392.5ms,5% 查询直接报错——实测作者说这种"半死"比彻底挂掉更糟,因为客户端收不到明确的故障信号。
窄场景
3 节点集群、RF=1(每分片仅一份副本)的生产部署;实测版本 v1.13.6。
机制
RF=1 下某分片只有一份数据,所属节点被 kill -9 后,查询协调器仍会尝试向死亡节点的分片扇出,内部超时后才返回部分结果或报错——超时等待直接打进 p99;约 1/3 查询命中死亡分片(实测 5% 直接报错、其余变慢),形成"部分可用 + 严重长尾"的混合降级,而非干净的快速失败。
生产验证
来源 2:独立故障注入实测(2026-04,Qdrant v1.13.6,100 万 SIFT 向量,50 QPS)——RF=1 kill -9 后 60 秒窗口内 p99 最高 392.5ms(基线 12.7ms,31 倍),149/3000 查询报错;成功查询的召回率不受影响(0.9989 vs 基线 0.9987)。作者结论引文:"produces a mixed degradation mode — partial availability with severe latency spikes — that is arguably worse than a clean outage, because clients receive slow, incomplete results without a clear signal that the system is degraded."(混合降级模式——部分可用叠加严重长尾延迟,可以说比干净的宕机更糟,因为客户端收到的是缓慢、不完整的结果,却没有明确的系统降级信号。)
证据等级
`单方声音`,独立可复现实验(脚本与数据开源在仓库中),细节充分。
最后核验
2026-10-03

Qdrant 年份:2026

混合检索的 BM25 分支:增量写入让 IDF 权重慢慢变质

单方声音
性能问题
一句话
Qdrant/bm25 稀疏模型的 IDF 统计量在写入时按当时语料计算,语料持续增量更新而不刷新,稀有词的加权优势就慢慢丢了——关键词检索质量静默下降。
窄场景
持续增量写入语料的混合检索(dense+sparse RRF)管线;FastEmbed 本地推理模式。
机制
BM25 的核心是 IDF(逆文档频率)——词越稀有加权越高。FastEmbed 的 Qdrant/bm25 模型在 upsert 时按当前语料计算 IDF 表;后续增量写入改变词频分布,但已存点的稀疏向量权重不自动更新,IDF 表变陈旧→稀有词失去加权→关键词分支排名退化。Qdrant 侧没有"增量刷新 IDF"的机制,只能靠定期重建/重嵌。
生产验证
来源 1:Effloow 独立实测(2026-09)——稀疏单检 sanity check"返回的全是垃圾排名,含常见词的文档都排在前面";定位为 IDF 陈旧;workaround 是几百篇一批批量写入、在语料大变化时重建索引,"对实时更新的语料,要么换固定权重的稀疏模型,要么接受定期重嵌"。
证据等级
`单方声音`,独立实测(含现象、定位、workaround)。
最后核验
2026-10-03

Qdrant 年份:2026

HNSW 构建期内存尖峰:一次 5 万批量写入差点把容器 OOM

单方声音
性能问题运维复杂度
一句话
bulk upsert 时 HNSW 图在后台并发构建,容器内存直线爬升——实测团队靠"先调高 indexing_threshold、导完再降"才躲过一次 OOM 重启。
窄场景
大批量初始导入/回填(backfill),默认索引配置直接灌数。
机制
Qdrant 写入时先攒 segment,达到 indexing_threshold 后触发 HNSW 构建;构建期既要持有原始向量又要建图,内存是平稳期的数倍;单批 5 万点 + 并发构建直接把内存顶穿。默认的 indexing_threshold 对回填场景过于激进。
生产验证
来源 1:Effloow 独立实测(2026-09)——"kicked off a bulk upsert of 50k points in a single batch while the HNSW graph was building concurrently, and the container's memory usage climbed sharply";采用的 pattern:hnsw_config m=16/ef_construct=100、每批约 1000 点、回填期预留 2 倍索引大小的内存空闲、"build with indexing_threshold high, backfill, then lower it"——"saved us a full out-of-memory crash and restart on the second attempt"(第二次尝试靠这套配置才躲过 OOM 崩溃重启)。
证据等级
`单方声音`,独立实测(含具体配置与避险 pattern)。
最后核验
2026-10-03

Qdrant 年份:2026

RRF 融合掩盖单分支故障:稀疏分支挂了你都看不出来

单方声音
运维复杂度
一句话
dense+sparse 双分支做 RRF 融合时,如果稀疏分支静默返回 0 命中,融合照样吐出 dense 结果——管线"看起来健康",只是质量可测地变差了。
窄场景
生产环境混合检索(prefetch + FusionQuery RRF)。
机制
RRF 按排名位置融合,不看原始分数;某分支返回空/错(如 IDF 陈旧、using 名字写错、模型不匹配),融合结果只是少了一个排序信号,不会报错。故障被"优雅降级"吞掉,没有告警面。
生产验证
来源 1:Effloow 独立实测(2026-09)——"If your sparse prefetch silently returns zero hits (stale IDF, wrong using name, model mismatch), fusion still returns dense results and your pipeline looks healthy; just measurably worse."(如果稀疏预取静默返回零命中——IDF 陈旧、using 名写错、模型不匹配——融合照样返回 dense 结果,管线看起来健康,只是可测地变差了。)团队加了一个"融合前对比双分支命中数"的两行健康检查,"would have caught gotcha #1 a day earlier"(早一天就能抓到上一条的 IDF 问题)。
证据等级
`单方声音`,独立实测。
最后核验
2026-10-03 ---
备注
本卡主题可能与本站 [避坑] 卡重叠。

Qdrant 年份:2026

Concurrency Scaling:WLM 路由配错,弹性变成每天 18 小时的加价

单方声音 来源存疑
性能问题成本账单
一句话
Concurrency Scaling 本是应对突发峰值的,但只要混杂负载都涌进开了弹性伸缩的默认 WLM 队列,它就会从"峰值保险"变成"基线容量",账单悄悄变大。
窄场景
BI 报表、ETL、ML、应用查询混跑在同一集群、WLM 路由没做精细隔离的团队。
机制
Auto WLM 下查询按用户组/query group 路由进队列;只有开了 concurrency scaling 的队列能溢出到弹性集群。若未分类的混合负载都落在默认队列(通常开了弹性),CPU 压力稍一上来就触发弹性集群扩容,且按弹性计算秒数单独计费。案例中弹性集群一天在线 18–20 小时、多弹性集群并行。
生产验证
来源 7,DoiT 2026 年对某匿名客户生产集群的账单调查——RA3 集群,账单波动几乎全来自混合用途的 analytics 集群;CloudWatch 显示 00:00–09:00 UTC 批处理与报表撞车、弹性集群每天 18–20 小时在线;根因是"太多混合负载流经唯一开了扩缩容的默认队列",WLM 路由成了成本放大器。
证据等级
`单方声音` `[来源存疑]`,云成本咨询公司博客的匿名客户案例分析(方法透明:账单数据 + CloudWatch 指标 + SYS_QUERY_HISTORY,但作者有商业利益,独立性无法完全确认)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠(并发扩展/成本)。

Amazon Redshift 年份:2026

Time Travel + Fail-safe:存储账单的"撤销税"乘数

单方声音
成本账单
一句话
Time Travel 按"每次变更保留一份"计费——高频变更的表开 90 天保留,存储账单能翻上百倍;Fail-safe 7 天还关不掉。
窄场景
高 churn 表(ETL staging、频繁 UPDATE/DELETE)+ Enterprise 版长保留期。
机制
微分区不可变,UPDATE/DELETE 写新分区、旧分区保留至保留期结束;Time Travel 存储 ≈ 保留天数 × 数据变更量;Fail-safe 在 Time Travel 到期后再加 7 天,不可配置、不可关闭、不可查询,但照样计费。
生产验证
来源 6,Nazeer Syed 2026-01——1TB staging 表每小时 truncate+reload、7 天保留,"turn a 1TB bill into a 168TB bill overnight";90 天 Time Travel + 7 天 Fail-safe = 删除数据要在付费存储里躺 97 天;并给出 `TABLE_STORAGE_METRICS` 审计膨胀的 SQL。
证据等级
`单方声音`,具名工程师博客(细节充分:微分区机理、168TB 测算、审计 SQL)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

SQL API 高并发直接 429/503:瓶颈在云服务层,加大 warehouse 没用

单方声音
性能问题
一句话
10 rps 持续压力下 SQL API 撞上 429/503,而 warehouse 远未到瓶颈——直觉是"加 warehouse",作者实测证明"it doesn't help - the bottleneck is upstream of it"。
窄场景
用 Snowflake SQL API 做高并发在线 serving;轻量集成测试通过、上生产才发现限流的团队。
机制
SQL API 无状态,每个请求都要走 auth→编译→路由→执行;Cloud Services 层的限流独立于 warehouse size,瓶颈在 warehouse 上游。
生产验证
来源 12:Mechanical Rock 2026-10 生产复盘——"At 10 requests per second sustained, the Cloud Services layer starts to feel it before the warehouse does. We hit 429 (TooManyRequests) and 503 (ServiceUnavailable) errors under peak load.";只能靠指数退避重试、批量写或换有连接池的 connector 绕行;"If you're expecting sustained high concurrency, test this early. It's not a problem you'll see in light integration testing."
证据等级
`单方声音`,独立咨询公司一手生产实测(数据具体:10 rps 阈值、429/503 错误码)。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

CLONE DATABASE 挂 22 分钟:元数据操作是单线程串行 [来源存疑]

单方声音 来源存疑
性能问题
一句话
对 1000 张表的 schema 执行标准 `CLONE DATABASE` 挂了 22 分 34 秒——database 级 clone 是 Cloud Services 层的串行元数据操作,"You aren't compute-bound; you're dispatch-bound."(你卡的不是算力,是调度。)
窄场景
大 schema 的 database 级 clone;CI/CD 里用 clone 做环境复制的 pipeline。
机制
database 级 clone 不搬运数据,只处理元数据指针,但 dispatch 是单线程队列;改用 Python API 对单表并行 clone(10 线程)可把总耗时压到 22 秒,约 60 倍加速——证明瓶颈在调度而非数据量。
生产验证
来源 11:Alexandra Sampietro 2026-02-20([来源存疑])——"cloning a database with 1,000 tables took 22 minutes and 34 seconds… across 10 parallel threads, the total time dropped to just 22 seconds";"a database-level clone is a serial metadata operation handled by the Cloud Services layer. It's a single-threaded queue."
证据等级
`单方声音`,[来源存疑]:作者身份背景未能独立核实,但数字具体、机制(Cloud Services 串行瓶颈)与本页其他卡片的根因一致。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Masking 策略静默破坏 hybrid 表索引:查询退化为全列扫描

单方声音
性能问题
一句话
masking policy 一落到 hybrid 表的索引列上,Snowflake 就把扫描模式从 ROW_BASED 静默切换为 COLUMN_BASED——索引被完全绕过,查询退化为全列扫描;"a massive performance regression you won't see coming until you deploy to an environment where masking policies are actually active (which, in our case, was production)"(直到部署到真正启用 masking 的环境——也就是生产——你才看得到)。
窄场景
hybrid 表 + 列级 masking 的组合;dev/staging 没配 masking、生产才配的团队。
机制
masking 与 hybrid 表行存储索引路径不兼容,引擎静默降级为列扫;workaround 是给索引列打 `CLASSIFICATION_EXEMPT` 剥离 masking,代价是这些列不再脱敏,只能靠更严格的 RBAC 补偿——安全与性能二选一。
生产验证
来源 12:Mechanical Rock 2026-10 生产复盘——"When a masking policy is applied to a column that's part of a hybrid table index, Snowflake switches from ROW_BASED scan mode to COLUMN_BASED. That bypasses the index entirely and falls back to a full column scan."
证据等级
`单方声音`,独立咨询公司一手生产实测(hybrid 表较新,未见第二家公开复盘)。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Result cache 按 query text 缓存、忽略 bind 参数:用户 A 可能拿到用户 B 的数据

单方声音
生态与信任
一句话
Snowflake 按查询文本做结果缓存、完全忽略 bind 参数——两个用户用同一个参数化 SQL 查不同 customer ID,会拿到同一份缓存结果;这是正确性问题,不是性能问题。
窄场景
多租户应用共用参数化 SQL 模板;依赖 result cache 提速的在线查询。
机制
结果缓存的 key 是查询文本,bind 参数值不参与 key;参数化查询在缓存命中时直接返回别人的结果集。
生产验证
来源 12:Mechanical Rock 2026-10 生产复盘——"Snowflake caches query results based on query text only - bind parameters are ignored entirely. Two users querying with different customer IDs but the same parameterised SQL will get the same cached result."
证据等级
`单方声音`,独立咨询公司生产测试观察;行为描述具体可复核。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Gen2 warehouse 上 bulk ALTER TABLE 稳定报引擎内部错误,生产每天 60+ 失败

单方声音
稳定与故障
一句话
迁到 Gen2 warehouse 后,dbt 生成的 bulk `ALTER TABLE ... ALTER`(宽表一次改几十上百列 comment)稳定报错 `"000603 (XX000): SQL execution internal error: Processing aborted due to error 300002"`;Gen1 上 500+ 列的表才偶发,Gen2 上 120 列左右即可靠复现——而 Snowflake 文档声称 Gen2 "SQL semantics are unchanged"。
窄场景
已迁移或被默认迁移到 Gen2 warehouse 的 dbt 用户;宽表 comment 批量维护。
机制
引擎侧 bug(Snowflake 文档口径与实测行为矛盾);dbt-adapters 只能改 emission shape 绕行;Gen2 自 2026-07 起成为新 org 的默认 warehouse 类型,影响面随默认切换扩大。
生产验证
来源 16:dbt-adapters GitHub issue #1919(dbt Labs 维护者代 dbt Platform 客户上报,约 2026-05)——生产环境每天 60+ 失败,issue 仍 open。
证据等级
`单方声音`,dbt Labs 代客户上报的生产故障(错误原文、复现条件、绕行方案俱全);dbt-snowflake#842 曾报告同类 300002/XX000 错误模式,可作侧面参考。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Catalog-linked Iceberg 表刷新静默失败,下游查询报 Parquet file inaccessible

单方声音
稳定与故障
一句话
catalog-linked 的 Iceberg 表 refresh 看似成功、实际没完全更新——某表 delete 文件过多触及内部元数据处理上限,refresh 静默损坏,下游查询间歇性报 `"Parquet file inaccessible"`。
窄场景
Snowflake catalog-linked Iceberg 表 + 高 churn(delete 文件多)的表。
机制
refresh 的元数据处理有内部上限,超限后 refresh 不报错但元数据停留在旧版本;读到的元数据是旧的,查询时才暴露为文件不可访问。
生产验证
来源 17:独立工程师 Soumil Shah 2026-07 复盘——第一反应怀疑存储层 compaction 与读请求的竞态,双边开 support case 排查后排除;诊断方法 `SYSTEM$CATALOG_LINK_STATUS`,workaround 逐表手动处理;文章开篇声明为个人技术复盘,不代表雇主或厂商。
证据等级
`单方声音`,单源客户复盘,但故障机制描述具体可核(函数名、错误原文、复现条件俱全),且已向 Snowflake 开 support case。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Zero-copy clone:免费午餐的三张账单

单方声音
运维复杂度
一句话
clone 是元数据操作、看似免费,但有三张账单:删源表即断 clone("把源表扣在元数据层当人质")、放几个月的 clone 在源表高 churn 下会"拥有"旧分区的完整副本(亲历:账户存储账单翻三倍)、有 SELECT 就能 clone 导致 masking 没配好就把未脱敏生产数据端给 dev(亲历:合规审计挂掉)。
窄场景
用 clone 做 dev/test 环境、CI 临时环境的团队;DBA 有 drop 重建 staging 表习惯的组织。
机制
clone 与源表共享 micro-partition,任何修改(RECLUSTER/DELETE)都让分区偏离;clone 断裂于源表删除;clone 权限通常随 SELECT 走,masking 策略若未覆盖 clone 路径即形同虚设。
生产验证
来源 22:aniketsoni 2026-09 个人工程博客——"you are essentially holding the source table hostage in the metadata layer";junior dev clone 大事实表六周未删,"The storage bill for that account tripled because we were essentially versioning the entire fact table history twice.";"I've seen compliance audits fail specifically because a developer cloned a production table to debug a join issue, inadvertently exposing PII to the development environment."
证据等级
`单方声音`,细节充分(三倍账单实例、合规审计失败实例、机制解释完整),未找到第二独立来源,未硬凑。
最后核验
2026-10-07
备注
存储账单翻三倍也沾"成本账单",但根因是 clone 生命周期无人管理,归运维复杂度。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

MFA 强制上线打碎了官方文档的告警方案:邮件发不到 distribution list

单方声音
运维复杂度
一句话
Snowflake 邮件告警要求 `ALLOWED_RECIPIENTS` 里的每个地址都属于"有已验证邮箱的 Snowflake 用户",官方 KB 的变通方案是建"桥接用户"验证邮箱;但 BCR 2086/2097 上线后,所有用密码登录 Snowsight 的 PERSON 用户被强制注册 MFA——而绑定邮件组的桥接用户没有手机、没有 Duo、没有 passkey,"You're stuck."(你卡死了。)
窄场景
想把 Snowflake 告警发到团队邮件组(data-team@)的运维;按官方 KB 建了桥接用户的团队。
机制
安全加固(MFA 强制)与官方文档的变通方案互相打架,文档没提这堵墙;绕行方案是 `MINS_TO_BYPASS_MFA=30` 开 30 分钟豁免窗口完成验证、再立刻封死用户——等于为了发个告警邮件,得走一套"临时开后门再焊死"的流程。
生产验证
来源 29:Stéphane Bizard 2026-09(生产账号实测)——"Since the BCR 2086/2097 rollout, Snowflake enforces MFA enrollment for all PERSON users who sign in to Snowsight with a password. The moment you log in with your bridge user to validate the email, Snowsight forces you to enroll in MFA — and a bridge user tied to a mailing list has no phone, no Duo app, no passkey. You're stuck."
证据等级
`单方声音`,一线工程师生产账号实测;BCR 2086/2097 强制 MFA 本身是公开变更,"桥接用户被 MFA 卡住"这一具体冲突未找到第二独立来源。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

列级 PII 脱敏是 Enterprise 版专属:Standard 版里 SELECT 到的就是明文

单方声音
生态与信任
一句话
"CREATE MASKING POLICY doesn't exist on Standard Edition"——没有它,"every reader with SELECT access sees raw values, no matter how carefully everything else in this account is scoped"(任何有 SELECT 权限的读者看到的都是明文,不管账号里其他权限管得多细)。
窄场景
Standard 版上存 PII 的团队;以为"权限管细了就安全"的账号。
机制
基础安全能力按版本收费;作者的应对是提前把分类角色的授权图谱建好、等升级 Enterprise 那天再"一键打开"脱敏——等于承认加钱之前 PII 保护是裸奔的。
生产验证
来源 31:krish0502 2026-09(55 角色实建脚本的多环境账号架构实录,非纸上谈兵)。
证据等级
`单方声音`,"masking policy 需 Enterprise 版"是产品事实(官方文档可核),"Standard 版裸奔"的批评口径未找到第二独立客户信源。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

R1 RCM:12 周把 847 个 dbt 模型从 Snowflake 搬到 Databricks,Snowflake 专有函数是最大坑 [来源存疑]

单方声音 来源存疑
升级迁移
一句话
847 个 dbt 模型、5 层、35 张信息集市表、每天跑多次覆盖数千亿行,12 周迁完、单次运行成本降约 77%——但 Snowflake 的 `HASH()` 不可移植(Databricks 无等价实现,surrogate key 注定两侧不同)、Snowflake MERGE 容忍源端重复键而 Delta MERGE 要求目标键唯一,被迫在数百个模型上游统一加 `QUALIFY + ROW_NUMBER()`。
窄场景
重度使用 Snowflake 专有函数/语义的 dbt 项目;Data Vault 建模。
机制
专有函数与宽松语义是迁移时的隐性锁定——不是"数据搬不走",是"语义对不上",测试策略被迫围绕"key 一定不同"来设计;NULL 排序默认、隐式类型转换、timestamp/timezone、窗口函数 frame 语义等执行引擎差异是工程量的大头。
生产验证
来源 36:Databricks 社区 technical blog 2026-05([来源存疑]:咨询公司 Lovelytics 与 R1 的 Zheng Zhu 联合撰写,厂商社区合作稿,非客户独立执笔)——客户与人物具名、数字具体;技术细节(HASH 不可移植、MERGE 语义差异)与已知的 Snowflake→Databricks 迁移通用知识一致。
证据等级
`单方声音`,[来源存疑]:未见 R1 自家博客或第三方独立复述。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Appcues:告别 Snowflake+Airflow 迁往 ClickHouse,P95 查询 20 秒→2 秒 [来源存疑]

单方声音 来源存疑
升级迁移
一句话
管理 1.31 PB 数据、4100 亿事件的 SaaS 平台,多年 Snowflake+Airflow 分析栈:Airflow 每 5–10 分钟 rollup 预聚合再写回,带来额外成本和庞大 job 网,客户只能看到 10 分钟窗口的数据,查询涨到 20 秒;迁 ClickHouse 后 P95 降到 2 秒以内,新事件可查延迟从 10 分钟降到约 5 秒,整体分析栈支出仍降 23%——"No matter how we tuned our previous cloud data warehouse, ClickHouse was faster."(无论我们怎么调优之前的云数仓,ClickHouse 就是更快。)
窄场景
高基数事件分析、需要秒级新鲜度的用户行为分析;Airflow rollup 越堆越多的团队。
机制
Snowflake 行列混存对高并发点查/事件分析不是最优解;预聚合链路(Airflow rollup)是架构税;ClickHouse 物化视图在写入时预聚合,退役 Airflow。
生产验证
来源 37:ClickHouse 官方博客客户访谈 2026([来源存疑]:厂商邀请的客户访谈,非客户自发撰写)——受访人 Appcues 工程副总裁 Chris Brookins 具名;迁移方式:Snowflake 全量导出为 S3 Parquet 再导入(PoC 快 73%),随后一年期 "in-flight migration"("We were doing this while the plane was flying")。
证据等级
`单方声音`,[来源存疑]:未见 Appcues 自家工程博客的独立版本。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

"Snowflake 原谅低效查询,账单最后才让你疼"

单方声音
升级迁移
一句话
一线从业者十年三次迁移(Teradata→Snowflake→BigQuery)的毒观察:on-prem 时代"efficiency wasn't a virtue, it was a constraint"(效率不是美德,是硬约束);迁入 Snowflake 后,"the platform that was supposed to free us from infrastructure concerns has instead freed us from the consequences of bad engineering"(本该把你从基础设施中解放的平台,反而把你从烂工程的后果中解放了)——弹性算力让低效查询、脏数据悄无声息堆积,直到有人看账单那一刻才爆:"Snowflake forgives (inefficient queries). BigQuery punishes."
窄场景
从 on-prem/固定容量迁入 Snowflake 的团队;SQL 质量无人看管的组织。
机制
弹性计费移除了"写烂 SQL 立刻疼"的反馈回路;数据质量侧同样:"Neither is a true relational database and neither enforces referential integrity. So errors that a proper RDBMS would have rejected at the gate instead quietly propagate through your data."(两家都不强制引用完整性;正规 RDBMS 会在入口拒绝的错误,在这里悄悄向下游传播。)
生产验证
来源 42:Steven Jeffrey Feldman 2026-03(短文回应体,细节较少,作为观点性记录);
来源 41:Receipt Bank"账单反而更高"的实例与此机制同调。
证据等级
`单方声音`,独立从业者亲历观察(观点性,机制与来源 41 的实例互相印证)。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

JDBC 把"密码错误"报成"连不上":SQLState 08001,连接池会无限重试错误密码

单方声音
生态与信任
一句话
错误密码登录返回 `errorCode=390100 sqlState=08001 msg=Incorrect username or password was specified`——但 08001 的含义是"SQL client 无法建立连接"(网络类故障),认证被拒按 SQL 标准应为 28000;所有按 SQLState 做错误分类的通用工具(jOOQ、连接池、重试框架)都会把"密码错了"这种永久性失败当成瞬时网络抖动去重试,jOOQ 还会映射成 503 而不是 401。
窄场景
JDBC + 连接池/重试框架/jOOQ 的 Java 服务;靠 SQLState 做错误分类的中间件。
机制
`SessionUtil.java` 登录失败抛错处硬编码了 `SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION`,无视服务端返回的 error code;讽刺的是驱动对本地检测到的缺用户名/缺密码反而正确用了 28000。
生产验证
来源 46:snowflake-jdbc 官方仓库用户 issue #2681(2026-06-26,作者 andriivaliukh,数据库工具方向工程师)——附完整复现代码和修复方案(含 8 个认证拒绝码的映射表),"reproduced firsthand"(亲手复现)。
证据等级
`单方声音`,用户亲手复现+修复方案;同仓库同期多个连接/认证类 issue 说明该管线是投诉集中区,但 SQLState 误标这一点是该 issue 首次系统性指出。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

没有 schema-on-read:COPY INTO 要你预知未来,Databricks Auto Loader 不用

单方声音
生态与信任
一句话
同一套欺诈分析 workload(含 6 种"脏数据"注入)双平台实跑:Databricks Auto Loader "infers schemas on first sight, evolves them as files arrive, and rescues unknown fields"(初见即推断、文件到了就演进、未知字段自动兜底),schema v1→v2 演进零代码改动;Snowflake `COPY INTO` 要求目标列预先声明,"Schema mismatches are hard errors unless you wrote the COPY transform defensively"——"both produced the same downstream silver table, but Snowflake required me to know the future schema in advance and Databricks didn't."
窄场景
半结构化/ schema 演进的源数据入仓;"脏数据"常态化的 pipeline。
机制
Snowflake 的 COPY INTO 是 schema-on-write:目标结构必须预先声明,schema 对不上即硬报错;Databricks Auto Loader 是 schema-on-read:推断+演进+兜底。Snowflake 的 Schema Inference 功能长期 private preview,未见 GA 公告。
生产验证
来源 50:独立从业者 btriani 公开实测 repo(2026-05,同一 workload 双平台实跑 + 4 项 parity 校验,可复跑代码)。
证据等级
`单方声音`,一人实测 repo,但为可复跑代码 + parity 校验,非空口对比。
最后核验
2026-10-07
备注
缺口状态:至今缺失。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

流批一体缺失:Databricks 切流批改个参数,Snowflake 得换架构

单方声音
生态与信任
一句话
Databricks 侧 Structured Streaming 是 first-class,"same code works batch and stream",从批切到流是 "Flip one option (`trigger=continuous`)";Snowflake 侧 `COPY INTO` "inherently batch (one file/execution)",想上流式得换 Snowpipe auto-ingest 架构——而 Snowpipe auto-ingest 需要 S3+SNS 的外部事件链路,"out of scope for trial"(连试用都搭不起来)——"on Databricks the path from batch → streaming is a flag flip. On Snowflake it's an architecture change."
窄场景
从批处理向流处理演进的 pipeline;PoC 阶段想快速验证流式链路的团队。
机制
Databricks 的批流是同一套 API 的两种触发模式;Snowflake 的批(COPY INTO)与流(Snowpipe)是两套架构、两套 API,切换=重搭链路。
生产验证
来源 50:btriani 双平台实测 repo 第 6 问(2026-05)。
证据等级
`单方声音`,同一实测 repo 的另一问结论(可复跑代码 + parity 校验)。
最后核验
2026-10-07
备注
缺口状态:至今缺失(Snowpipe Streaming 是另一套 API/架构,无"同一份代码批流通用"的声明式流处理)。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

Unity Catalog 治理的是表+模型+端点+notebook,Horizon 只看得见表

单方声音
生态与信任
一句话
Databricks Unity Catalog 的治理对象是"Tables + files + ML features + model versions + serving endpoints + vector indexes + notebooks + agents","UC's surface area is broader because Databricks ships ML and notebooks as first-class governable objects";Snowflake Horizon 是"Tables + views + business metrics + row policies + column masks + dashboards"——"Narrower scope but cleaner primitives"(范围窄,但原语干净);当治理对象超出"仓里的表"(模型、端点、notebook 协作)时,Horizon 没有对应物。
窄场景
ML 与数据平台共用一套治理的组织;需要治理 notebook 协作与模型端点的团队。
机制
Horizon 的设计边界是"仓内对象";Databricks 把 ML/ notebook 当一等治理对象。作者对 Horizon 的 masking/row-access-policy 语法亦有公允评价,非一边倒。
生产验证
来源 50:btriani 实测 repo 第 3 问(2026-05)。
证据等级
`单方声音`,独立实测 repo(作者对双方均有公允评价)。
最后核验
2026-10-07
备注
缺口状态:至今缺失。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

地理空间负载:BigQuery GIS 又快又原生,Snowflake 复杂空间 join 落后 [来源存疑]

单方声音 来源存疑
性能问题
一句话
30 天双平台实测(同一 workload 双跑:pipeline + adhoc、三个 BI 工具、每天约 8TB 扫描)专列 "Native GIS Performance":"BigQuery handled our geospatial queries significantly faster. Its native GIS functions and columnar storage for geography types are a genuine advantage for logistics, delivery, or any location-aware workloads. Snowflake supports geospatial queries but lags on performance for complex spatial joins at scale.";选型建议直接写:"Choose BigQuery if… Geospatial or GIS workloads are part of your stack"。
窄场景
物流、配送、位置相关的地理空间负载。
机制
Snowflake 有 GEOGRAPHY 类型与 ST_ 函数,但在规模化复杂空间 join 的性能与函数完备度上不及 BigQuery GIS 的原生实现。
生产验证
来源 54:@aidelearning 30 天双平台生产 workload 实测,2026-03-31([来源存疑]:课程引流性质的内容营销,但测试方法与数字具体:8TB/天、$4,820 vs $3,940)。
证据等级
`单方声音`,[来源存疑]:主来源为课程引流文章;另有一条 2020 年 HN 评论侧面印证"地理空间长期是短板印象",时间较早未编号。
最后核验
2026-10-07
备注
缺口状态:至今缺失。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

成本可观测性:BigQuery 按用户/标签查账单零配置,Snowflake 视图延迟 3 小时还要多表 join [来源存疑]

单方声音 来源存疑
运维复杂度
一句话
同一篇双平台实测:"BigQuery's INFORMATION_SCHEMA is significantly richer for cost attribution. The JOBS_BY_PROJECT view lets you attribute costs to users, labels, and time windows with zero configuration. Snowflake has ACCOUNT_USAGE views, but they're delayed by up to 3 hours and require more joins to get useful breakdowns."——"feeding directly into cost dashboards… often the first thing that changes analyst behavior when they can see their own tab"(直接喂给成本看板;当分析师能看到自己的账单时,行为往往最先改变)——Snowflake 侧要做到同样效果得多花几小时搭 pipeline。
窄场景
想做"按用户/标签"成本归因、推动分析师为自己账单负责的 FinOps 团队。
机制
这不是"不能做",是"原生能力缺口":BigQuery 原生就有、Snowflake 得自己造;ACCOUNT_USAGE 延迟(文档口径最长 3 小时)至今仍是现状。
生产验证
来源 54:@aidelearning 30 天双平台实测,2026-03-31([来源存疑]:课程引流性质,但测试方法与数字具体)。
证据等级
`单方声音`,[来源存疑]。
最后核验
2026-10-07
备注
缺口状态:至今缺失。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

DDL 版本控制至今没有:ALTER 一下,旧结构就永远没了

单方声音
运维复杂度
一句话
"Snowflake does not natively version your object definitions."(Snowflake 不对你的对象定义做原生版本管理。)"If you `ALTER TABLE` something, the old structure is gone. If a stored procedure gets replaced at 2am, there is no rollback."——作者团队亲历:生产表上季度丢了一个列,"Nobody knew when. Nobody knew who. It took three engineers half a day to piece together what happened."(没人知道什么时候、没人知道谁干的,三个工程师花了半天才拼凑出真相。)
窄场景
多人协作、多环境、需要审计"谁改了表结构"的团队。
机制
讽刺的是 2025 年 11 月 Snowflake 的 Git 集成才 GA,而 Git 集成只管代码文件同步——对象定义的 DDL 历史至今仍要靠自建 task 定时扫 `ACCOUNT_USAGE` 再 push 到 GitHub 来补,作者为此写了一整套 nightly 捕获+AI 摘要的管线。
生产验证
来源 55:独立从业者 Nimish Nagpal 个人博客,2026-08——一线数据工程师,为自家 Snowflake 环境自建 DDL 版本捕获管线。
证据等级
`单方声音`,一线工程师实战记录(自建管线的存在本身就是缺口的证据)。
最后核验
2026-10-07
备注
缺口状态:至今缺失(Git 集成 GA 只解决代码文件同步,不解决对象 DDL 历史版本管理)。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

元数据接口残缺:想导出一份完整 DDL,得自己写 600 行存储过程

单方声音
运维复杂度
一句话
数据架构师为客户做 Snowflake 环境现代化,被迫手写 610 行 Python 存储过程导出整库 DDL,因为原生能力处处是洞:"Snowflake's metadata surface is inconsistent across object types, SHOW commands have silent truncation limits that can break downstream logic"——`GET_DDL('DATABASE', ...)` 导出的视图没有依赖排序、直接跑就报错,还漏掉 stage、task、pipe、database role、grant 以及 Notebook、Semantic View 等新对象;`GET_DDL` 根本不支持 STAGE;`SHOW PROCEDURES` 的参数列静默截断长参数列表,拿到的签名是残的——被迫改从 `INFORMATION_SCHEMA` 取 16MB TEXT 完整签名再手工清洗。
窄场景
想把 Snowflake 纳入版本控制/IaC 的团队;做环境迁移、审计的架构师。
机制
元数据接口在对象类型间不一致 + SHOW 命令静默截断 + 无依赖排序——三者叠加让"导出完整 DDL"这件本该原生的事变成 600 行手工作业。
生产验证
来源 56:数据架构师 Andy Brown 个人博客,2026-03-31——客户现场实战长文(22 分钟),细节极充分。
证据等级
`单方声音`,客户现场实战记录(610 行存储过程的存在本身就是缺口的证据)。
最后核验
2026-10-07
备注
缺口状态:至今缺失(2026-03 实测仍成立)。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2026

升级工程税:三分之一的升级会出意外,兼容级别"手刹"常年不松

单方声音
升级迁移
一句话
SQL Server 升级本身只要 20 分钟,周围的工程要几周——第三方软件不认新版本、兼容级别升完不敢提、"手刹"一拉就是几个月。
窄场景
有 ISV/ERP/医疗系统等第三方应用的生产库;in-place 升级后直接把兼容级别提到最新的团队。
机制
升级真正的杀手是组织性的:ISV 没给新版本做认证(有的 HIS 系统甚至硬编码了 SQL Server 版本检查,2016 以上直接报错);升级后数据库保留旧兼容级别——新优化器特性(CE、PSP)全不生效,等于"拉着手刹开车";而一旦提兼容级别,计划回归又要靠 Query Store 盯一周。作者的经验数字:约三分之一的升级会出点意外("something unexpected happens on roughly one in three upgrades"),所以他默认推荐 side-by-side 而非 in-place——旧服务器留着才能秒回滚。
生产验证
来源 6,2026-04 实战指南——作者列出升级失败的常见真因:缺厂商书面确认、没 staging 环境(第一次测试就是生产)、忘了 SSIS 包/Reporting Services/CLR 依赖、兼容级别升完"手刹"数月;并给出完整 pre/during/post 检查清单。
证据等级
`单方声音`,个人博客(细节充分:三升级路径对比、检查清单、1/3 意外率的现场经验)。
最后核验
2026-10-03

Microsoft SQL Server 年份:2026

Always On 只读路由:配了一半,读流量全砸在主库上

单方声音
运维复杂度
一句话
把副本设成可读、连接串加上 ApplicationIntent=ReadOnly,还差一步——主库上的只读路由列表没建,所有读请求默默回落到主库,直到报表超时才有人发现。
窄场景
用 AG 可读副本做读扩展(read-scale)的团队;照着向导点完"允许读连接"就以为完事的。
机制
只读路由是两个独立配置对象:副本侧的"可读 + 路由 URL",和主库侧的"只读路由列表"。SSMS 向导不会强制你走完第二步;没有路由列表时,带读意图的连接直接落在主库上按读写执行——静默失败,无任何报错。更坑的是路由列表定义在"当前主库"上,故障转移后新主库也得有一份,每副本都要配一遍;负载均衡还是按连接轮询,不看副本延迟,副本 redo 落后 40 秒它也照样把查询扔过去。
生产验证
来源 7,2026-09 顾问复盘——客户凌晨 6 点被叫醒:报表 dashboard 超时,主库被所有读查询打满,两个健康的只读副本"除了 redo 啥也没干"。排查发现数月前配的 read-scale 漏了主库路由列表;作者称这是"AG 读扩展配置里最常见的错误"。
证据等级
`单方声音`,个人博客(细节充分:6 点叫醒、排查过程、DMV 验证查询)。
最后核验
2026-10-03
备注
该文还提醒——可读副本不是免费的,除被动故障转移配置外都要按正常 SQL Server 许可;Standard 版的 Basic AG 根本不支持可读副本。与 [吐槽] 按核许可卡交叉引用。

Microsoft SQL Server 年份:2026

Always On + 加密:自动种子跳过主密钥密码,故障转移后解密失效

单方声音
稳定与故障运维复杂度
一句话
用自动种子(automatic seeding)把加密库加进 AG,向导会跳过数据库主密钥密码校验——故障转移后新主库打不开 DMK,应用的加解密直接报错。
窄场景
用对称密钥/证书做列级加密、且跑在 AG 上的库;用自动种子而非"完整备份+日志备份"方式加副本的团队。
机制
SQL Server 加密链是 SMK(服务主密钥,实例级)→ DMK(数据库主密钥)→ 证书 → 对称密钥。DMK 默认同时被本地 SMK 加密保护;故障转移后新主库的 SMK 变了,打不开 DMK——除非每个副本上都用 `sp_control_dbmasterkey_password` 存一份 DMK 密码凭据。坑在于:AG 向导选"完整备份+日志备份"做初始同步时会自动建这个凭据,选自动种子时却跳过密码校验这一步,结果就是"配的时候一切正常,第一次故障转移才爆"。
生产验证
来源 8,2026-06 咨询公司客户案例复盘——作者完整复现:自动种子加库后故障转移,应用无法加解密;逐副本执行 `sp_control_dbmasterkey_password … @action='add'` 后恢复;并追问"为什么自动种子不做备份方式会自动做的事",表示自己也无法解释。
证据等级
`单方声音`,咨询公司博客(细节充分:客户案例 + 完整复现步骤 + 两种种子方式的对照实验)。
最后核验
2026-10-03

Microsoft SQL Server 年份:2026

Always On 滚动升级八坑:先 drain 后挂起,代价是主库停写

单方声音
运维复杂度升级迁移
一句话
升级 AG 集群时自动化脚本先 drain 节点再挂起数据移动——顺序反了,同步提交的主库等一个正在被抽走的副本确认,写请求在主库上卡了两三分钟,而你动的明明是备库。
窄场景
同步提交 + 自动故障转移的 AG;做 OS/集群滚动升级、按直觉写"先排空节点再停复制"的自动化。
机制
同步提交 AG 里主库提交要等备库硬化日志。drain 节点时数据移动还是 active + synchronous,主库的提交就卡在"等一个正在被拔走的副本"上。正确顺序是先 `SUSPEND` 数据移动(把主库从该副本解耦)再 drain——但前提是 `required_synchronized_secondaries_to_commit=0`,否则挂掉唯一的同步备库反而会堵死主库提交,错上加错。同一次升级还踩了:统计作业在故障转移中途被 kill、回滚卡在 0%,四个库 NOT SYNCHRONIZING;两节点 CU 差一个版本,备库 build 低于主库不支持 redo;26GB 的 Windows CU 差点撑爆系统盘;Microsoft Update 通道会"顺手"装上没计划的 SQL CU。
生产验证
来源 9,2026-09 生产实录——两节点 SQL Server 2022 Enterprise AG(AWS+GCP 混合),WS2022→WS2025 原地滚动升级,8 个坑逐个记录命令与修复;作者强调"两步都在脚本里、两步都'成功'了,只有顺序是错的,而伤害发生在根本没碰过的主库上"。
证据等级
`单方声音`,个人博客(细节充分:8 个坑各有现象、命令与修复,生产环境实录)。
最后核验
2026-10-03

Microsoft SQL Server 年份:2026

Iceberg 分区缓存:查 10 个分区,先把 660 万个分区全 load 进堆内存

单方声音
性能问题稳定与故障
一句话
StarRocks 的 Iceberg Catalog 查分区是"全量加载再过滤"——`getPartitionsByNames()` 内部调 `getPartitions()`,查 10 个分区也要先把 660 万个分区对象塞进 FE 堆,24GB 堆直接 OOM,FE pod 崩溃重启。
窄场景
Iceberg 外表分区数达到百万级(用户实测 660 万+ 分区)、FE 堆 24GB、K8s 部署;任何带分区谓词的查询在规划期即触发。
机制
三处叠加:① `IcebergCatalog.getPartitions()` 贪婪加载全部分区;② `partitionCache` 用 maximumSize(按表数限)而非按权重限,管不住单个大表的分区数,分区级内存无界增长;③ `getPartitionsByNames()` 内部直接调 `getPartitions()`,只想要 10 个分区也得先全量加载。发生在查询规划期(memo 阶段 37 秒超时),不是后台任务——后台 refresh 只是让情况更糟。用户还附了堆 dump 证据。
生产验证
来源 2:GitHub issue #67760,2026-01,用户在 GKE 上 40GB pod(FE 堆 24GB)跑 3.5.9,对 660 万分区的 Iceberg 表做分区裁剪查询,堆涨到 20GB+ 后 `OutOfMemoryError: Java heap space`,FE pod 崩溃重启;用户给出三处代码级根因定位与修复建议。
证据等级
`单方声音`,GitHub 用户 issue(细节充分:版本号、堆大小、分区数、planner 超时日志、堆 dump 附件、代码级根因)。
最后核验
2026-10-03

StarRocks 年份:2026

嵌套物化视图刷新:内层 MV 新鲜度一未知,外层直接 NPE

单方声音
运维复杂度
一句话
异步物化视图套娃(外层 MV 依赖内层 MV)时,内层 MV 的分区新鲜度一旦是 FULL/UNKNOWN,外层刷新不降级、不报错,直接空指针异常失败。
窄场景
多层嵌套的异步分区 MV(`REFRESH ASYNC` + `auto_refresh_partitions_limit` 等分区刷新参数),基表为内部表(Duplicate/PK 表)即可复现,无需外部 catalog。
机制
外层 MV 刷新前检查基表新鲜度,递归走到内层 MV 时,`MvRefreshArbiter.getMvBaseTableUpdateInfo()` 在 timeliness 为 FULL/UNKNOWN 时返回 null,而 `MVTimelinessArbiter.collectBaseTableUpdatePartitionNames()` 不做空检查直接解引用 → `NullPointerException`,刷新任务失败。保守做法应是降级为全量刷新或给明确错误,但当时是直接 NPE。临时规避:先手工刷内层 MV,再刷外层——依赖链的拓扑顺序要人肉保证。
生产验证
来源 3:GitHub issue #73716,2026-05,用户在 3.5.15 上报嵌套分区 MV 刷新 NPE,附完整堆栈、复现的 MV 定义与规避方法;关联 issue #71975 为查询改写路径的同类空指针问题。
证据等级
`单方声音`,GitHub 用户 issue(细节充分:版本、堆栈、复现配置、规避方案)。
最后核验
2026-10-03
备注
修复 PR #73644 已提出,合并状态本次未核验,未作"已修复"标注;本卡主题可能与本站 [避坑] 卡重叠。

StarRocks 年份:2026

"TDSQL" 到底指哪个:产品线命名与版本线混乱

单方声音
生态与信任
一句话
"TDSQL" 不是一款产品——同名之下有分库分表型(for MySQL,原 DCDB)、云原生型(TDSQL-C,原 CynosDB)、PG 版(TBase 系),连 PG 版内部都有 V2/V5.06/V5.21 三条内核线并行停售;选型第一步就可能买错。
窄场景
初次接触腾讯云数据库产品线的选型者;按"TDSQL 评测/对比"关键词做功课的团队。
机制
品牌统一为 TDSQL 后,原 DCDB、原 CynosDB、TBase 共用名前缀,但架构(Shared Nothing 分片 vs 存算分离 vs PGXC 系)与兼容性完全不同。PG 版三条内核线:V2(纯 PG 兼容)2023.12.30 停售、V5.06(Oracle 兼容)2025.12.30 停售、V5.21(2024.06 起售)为当前主推;V2 老用户需走 DTS 迁到 V5.21。
生产验证
来源 1:colask 2026-05 选型调研——"本章解决一个常见误解:TDSQL 不是单一产品。市面上很多对比文章把'TDSQL'当作一个东西来写,得出'TDSQL 不支持触发器/存储过程'等结论。这只对 TDSQL for MySQL(分布式版)成立,对 TDSQL-C MySQL 版(云原生版)完全错误。混淆这点会导致选型彻底跑偏。"
证据等级
`单方声音`,独立选型评估(细节充分:产品矩阵图 + 版本线梳理;官方《PG 版产品简介》仅作版本生命周期机制佐证)。
最后核验
2026-10-03

腾讯云 TDSQL 年份:2026

shardkey 是建表时的一次性赌注:选错无后悔药

单方声音
性能问题运维复杂度
一句话
shardkey 在建表时一次定终身——选错导致数据倾斜或跨分片查询,没有在线改键的后悔药,只能重建表、迁数据、切路由。
窄场景
业务增长后发现分片键选择不当(热点商户打爆单分片、时间列做键导致热分片)的 TDSQL for MySQL 实例。
机制
shardkey 决定 hash 路由与数据分布。官方明确:不支持 ALTER 对分表键改名;不要 UPDATE shardkey 列的值(会改变数据分布,需先 DELETE 再 INSERT);shardkey 值不应含中文(网关不转换字符集,不同字符集可能路由到不同分区);查询不带 shardkey 即全分片扫描+网关聚合。选错后的标准解法只有重建表迁数据。社区方言参考亦提醒:"shardkey 选择直接决定查询性能和数据分布均匀度"。
生产验证
来源 1:colask 2026-05 选型调研——"需要在建表时规划 shardkey,否则会遇到数据倾斜与跨分片查询问题"。
证据等级
`单方声音`,独立选型评估(官方文档仅作机制佐证;未找到具名的"选错后返工"生产复盘,机制层面风险明确,如实标注缺口)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

腾讯云 TDSQL 年份:2026

流式 UPDATE:更新一行扫 31GB,每次作业还有 10MB 起步价

单方声音
成本账单
一句话
BigQuery 不是为行级更新设计的——改一行一列要重写整个列块;雪上加霜的是,每次作业还有最低计费,流式小更新等于按"起步价"论次收费。
窄场景
把 BigQuery 当 OLTP 用、逐行流式更新维度表/状态表的 CDC 式写入;按量计费下高频小 UPDATE 的管道。
机制
列式存储以大压缩块存放数据,单行 UPDATE 触发所在列块的解压-修改-重写,扫描量远超同条件 SELECT(作者实测:取一行一列 SELECT 扫 667MB,同条件 UPDATE 扫 31.71GB);按量计费下每个查询作业有 10MB 最低计费(实际扫 6.1KB 也按 10MB 收);容量计费(slot)下按 slot-second 计费但有 1 分钟最低消费(实际跑 21 毫秒按 1 分钟收)。UPDATE 还不能用索引搜索,只能靠分区/聚簇减扫描。
生产验证
来源 5,Karanrat Rattanawichai 2025-09-27 实测记录——带截图的计费明细:6.1KB 实际扫描被收 10MB、21 毫秒作业被收 1 分钟 slot;结论是"不要流式 UPDATE 到 BigQuery",改用追加写入 + 窗口函数去重或批量 MERGE。
证据等级
`单方声音`,个人博客(细节充分:带截图的实测计费数据、SELECT/UPDATE 对比扫描量)。
最后核验
2026-10-03

Google BigQuery 年份:2025

动态分区过滤被优化器"不信任":2.5GB vs 85MB,30 倍账单差

单方声音
成本账单
一句话
同样的分区表,写死日期只扫 85MB,换成 `MAX(DATE())` 子查询动态取最新一天就扫 2.5GB——优化器不信任你算出来的"常量",分区裁剪直接失效。
窄场景
按小时/天分区的表 + 看板类"取最新一天数据"的动态过滤查询;把日期逻辑写成子查询/CTE 的 BI 查询。
机制
分区裁剪只对静态字面量可靠;`WHERE DATE(ts) = (SELECT MAX(DATE(ts)) …)` 这类动态谓词下,优化器无法确信子查询结果可作为裁剪常量(作者实验:连从 INFORMATION_SCHEMA.PARTITIONS 取 MAX(partition_id) 再经 CTE 传入的"常量"都不被信任),退化为大范围扫描;更进一步,把这类子查询写进 JOIN ON 会直接报错 "Unsupported subquery with table in join predicate"。同一张表、同一语义,硬编码日期 85MB,动态写法 2.5GB。
生产验证
来源 6,Nitheesh Varma 2025-07-01 团队复盘——为 Looker Studio 看板做"最新可用一天"查询,逐轮实验记录扫描量:硬编码日期 ~85MB;`MAX(DATE())` 子查询稳定 2.5GB(约 30 倍);INFORMATION_SCHEMA + CTE 方案依然 2.5GB;最终靠"先 CTE 预过滤再 JOIN"的改写绕过。
证据等级
`单方声音`,个人博客(细节充分:多轮对照实验的扫描量数据、报错原文)。
最后核验
2026-10-03

Google BigQuery 年份:2025

ON CLUSTER DDL 在副本故障时长时间挂起:一个副本挂了,全集群 DDL 卡住

单方声音
稳定与故障运维复杂度
一句话
某个副本挂了,ON CLUSTER 操作"will take a lot of time",超时没配好应用跟着遭殃——表删不掉、副本"无理由"只读是家常便饭,修法是删表重建让复制自己恢复。
窄场景
多副本集群做 schema 变更;有副本故障未及时发现的集群。
机制
ON CLUSTER 要等所有副本 ack,挂掉的副本让 DDL 长时间挂起;应用侧超时若没配好会被拖死。运维日常包括"表删不掉"和"副本无理由只读",标准修法简单粗暴:删表重建。
生产验证
—
证据等级
`单方声音`,具名大厂 CTO 级复盘。
最后核验
2026-10-07

ClickHouse 年份:2025

FINAL 是"代码坏味道":去重税从写入转嫁到每次查询

单方声音
性能问题
一句话
ReplacingMergeTree 用户曾给所有查询加 FINAL 当"安全网",结果"forces an extra merge for every query…On large datasets, it slowed queries down drastically"——FINAL 正确但慢,且并行度差。
窄场景
ReplacingMergeTree 去重表;"查询不加 FINAL 就不对"的团队。
机制
FINAL 在查询期做去重合并,无法很好并行;大数据集上每个查询都付一次合并税。结论是把 FINAL 当调试工具——"If your queries always need FINAL, the problem is your data model"("FINAL is a code smell")。
生产验证
—
证据等级
`单方声音`。
最后核验
2026-10-07

ClickHouse 年份:2025

没有 time travel:原生表误删,只能去翻备份

单方声音
运维复杂度
一句话
Tinybird CTO:"有两种数据工程师:一种是曾经误删过表的,另一种是将来会误删的。如果你误删了一张表,就只能去翻备份了,那真是个 pain in the ass."
窄场景
误删表/误删分区后的恢复;想回看历史快照。
机制
Time travel 仅 Iceberg 外表支持(25.4+);原生 MergeTree 表截至 2026-10 无 time travel。`UNDROP TABLE`(23.3 起实验性)只能救"误删表"这一种场景,不是通用时间回溯;行级误删、历史快照回看仍只能靠备份。
生产验证
—
证据等级
`单方声音`。
最后核验
2026-10-07

ClickHouse 年份:2025

DBR 版本同步:升级本身是一个项目

单方声音
升级迁移
一句话
DBR 大版本一跳,集群配置、依赖库、Spark Connect 行为全要重测——"跟上版本"本身就是一个常年项目。
窄场景
长期运行的老工作区;从旧 LTS 向新 LTS 迁移的团队。
机制
Databricks Runtime 捆绑 Spark、Delta、Python、Java 大版本,LTS 之间跳跃常伴随破坏性变更(Python 小版本、Spark Connect 行为、UC 强制要求);集群与代码深度耦合 runtime,升级等于全量回归。
生产验证
来源 7,PeerSpot 具名复评——Parag Bhosale(物流公司 Senior Data Engineer,2025-01):"We need to stay in sync with the DVR versions, and migrations can pose challenges. For example, issues arose when we moved a cluster from a previous version to the latest one."(引用原话)
证据等级
`单方声音`,具名用户复评(细节充分:版本同步→迁移挑战→具体升级出问题)。
最后核验
2026-10-03

Databricks 年份:2025

真实故障问 RCA,答复是"请提工单":事故透明度不足

单方声音
稳定与故障生态与信任
一句话
AWS us-east-1 上 Classic/Serverless/DLT/Jobs 曾全量不可用约 50 分钟,客户在社区公开索要 RCA,官方回复"请向 Support 提工单"——没有公开事故复盘。
窄场景
把 Databricks 当核心生产依赖、需要事故复盘做灾备设计的团队。
机制
控制面集中化意味着区域性故障是"全量不可用"而非降级;第三方状态页镜像记录 2026-09 三起事故(ES-2231583 us-east-1 50 分钟全不可用、Azure East US 降级、AWS DLT 降级 2.5 小时),但官方无公开 RCA 流程。
生产验证
—
证据等级
`单方声音`,客户原声帖(事故事实有第三方状态页交叉记录)。
最后核验
2026-10-07

Databricks 年份:2025

SQL warehouse 并发排队:单集群约 10 并发,扩缩还要先等 5 分钟

单方声音
性能问题
一句话
一个 SQL warehouse 同时只能跑约 10 个查询,第 11 个进排队;Classic/Pro 的自动扩缩是"慢规则"——排队的查询要先等 5 分钟扩缩才开始。
窄场景
Power BI 同一身份多报表并发;突发流量打到 Classic/Pro 仓库。
机制
单集群并发上限约 10,超了进 queuing state,官方建议"每 10 个并发查询配 1 个集群"。Classic 的自动扩缩:排队查询等 5 分钟才开始扩,缩容要连续 15 分钟低负载——"没有什么东西会在配置与负载错配的那一刻提醒你"。
生产验证
—
证据等级
`单方声音`,社区实测 + 厂商博客(机制有官方文档交叉证实)。
最后核验
2026-10-07

Databricks 年份:2025

递归 CTE 缺失到 2025-08:求助帖的 workaround 是"用 Scala 手写循环"

单方声音
生态与信任
一句话
2025 年 7 月还有用户在社区求递归 CTE,唯一的 workaround 是 Scala 手写迭代循环(迭代次数 hard-code 10)——次月官方才 GA。
窄场景
组织层级、物料 BOM、图遍历等递归查询;从 Postgres/Snowflake 迁移的 SQL。
机制
Databricks SQL 直到 Databricks SQL 2025.25(2025-08-20 rollout)/ DBR 17.2+ 才 GA 递归 CTE。在此之前 SQL 层面无解,只能换语言手写循环。
生产验证
—
证据等级
`单方声音`,单帖但细节充分。
最后核验
2026-10-07

Databricks 年份:2025

原生 GIS 缺失多年,2025-07 才补上:之前只能装 Sedona 或手写 UDF

单方声音
生态与信任
一句话
DBR 17.1(2025-07)之前 Databricks 无原生地理空间类型与 ST_* 函数,空间分析只能装 Apache Sedona/Mosaic 或手写 UDF——" significantly slower" 且有运维负担。
窄场景
LBS、风控反欺诈、物流等空间分析场景。
机制
2025-07 前无 GEOMETRY/GEOGRAPHY 原生类型;第三方库要装 cluster library(维护负担),UDF 方案慢。DBR 17.1 引入原生类型,2025.25(2025-08)新增 80+ spatial SQL 表达式。
生产验证
—
证据等级
`单方声音`,事后回顾性描述(缺口期直接抱怨帖未找到)。
最后核验
2026-10-07

Databricks 年份:2025

Time travel 的版本"保不保得住"要自己算:默认 VACUUM 7 天静默清历史

单方声音
运维复杂度
一句话
Delta time travel 能回看几个版本不是平台保证的——默认 VACUUM 7 天清理历史版本,"用了几年的代码突然报 `Cannot time travel…Available versions: [3, 23]`"。
窄场景
依赖 time travel 做审计/回滚的 pipeline;长期运行的老代码。
机制
历史版本保留取决于三个表属性(`delta.logRetentionDuration` / `delta.deletedFileRetentionDuration` 等),默认 7 天 VACUUM 静默清理。想保长期历史得手动调参——"可配置但默认坑人"。
生产验证
—
证据等级
`单方声音`。
最后核验
2026-10-07

Databricks 年份:2025

Flink 写 Doris 超时:FE 给的是 BE 私网地址,报错只说 timeout

单方声音 来源存疑
运维复杂度
一句话
Flink SQL 写入 Doris 时,FE 返回的 BE 地址是内网 IP,Flink 侧直连超时;报错只有一句 `Connection timed out`,不告诉你真正连的是谁。
窄场景
Flink 与 Doris 不在同一内网(跨网段/VPC),用 flink-doris-connector 做 Kafka→Doris 实时写入。
机制
Flink connector 先问 FE 要 BE 节点列表,FE 按自身配置解析出 BE 的私网 IP 返回;connector 再直连 BE 的 8040 端口做 Stream Load。跨网段时私网 IP 不可达 → `HttpHostConnectException: Connection timed out`。报错只给超时,不暴露"FE 返回的地址不可达"这一层信息,排查要靠读 connector 源码/官方文档才知道要在 with 参数里配 `benodes` 显式指定可达地址。
生产验证
来源 5:CSDN 个人博客(2025-10-10)——Kafka 经 Flink SQL 入 Doris,BE 明明存活且监听正常,始终 `Connect to ***:8040 failed: Connection timed out`;按官方文档解释在 with 参数加 `'benodes'` 后解决。
证据等级
`单方声音 [来源存疑]`,CSDN 匿名个人博客(内容具体:完整报错栈、日期、解法;但作者归属与独立性无法确认)。
最后核验
2026-10-03

Apache Doris 年份:2025

Flink CDC 同步 MySQL 到 Doris:类型映射处处是坑

单方声音 来源存疑
运维复杂度
一句话
MySQL 的 JSON/ENUM/TIMESTAMP(6)/BIT 在 Doris 里没有直接对应,Flink CDC 同步要么写入失败、要么小数被截断、要么时间整体偏移 8 小时。
窄场景
用 Flink CDC + Debezium 把 MySQL 同步到 Doris 做实时数仓。
机制
Doris 是严格关系模型,类型系统与 MySQL 不对齐:JSON/ENUM 无原生对应(需转 VARCHAR/STRING);Doris TIMESTAMP 默认秒级精度,MySQL TIMESTAMP(6) 微秒写入会失败或丢精度;DECIMAL 精度/标度不一致会被截断;BIT(1) 需显式转换;Flink 默认 UTC 而 MySQL 按 Asia/Shanghai 存 TIMESTAMP,不统一时区整列偏移 8 小时。Debezium 的 snapshot.mode、inconsistent.schema.handling.mode 配错还会导致 schema 变更不同步、类型解析失败。
生产验证
来源 6:CSDN 个人博客(2025-11-13)——"在Flink CDC同步MySQL到Doris的过程中,数据类型不兼容是高频错误点",逐项列出 JSON/ENUM、TIMESTAMP(6)、DECIMAL、BIT、时区 8 小时偏移的映射冲突与配置解法。
证据等级
`单方声音 [来源存疑]`,CSDN 匿名个人博客(细节充分:逐项类型冲突 + 配置解法;作者归属与独立性无法确认)。
最后核验
2026-10-03

Apache Doris 年份:2025

"随手加个索引":一个 GSI 让账单涨 $800/月、写入慢 40%

单方声音
性能问题成本账单
一句话
为修慢查询随手加的 GSI,因为投影配置不当,每月多花 $800,写入还慢了 40%。
窄场景
为修复慢查询临时加 GSI、投影选 ALL 的高写入表。
机制
每个 GSI 是一份独立计费的副本:基表每次写入 → 每个 GSI 产生一次写入(1 个 GSI = 2 倍 WCU,N 个 GSI = N+1 倍);投影选 ALL 会把整行复制进索引,存储与写入成本双涨;GSI 有自己独立的容量配置,配不足会反压基表写入(写入变慢)。
生产验证
来源 4,Rob Abbott 2025-10——新版本上线后慢查询,团队"just add an index",查询从秒级降到毫秒级;账单日发现正是该 GSI 的投影配置导致每月 +$800 且写入慢 40%(原文 "cost us an extra $800 per month and slowed down our writes by 40%";部分付费墙,仅前半可见)。
证据等级
`单方声音`,个人博客(细节充分:金额、写入 slowdown 比例;部分付费墙,已如实标注)。
最后核验
2026-10-03

Amazon DynamoDB 年份:2025

MaxScale 2025 纯商业化:BSL 的隐性契约被撕毁

单方声音
成本账单生态与信任
一句话
MaxScale 走完 GPLv2→BSL→纯商业三步,2025 年起新版源码不再公开——当年 BSL 承诺的"最终会开源"只兑现到 21.06。
窄场景
生产架构依赖 MaxScale 做读写分离/查询路由/Galera 监控的用户。
机制
BSL 的隐性契约是"生产付费、代码最终转 GPL";2025 年 MaxScale 25.01 改为闭源商业许可,源码不再可得,契约破裂。最后免费版 21.06 不再收安全更新——用户三选一:付费、守旧版裸奔、迁到 ProxySQL(缺 MaxGUI、galeramon 级 Galera 监控、数据脱敏、binlog 路由等)。
生产验证
来源 8:PmaControl 2025-06-16(Sylvain Arbaudie 署名)——"By moving to pure commercial, MariaDB plc breaks this contract. MaxScale 25.01 code will never be free. Transparency disappears. And with it, the trust of part of the community."(引文为作者原话)
证据等级
`单方声音`,具名独立顾问(细节充分:三段许可史、版本号、影响矩阵)。
最后核验
2026-10-03
备注
与现有 [避坑] 卡主题重叠(档案吐槽清单"授权坑"已记 MaxScale BSL 生产使用受限),本卡是 2025 年事态升级:BSL→纯商业。

MariaDB 年份:2025

小版本滚动更新翻车:10.11.9 改了系统表定义,错误日志 1GB/天

单方声音
运维复杂度升级迁移
一句话
zypper 从 10.11.x 升到 10.11.9 后,`mysql.column_stats` 表定义与新版预期不一致,错误日志灌到每天 1GB、服务器几小时后无响应。
窄场景
用发行版包(openSUSE/Leap)滚动更新 MariaDB 小版本、且未手动跑 mariadb-upgrade 的实例。
机制
小版本包升级改变了服务端对系统表的期望定义(`mysql.column_stats`:`hist_type` 加 `JSON_HB` 枚举值、`histogram` 改 longblob),但包管理器不会自动执行 mariadb-upgrade;每次统计信息查询都刷两条 `[ERROR]`,日志爆炸拖慢磁盘 IO;`mariadb-check` 报 OK 也修不好,只能手工 ALTER mysql 系统表——普通用户不敢动系统表,陷入两难。
生产验证
来源 9:openSUSE 论坛 2025-01(用户 Dnk1287 发帖,hui 回复指路)——完整报错行、表结构、"error log grows to 1GB per day and the server gets unresponsive after some hours"(引文为用户原话);最终备份后手工 ALTER 系统表解决。
证据等级
`单方声音`,具名论坛用户(细节充分:完整报错、表结构、处置过程)。
最后核验
2026-10-03
备注
与现有 [避坑] 卡部分重叠(档案吐槽清单"大版本升级无官方回退"属同类升级运维税),本卡是小版本维度的实例。

MariaDB 年份:2025

Zilliz Cloud:量到 10 亿向量,账单"有点贵"

单方声音
成本账单
一句话
Zilliz Cloud 跑到约 10 亿向量量级时,账单开始"有点贵"——按 CU 小时 / GB 月计费的托管省心,是有标价的。
窄场景
向量规模冲向 10 亿量级、或 Dedicated 集群利用率不高的 Zilliz Cloud 用户。
机制
Zilliz Cloud Dedicated 按计算单元(CU)× 小时计费,集群存在即计费、与查询量无关;Serverless 按存储 GB/月计费。向量规模上一个数量级,CU 与存储同步放大;用户原话指向的正是这个拐点。
生产验证
来源 5,2025-11 Software Finder 认证客户评价(小企业匿名用户,自述存了约 5000 万向量,价值评分 8/10)原话:"Pricing can get a bit expensive when the volume grows to around 1 billion vectors."(引用客户原话)
证据等级
`单方声音`,认证客户评价(匿名;细节:自述 5000 万向量规模)。
最后核验
2026-10-03

Milvus 年份:2025

TTL 索引静默罢工:一条 2038 年后的时间戳让整集合停止过期(已修复于 8.0.12)

单方声音 已修复于 8.0.12
稳定与故障
一句话
MongoDB 8.0.4 上,时序集合中只要有一条文档的时间戳超过 2038-01-19,整个集合的 TTL 过期删除静默停摆——无报错、无指标异常,磁盘持续上涨。
窄场景
8.0.4 时序集合 + TTL 自动过期;脏数据/未来时间戳写入。
机制
SERVER-97368:TTL 评估遇到超出 32 位 Unix epoch 窗口的时间戳时直接跳过整个集合,而非跳过单条问题文档;TTL monitor 的 passes 计数器看起来正常,属于静默失败。根因是 2038 年问题(32 位秒级时间戳上限)。
生产验证
Mydbops 客户实录《MongoDB TTL Failure in 8.0.4》(2025);定位到一条时间戳为 2038-08 的 rider 数据文档,升级到 8.0.12 后 TTL 立即恢复、磁盘企稳。
证据等级
`单方声音`(第三方运维商具名客户实录,具名 JIRA);备注:已修复于 8.0.12
最后核验
2026-10-03

MongoDB 年份:2025

5.7 升 8.0:多表 JOIN 查询卡死在"优化器思考人生"阶段

单方声音
性能问题升级迁移
一句话
5.7 升 8.0 后,多表 JOIN(尤其 ORM 生成的 10+ 表查询)的优化器 planning 时间从毫秒级膨胀到秒级,"编译 SQL"本身成了延迟主体。
窄场景
5.7→8.0 升级;高 JOIN 数、ORM 生成 SQL 的 OLTP 业务。
机制
optimizer_search_depth 默认 62,8.0 优化器分支更多(hash join、直方图、新代价模型),深度搜索的组合爆炸让 planning 阶段 CPU 开销大涨;设为 0(自动按查询规模限界)后,多表 JOIN 查询的编译时间下降一个数量级,部分端点总延迟下降 50–80%。
生产验证
Medium 个人工程博客(2025-10-16):用 EXPLAIN ANALYZE 定位到查询卡在 STATISTICS/optimizing 阶段;staging 对比不同 depth 取值,生产灰度验证正确性(结果集不变)后全量。
证据等级
`单方声音`,来源性质:个人工程博客(细节充分,但作者身份信息单薄,原文对 5.7/8.0 配置差异的叙述前后略有含混,采信时以"planning 阶段耗时异常、可复现、可缓解"为核心事实)。
最后核验
2026-10-03
备注
与本站现有 [避坑] 卡"8.x 简单 workload 性能倒退 20–40%"主题部分重叠(该卡已提 optimizer_search_depth regression);本卡角度为具体生产事故——编译期爆炸而非执行期吞吐倒退。

MySQL 年份:2025

OMS 复制大字段丢数据:4K 以上 LOB 的前镜像没吐出来,下游被置空

单方声音
稳定与故障升级迁移
一句话
OMS 4.2.5.2 之前版本,行外存储的超 4K LOB 字段在 DML 时 OBCDC 不吐前镜像,下游 Kafka 消费者拿到的是空字段。
窄场景
用 OMS 把 OB 变更下发到 Kafka/数仓/Oracle 下游,且表里有大文本/大对象字段的链路。
机制
LOB 行外存储时,DML 变更事件的前镜像(before image)需要 OBCDC 从存储层回填;老版本 OBCDC 在字段未被修改时不吐 LOB 列的前镜像,OMS 下发到 Kafka 时该字段被置空。下游若按"没变化的字段保持原值"假设消费,就会静默丢数据——只改更新时间也能把大字段"改没"。
生产验证
来源 2:百丽/卢文豪 2025-11-25——"OMS V4.2.5.2 之前的版本需要关注字段超过 4K 的复制情况……执行 DML 时 OBCDC 可能不吐出 LOB 列的前镜像,导致下游数据不一致……建议使用 4.2.5.2 以后的版本(OMS 4.2.5.2 版本已解决该问题)"。
证据等级
`单方声音`,具名客户生产复盘(细节充分:版本号、触发条件、修复版本)。
最后核验
2026-10-03
备注
已修复于 OMS V4.2.5.2,按规则保留收录并标注。

OceanBase 年份:2025

DDL 在线还是离线,官方不告诉你:离线 DDL 直接锁表,只能自研检测工具

单方声音
运维复杂度
一句话
OceanBase 的 DDL 分在线/离线两种,离线 DDL 会锁表,但判断一次变更是哪种只能靠"肉眼"——百丽被迫自研了 Table ID 变化检测。
窄场景
用 Archery/工单平台做 DDL 发布的团队;大表结构变更频繁的业务。
机制
OB 的 DDL 按是否重建表分为在线(只改元数据)与离线(重建表、期间锁表);但官方没有在事前明确告知某条 DDL 属于哪一类。百丽的解法是:在测试环境先跑一遍,看 Table ID 是否变化——变了就是离线、会锁表,再在工单上打告警。
生产验证
来源 2:百丽/卢文豪 2025-11-25——"在使用 Archery 平台管理 MySQL 时,我们通常通过 ptosc 或 gos 等方式实现 Online DDL 操作。然而,这种方式对于 OceanBase 的离线操作,可能会直接锁表……在提交工单时,我们会在测试环境中的 OceanBase 中运行一遍,检查 Table ID 是否发生变化。如果 Table ID 发生变化,则表明操作是 Offline 的"。
证据等级
`单方声音`,具名客户生产复盘。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

OceanBase 年份:2025

Binlog Service 单线程:租户级生产消费,高峰期就是瓶颈

单方声音
性能问题
一句话
OceanBase Binlog Service 以租户为维度生产与消费 Binlog,只能单线程,高峰期下游同步跟不上。
窄场景
从 OB 向下游(数仓/Oracle)同步数据、依赖 Binlog 消费链路的架构。
机制
MyCat 架构下 8 个 MySQL 分片是 8 个线程并行采集;换成 OB 后,Binlog Service 按租户单线程生产、单线程消费,并发能力从"分片数"跌到"1"。业务高峰期变更量一大,单线程消费就成为整条同步链路的瓶颈。
生产验证
来源 2:百丽/卢文豪 2025-11-25——"OceanBase Binlog Service 是以租户为维度,无论是生产 Binlog 还是消费 Binlog,都只能有 1 个线程去处理。在业务高峰期间,可能存在性能瓶颈。"百丽最终被迫改用 OMS→Kafka 链路并自研下游同步工具。
证据等级
`单方声音`,具名客户生产复盘。
最后核验
2026-10-03

OceanBase 年份:2025

批量写入慢一个数量级:Oracle 3 分钟的活,OB 4.2.5.6 跑了 29 分钟

单方声音
性能问题
一句话
同一份批量写入,Oracle 3 分钟,换成 OceanBase 4.2.5.6 后 29 分钟——默认参数下写入性能差近 10 倍。
窄场景
数据同步/ETL 类批量写入场景;按默认参数部署、未调转储与并发参数的集群。
机制
OB 的写入先进入 MemStore(内存),MemStore 满阈值触发转储(minor compaction)落盘;转储参数过小会导致批量写入中频繁转储,CPU/IO 被转储抢走。同时日志归档若开启,海量 Redo 同步归档存储成为瓶颈;租户工作线程数与连接池并发不足则并行度上不去。三者叠加,批量写入吞吐远低于单机 Oracle 的直接路径写入。
生产验证
来源 3:「WEL测试」2025-10-31——"早期 B 数据库采用 Oracle 时,全量批量写入耗时稳定在 3 分钟。为适配业务架构升级,将 B 数据库替换为 OceanBase 4.2.5.6 版本后,相同数据量的批量写入耗时骤增至 29 分钟,性能下降近 10 倍。"作者锁定转储参数、日志归档、并发配置三个排查方向。
证据等级
`单方声音`,个人博客实战记录(数字具体:3 分钟 vs 29 分钟,版本具体)。
最后核验
2026-10-03
备注
该文为 CSDN 推荐文章(平台推广位),作者为独立技术博主;文中只给出排查方向、未记录最终调优结果,如实标注。

OceanBase 年份:2025

手动部署的隐形门槛:OBProxy 密码要传 sha1,bootstrap 被 5G 的 unit 最小内存拦下

单方声音
运维复杂度
一句话
不用 OBD、手动装 OB 集群时,OBProxy 初始化密码必须传 sha1 哈希、明文不行;bootstrap 还会被默认 5G 的 unit 最小内存挡住报错。
窄场景
手动 RPM 部署(不用 OBD/OCP)的团队;小规格测试机。
机制
OBProxy 初始化参数 observer_sys_password 要求传入密码的 sha1 值,传明文直接报 ERROR 2013 连接失败,报错信息与密码问题毫无关联;集群 bootstrap 时 __min_full_resource_pool_memory 默认 5G,小内存机器直接报 ERROR 1235,必须手动把隐藏参数调小才能继续。两个都是"报错信息不说人话"的经典坑。
生产验证
来源 4:loxehate 个人 GitHub 博客 2025-05-08「问题总结」——"部署 OBProxy 连接数据库失败,使用 obclient 可以正常连接。ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet'……proxyro 的密码必须为 sha1 后的密码,明文密码不行";"集群 bootstrap 操作失败 ERROR 1235 (0A000): unit min memory less than __min_full_resource_pool_memory not supported……__min_full_resource_pool_memory 默认值是 5G"。
证据等级
`单方声音`,个人博客部署实战记录(命令与报错原文俱全)。
最后核验
2026-10-03

OceanBase 年份:2025

分区裁剪要人肉补条件:少写一个分区键,优化器就"看不见"分区

单方声音
性能问题运维复杂度
一句话
从 MyCat 迁过来后,原来靠物理分片"天然隔离"的查询,在 OB 里必须手动补上分区条件,否则分区裁剪失效。
窄场景
从分库分表中间件(MyCat/ShardingSphere)迁移到 OB 的团队;按大区/租户分区的表。
机制
MyCat 下不同大区是不同物理库,查询天然只扫一个分片;OB 里这些分片变成同一张分区表的不同分区,优化器做分区裁剪需要查询条件中显式带有分区键。业务 SQL 里少写分区条件,优化器无法推导裁剪范围,只能全分区扫描。等于把原来中间件在物理层免费做掉的事,变成了每个开发都要记得的心智负担。
生产验证
来源 2:百丽/卢文豪 2025-11-25——"在涉及 DTL 订单明细表的 order by 关联查询中,指定某个大区条件,在 MyCat 中没有……这是因为 MyCat 的分区规则相同……在物理层面进行了隔绝……而在 OceanBase 中,如果将这个条件去掉,会引发 om 表正常进行分区裁剪,但 od 表不知道需要在这个大区内进行……OceanBase 需要指定这个条件以确保分区裁剪的正确性。这是一个非常典型的分区裁剪问题。"
证据等级
`单方声音`,具名客户生产复盘(有具体表与查询场景)。
最后核验
2026-10-03

OceanBase 年份:2025

19.26 RU 补丁翻车:打完补丁,PDB 里大量对象变 invalid

单方声音
稳定与故障升级迁移
一句话
19.26 Release Update 在 3 台 Oracle Linux 9 服务器上把 PDB 里大量对象打成 invalid,datapatch 跑不完,官方支持让 DBA 重复已经试过的步骤,最后靠手动跑 catupgrd.sql 才救回来。
窄场景
19c 打 Release Update 补丁的多租户(PDB)环境。
机制
RU 补丁需要 datapatch 完成数据字典/组件升级;此案例中 PDB 内大量对象 invalid,datapatch 无法完成,utlrp.sql、catalog.sql、catproc.sql 均无效,手动重编译报 ORA-04020(SYS.AQ$_REG_INFO 死锁);一线 SR 先让 DBA 重复已试步骤无果,升级后的支持才建议在 PDB 上跑 catupgrd.sql 解决——根因至今不明。
生产验证
来源 6:Tim Hall(ORACLE-BASE 站长,26 年 Oracle 社区作者)2025-03-10 完整记录——3 台 OL9 服务器逐台复现、完整的报错与排查链条、最终解决方式与"根因不明"的诚实结论。
证据等级
`单方声音`,具名资深 DBA(细节充分:版本号、平台、报错码、排查全过程)。
最后核验
2026-10-03

Oracle Database(甲骨文) 年份:2025

Reddit 实测:写入一忙,查询就慢——同构节点的代价

单方声音
性能问题
一句话
Qdrant 的写入和查询跑在同一批节点上,Reddit 3.4 亿向量实测发现写入负载对查询延迟的干扰远大于 Milvus。
窄场景
持续写入 + 在线查询的混合负载(RAG 增量索引、实时推荐写入);评估基于 v1.12,结论为架构性。
机制
Qdrant 是同构节点架构——segment 构建、HNSW 索引、优化器合并与查询服务争抢同一节点的 CPU 和内存带宽;批量写入期的索引构建是 CPU/内存密集型,直接挤占查询。Milvus 把写入/索引/查询拆到异构节点类型,天然隔离。
生产验证
来源 3:Reddit 工程评估(Chris Fournie 牵头,2025-11)——恒定吞吐(100 QPS)下对比,"Qdrant 上写入与查询负载的相互干扰远大于 Milvus";作者归因于架构差异:"Milvus 把大部分写入分散到与查询服务不同的节点类型上,而 Qdrant 的写入和查询走同一批节点"。
证据等级
`单方声音`,具名工程评估(Reddit Staff SWE,含多名工程师致谢名单),3.4 亿向量实测数据。
最后核验
2026-10-03
备注
评估基于 Qdrant v1.12;后续版本未获独立复测,不作"已修复"标注。

Qdrant 年份:2025

强制 Duo 推送:本地跑一次多线程 dbt,手机震八次

单方声音
运维复杂度
一句话
"Snowflake's mandatory multi-factor authentication is great for security, but it's terrible for developer flow"——本地跑一次多线程 dbt,手机要震八次批准;作者最终给个人账号换上 key-pair 认证,"再也不用 Duo 批准或输 OTP"——MFA 的安全收益在开发场景被自己的交互设计抵消了一半。
窄场景
本地高频跑 dbt/CLI 调试的数据工程师;多线程并行建连接的开发流程。
机制
Snowflake 当时的 MFA 实现仅支持 Duo App 推送一种方式;每个新连接都要人工批准,多线程=多次打扰。
生产验证
来源 30:Mamad Kajbaf 2025-09-12——"Every time I ran a multi-threaded dbt command locally, my phone buzzed for approval EIGHT TIMES."(Medium 正文后半被付费墙挡住,核心吐槽段落在公开部分,已核实。)
证据等级
`单方声音`,一线开发者具名实录;Duo 推送疲劳是通用痛点,针对 Snowflake 的具名实录只找到这一篇。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2025

GetYourGuide:把 Looker 从 Snowflake 搬到 Databricks SQL,降本 20%、砍掉整套数据复制链路

单方声音
升级迁移
一句话
柏林旅游平台复审 BI 展示层发现:数据湖源头本就躺在 AWS S3 + Databricks,Snowflake 只是个"展示层"——要把 Databricks 产出的数据再复制一份进 Snowflake 供 Looker 查询;迁移后运营成本降约 20%,还砍掉了整套复制链路。
窄场景
lakehouse 已建成、Snowflake 只剩"BI 展示层"定位的团队;为同一份数据付两份存储+两套计算的组织。
机制
架构冗余——数据在 Databricks 产出后复制进 Snowflake 只为 serving BI,多一层复制就多一份存储成本、一份同步延迟、一套故障面。
生产验证
来源 34:GetYourGuide 数据平台团队官方工程博客 2025 年初——迁移范围:2 套 Looker(内部 300 日活+外部 1500 日活)、25 个模型 430+ explores、2024 上半年 6.5M 内部+16M 外部查询、20K+ 唯一 SQL 语法校验、750 张 Snowflake 表迁为 Delta 表;PoC 用 Looker SDK 把测量过程代码化;痛点:Looker 按供应商生成不同 SQL 方言,Spark 下 file/partition pruning 偶发不生效需逐一绕过;Databricks 客户团队资助了迁移期间的外部咨询支持(已注明)。
证据等级
`单方声音`,客户官方工程博客(数字具体:20% 降本、750 张表、22.5M 查询)。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2025

SmarterX:80+ 库迁 BigQuery,"Snowflake 像嫁接到云上的传统数仓" [来源存疑]

单方声音 来源存疑
升级迁移
一句话
80 多个数据库、数千张表、21 个数据源,不到一个月从 Snowflake 搬进 BigQuery;客户原话:"Snowflake felt like a traditional enterprise data warehouse grafted onto the cloud, completely uninfluenced by the AI revolution, with a database that forced us to work in a specific, predetermined way."(Snowflake 像一座嫁接到云上的传统企业数仓,完全没受 AI 革命影响,逼着人按它预设的方式干活。)
窄场景
AI 公司需要弹性扩展、快速 onboarding 新客户的数据平台。
机制
迁移采用 external table 快速接入 + native table 优化性能的双轨策略;业务收益:新产品发布快 10 倍、新客户 onboarding 从 6 个月缩到不到 1 周、pipeline 数据量是之前的 100 倍。
生产验证
来源 38:Google Cloud 官方博客客户案例 2025-07([来源存疑]:Google 执笔的厂商案例稿)——官方口径成本 "cut costs in half";迁移由 Google Technical Onboarding Center 深度参与。
证据等级
`单方声音`,[来源存疑]:未见 SmarterX 自家工程博客或第三方独立报道。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2025

Dynamic Tables 对 DLT:要指定 warehouse、只会 SQL、lag 不保证

单方声音
运维复杂度
一句话
咨询公司受客户委托落地 Dynamic Tables,几个月后放弃退回 Tasks+存储过程:"Snowflake forces you to specify which warehouse you will use… moving back to a hardcoded warehouse will be the same as moving to the Stone Age"(回到硬编码 warehouse 跟回到石器时代一样);target lag 只是 best-effort——"A refresh 5 minutes early? Sure, why not? A delay of 4 minutes? It happens.";底层表无 DML 时"it will refuse to refresh until a change occurs (even a manual refresh)"(连手动刷新都拒绝);增量模式禁非确定函数、禁 UDF,pivot/读外部表/读安全共享视图还得回退存储过程。对比 Databricks DLT:serverless 计算、Python/SQL 双语言、数据质量 expectations 原生。
窄场景
想用声明式管道替代 Task+存储过程的团队;对数据新鲜度有 SLA 要求的 pipeline。
机制
Dynamic Tables 的刷新是"尽力而为",lag 是目标不是保证;无变更不刷新;能力子集(SQL-only、无 UDF/非确定函数);且必须绑定 warehouse,无 serverless 选项。
生产验证
来源 52:Ulpia Tech(保加利亚独立数据咨询公司)客户实战复盘,2025-04——第一人称"we",5 大类限制逐条可核。
证据等级
`单方声音`,咨询公司客户实战复盘(细节充分)。
最后核验
2026-10-07
备注
缺口状态:部分至今缺失(SQL-only、lag best-effort、无 DML 不刷新等限制在官方文档中延续;serverless DT 截至 2026-10-07 未见官方 GA 公告)。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2025

SSIS:2019→2022 升级后,包直接跑不起来

单方声音
升级迁移
一句话
SQL Server 从 2019 升到 2022,SSIS 包部署完一个都跑不起来——ISServerExec.exe 抛未处理异常(error 27203),operations_messages 里还查不到任何记录。
窄场景
用 SSISDB 目录(project deployment model)跑 ETL 的团队;随数据库引擎一起升级 SSIS 的。
机制
SSIS 目录(SSISDB)版本要与引擎匹配,升级时目录不一定自动跟着升;ISServerExec.exe 报 `System.IO.FileNotFoundException` 式未处理异常,错误信息只给 error 27203,SSISDB 的 operations_messages 表里空空如也——排错只能靠 SSMS 日志文件查看器翻堆栈。社区给出的偏方包括:重建 SSIS 目录、核对 SSIS 服务账号权限、检查第三方组件兼容性。SSIS 的升级体验本质上是"引擎升了,ETL 运行时是另一个产品"。
生产验证
来源 10,2025-03 社区论坛——用户详述已试过三种部署方式(升级部署项目、导出重部署、按目标版本构建),全部报 error 27203;回帖者分享了自己历次升级踩坑的排查清单(目录版本、服务账号、重建目录)。
证据等级
`单方声音`,社区论坛(细节充分:具体错误号、堆栈、已尝试的三种部署方式)。
最后核验
2026-10-03
备注
SSIS 在 Linux 上长期残血(无目录、无 Agent 调度),且微软官方文档已确认 SSIS 2025 不再支持 Linux、legacy Integration Services Service 在 2025 被废弃——"买 license 附赠的 BI 套件"正在被慢慢晾干。

Microsoft SQL Server 年份:2025

用户名里的下划线能被任意字符替换:资源组配额形同虚设

单方声音
生态与信任
一句话
`test_1` 能用 `test=1`、`test.1` 甚至 `test1` 登录——用户名特殊字符在鉴权时被归一化替换,按用户名绑定的资源组规则直接被绕过,配额限制名存实亡。
窄场景
用 `_` 等特殊字符做用户名分隔规范、且依赖 resource group 做多租户资源隔离的集群;3.3.3/3.3.9/3.5.0 均受影响,存算一体/分离架构都中招。
机制
登录时用户名中的特殊字符可被 `.`、`=`、`*` 等任意替换后通过鉴权(`test_1` ≡ `test=1` ≡ `test1`),而资源组绑定规则只匹配含 `_` 的用户名。用户用 `test*1` 这类变体登录即落到 `default_wg` 默认资源组,预设的资源配额完全失效。报告者明确指出业务影响:大量用户挤进默认资源组 → 集群负载激增 → 有资源耗尽导致宕机的风险,且合规用户的资源被挤占。
生产验证
来源 4:GitHub issue #61525,2025-08,企业用户报告("Our company's username naming convention uses _ as a separator"),附复现步骤与业务影响分析,横跨三个版本复现。
证据等级
`单方声音`,GitHub 企业用户 issue(细节充分:复现步骤、三版本验证、业务影响)。
最后核验
2026-10-03

StarRocks 年份:2025

Iceberg 联邦查询:高频写入下小文件+Compaction 压力,分钟级时延保不住

单方声音
性能问题
一句话
Fresha 最初想把热点链路直接跑在 Iceberg 上——功能都通,但高频写入产生的大量小文件和 Compaction 压力让"分钟级时延"根本稳不住,最后只能把热点链路迁回 StarRocks 内部表,Iceberg 退回去只当历史存档。
窄场景
以 Iceberg/Paimon 为唯一事实源、同时想在其上跑秒级~分钟级准实时查询的湖仓架构;CDC 高频写入场景。
机制
开放表格式的高频写入必然产生大量小文件,查询侧要付出文件数膨胀的代价(list/scan 开销、Compaction 压力)。Fresha 的实践结论是:StarRocks 直查 Iceberg"功能上没问题但运行层面不稳定",分钟级时延无法持续保证。最终架构变成 Hot(秒级)走内部表、Warm/Deep history 才走 Iceberg 联邦——"统一湖仓入口"的宣传与高频写入现实之间有一道小文件鸿沟,填坑要靠 Spark 在外部做 compaction/backfill。
生产验证
来源 5:Fresha 工程师 Anton Borisov 执笔的案例(2025-12,StarRocks 官方博客"全球用户精选案例"栏目,厂商邀请、客户执笔)——"我们最初尝试使用 Iceberg,功能上没问题但运行层面不稳定——高频写入产生的大量小文件和 Compaction 压力,使分钟级时延难以持续保证。于是,热点链路切换至 StarRocks 内部表";自 2025 年春季生产上线。
证据等级
`单方声音`,具名客户工程师执笔(发表于厂商官方博客栏目,渠道已如实标注)。
最后核验
2026-10-03

StarRocks 年份:2025

DDL 是异步的:Schema 变更没有同步语义,得自己造迁移工具轮询

单方声音
运维复杂度
一句话
StarRocks 的许多 DDL 是异步执行的——发完 DDL 不代表变更生效,Fresha 被迫自研了一套 ActiveRecord 风格的迁移工具,靠轮询后台任务到 FINISHED 状态来保证 Schema 演进可逆、安全。
窄场景
CI/CD 管道里做 Schema 变更、多人协作演进表结构的团队;依赖"DDL 成功即生效"假设的 MySQL 思维迁移者。
机制
StarRocks 的 DDL(如加列、建 MV 等)提交后转后台任务异步执行,客户端收到成功不代表变更完成,更不保证顺序与原子性。Fresha 的解法是自建迁移工具:层级命名规范、每项变更配显式 up/down SQL、在 StarRocks 内维护声明式 Schema 版本号(单一事实源)、轮询后台任务直到 FINISHED 才更新版本号、失败用配对 down SQL 回滚——相当于把 Flyway/Liquibase 对 MySQL/PG 免费提供的能力,自己重新实现了一遍。
生产验证
来源 5:Fresha 工程师 Anton Borisov 执笔的案例(2025-12)——"由于 StarRocks 的许多 DDL 操作是异步执行的",团队构建 ActiveRecord 风格迁移工具,"持续轮询变更状态,直到所有后台任务达到最终的 FINISHED 状态后才会更新版本号"。
证据等级
`单方声音`,具名客户工程师执笔(发表于厂商官方博客栏目,渠道已如实标注)。
最后核验
2026-10-03

StarRocks 年份:2025

Iceberg REST Catalog:库建得,删不得

单方声音
生态与信任
一句话
4.0.0 的 Iceberg REST Catalog 上,`CREATE DATABASE` 成功,紧接着 `DROP DATABASE` 就报"库不存在"——建库时没写 location 属性,删库时按 location 找不到,用户自己读源码才定位到。
窄场景
存算分离集群 + Iceberg REST Catalog(AWS S3 Tables),对 catalog 做库表 DDL 管理的用户;4.0.0。
机制
`createDb` 实现未在 database properties 里写入 `location`,而 drop 路径依赖该属性定位库,导致"建完即删不掉"。用户做了源码走查 + 远程调试,定位到 `IcebergRESTCatalog.java` 的 createDb(L190)缺 location、drop 路径(L233)因缺 location 报错。FE 日志里只有一条 info,没有任何 error——排障全靠用户自己啃代码。
生产验证
来源 6:GitHub issue #65023,2025-11,用户在 4.0.0 存算分离集群(AWS S3 Tables + Iceberg REST)复现,附完整复现 SQL、FE 日志与源码级根因定位。
证据等级
`单方声音`,GitHub 用户 issue(细节充分:版本、复现步骤、源码级定位)。
最后核验
2026-10-03

StarRocks 年份:2025

大版本原地升级不支持回退,跨版本只能迁移升级

单方声音
升级迁移成本账单
一句话
原地升级不支持回退、长抖动,v4/v5 到 v7 这种大跨度还得递增升级——得物最终选了迁移升级,代价是双倍硬件 + TiCDC 增量同步。
窄场景
运行 v4/v5 老版本、想上 v7/v8 的生产集群;不能接受长时间性能抖动的业务。
机制
原地升级是滚动替换二进制,升级过程集群持续对外服务但有长时间性能抖动,且一旦开始无法回退;大版本跨度大时还需逐个中间版本递增升级,抖动时间翻倍。迁移升级(搭新集群 + TiCDC 双写/增量 + 流量切换)可灰度可回滚,但要多搭一套集群、原集群还得部署 TiCDC 做增量同步——升级成本变成实打实的硬件账单。
生产验证
来源 1,得物 2025 年升级实录——原地升级"不支持回退、并且升级过程会有长时间的性能抖动",所有升级方案均采用迁移升级,"搭建新集群将产生额外的成本支出,同时,原集群还需要部署 TiCDC 组件用于增量同步"。
证据等级
`单方声音`,具名生产复盘(细节充分:两种升级方式的优劣对比与成本测算)。
最后核验
2026-10-03

TiDB 年份:2025

TiCDC 在 v6.5.0 前经常延迟/OOM

单方声音 已修复于 v6.5.0
稳定与故障升级迁移
一句话
v6.5.0 之前的 TiCDC 运行稳定性差,经常出现数据同步延迟或 OOM——而迁移升级恰恰依赖它做增量同步。
窄场景
v6.5.0 之前版本的 TiCDC changefeed;用 TiCDC 做跨集群迁移、容灾同步的场景。
机制
TiCDC 的 checkpoint 推进是全局木桶——任一 Region 的 resolvedTs 卡住,全局同步延迟就涨;早期版本在内存管理与背压处理上有缺陷,大流量下易 OOM。对迁移升级而言,TiCDC 是增量同步的唯一官方通道,它的稳定性直接决定割接窗口。
生产验证
来源 1,得物 2025 年升级实录——"TiCDC 作为增量数据同步工具,在 v6.5.0 版本以前在运行稳定性方面存在一定问题,经常出现数据同步延迟问题或者 OOM 问题";得物称新版同步性能提升数十倍。
证据等级
`单方声音`,具名生产复盘。已修复于 v6.5.0(得物称新版同步性能提升数十倍),保留收录并标注修复版本。
最后核验
2026-10-03

TiDB 年份:2025

BR 备份又慢又吃资源:每天备份 >8 小时,负载 +30%

单方声音
性能问题运维复杂度
一句话
集群每天备份耗时超过 8 小时,备份期间集群负载上升超 30%,撞上业务高峰直接让应用 RT 上升。
窄场景
数据量大的生产集群、备份窗口与业务高峰重叠的团队;需要定期全量备份的合规场景。
机制
BR 做的是分布式快照备份,要协调所有 TiKV 节点扫描 SST 数据并上传外部存储;备份流量与业务流量争抢同一批 TiKV 的 CPU/磁盘/网络。分布式快照没有单机库"停写瞬间 cp 数据文件"那种轻量路径,备份即全集群参与的重活。
生产验证
来源 1,得物 2025 年升级实录——"集群每天备份时间大于 8 小时,在此期间,数据库备份会导致集群负载上升超过 30%,当备份时间赶上业务高峰期,会导致应用 RT 上升"。
证据等级
`单方声音`,具名生产复盘(细节充分:时长、负载涨幅、业务影响链条)。
最后核验
2026-10-03

TiDB 年份:2025

单点查询与小规模场景:MySQL 更快更便宜

单方声音
性能问题成本账单
一句话
单点查询速度、单机 QPS——这些 MySQL 的基本盘,分布式数据库给不了;数据量没到量级时上 TiDB 是纯负担。
窄场景
点查为主、数据量单机能扛住的业务;被"MySQL 兼容"吸引、以為它是"更好的 MySQL"的团队。
机制
分布式 SQL 的固定成本:每次查询都要经过 TiDB Server 解析优化、PD 取 TSO、走网络到 TiKV 取数(多跳 RPC + 两阶段提交)。单点查询下这些固定开销无法摊薄,延迟与 QPS 天花板天然低于单机 MySQL;小规模下还没有分片收益,等于只付税、不享受。
生产验证
来源 1,得物 DBA 团队 2025 年升级实录引言——"能用分库分表能解决的问题尽量选择 MySQL,毕竟运维成本相对较低、数据库版本更加稳定、单点查询速度更快、单机 QPS 性能更高这些特性是分布式数据库无法满足的"(引自原文)。
证据等级
`单方声音`,具名生产复盘引言(大厂 DBA 团队的选型结论)。
最后核验
2026-10-03
备注
与现有 [避坑] 卡「小数据量强行上 TiDB 是过度设计」主题重叠(该卡已含小数据量场景的分布式架构负担论述)。

TiDB 年份:2025

每个 class 一张 HNSW 图:几十个近乎空的 class 吃掉 6GB 内存

单方声音
性能问题运维复杂度
一句话
Weaviate 按 class 建独立的 HNSW 索引并全部加载进内存——内存占用正比于 class 数量而非向量数量,schema 膨胀的代价直接转嫁到内存账单。
窄场景
按 KB/文档/租户动态建 class(或被上层应用如 Dify 自动建 class)的 schema 设计;class 数量达到几十上百但每个 class 数据量很小的部署。
机制
Weaviate 的存储模型是"一 class 一索引":每个 class 有自己独立的 HNSW 图和 LSM 结构,默认全部常驻内存。即使单个 class 只有几十条向量,其索引结构、commitlog、shard 元数据也要占一份常驻内存;class 数量一多,Go GC 压力随之上升(用户观察到 CPU 100–200% 的 GC 抖动),最终触发 OOM。官方文档的默认 `vectorCacheMaxObjects` 是 1e12(1 万亿),即默认不设限。
生产验证
来源 4,2025-12 Dify GitHub issue(用户自部署 Dify 1.8.1 + Weaviate)——Dify 每次上传文件自动建一个 `Vector_index_<uuid>_Node` class,schema 里攒了 50+ 个 class;`docker stats` 显示少量文档的 KB 照样占 3–6GB 内存、CPU 持续 100–200%、搜索变慢、启动变长,作者结论是"无法投入生产"。
证据等级
`单方声音`,GitHub issue(细节充分:class 命名、内存/CPU 数据、复现步骤)。
最后核验
2026-10-03
备注
该 issue 的表层根因是 Dify 的 class 设计,但暴露的是 Weaviate 的机制特性(per-class 常驻内存),故以机制为卡片主题收录。

Weaviate 年份:2025

单节点试用写入慢:第一次接触就留下错误第一印象

单方声音
性能问题
一句话
在单节点上试 YugabyteDB,万行级批量插入慢得离谱——而这恰恰是大多数人第一次接触它的方式。
窄场景
单节点 yugabyted / Docker 本地试用,YSQL,万行以上批量插入。
机制
YSQL 写入路径按"分片 + 同步复制"的生产拓扑设计:Raft quorum、事务状态 tablet、分布式提交都有固定成本,单节点下这些成本无法摊薄。另有 sequences 默认 cache=100,批量插入时对 sequences 表单行高频递增形成写入热点。官方回复直言:"We always deploy in production with sharding & synchronous replication, so it doesn't make sense to add optimizations that don't apply in this context (single node with no replication setups)"——单节点场景不值得做优化。
生产验证
来源 3,2025-05 用户 NicoleSanders14 发帖——单节点、SSD、"decent hardware",10k+ 行批量插入 "pretty slow","I expected better";官方回复列出 5 点解释,核心是单节点无复制场景不在优化范围内。
证据等级
`单方声音`,厂商论坛客户发帖(细节充分:硬件配置、批量规模、官方回复原文;注:为试用场景,非生产事故)。
最后核验
2026-10-03

YugabyteDB 年份:2025

DMS 迁移作业生产环境崩溃:失败就从头再来

单方声音
升级迁移
一句话
Database Migration Service 迁 AlloyDB,生产环境作业崩了就是重来——Bayer 的工程师建议直接按"预估时间的两倍"做计划。
窄场景
从 Cloud SQL/自建 PostgreSQL 经 DMS 迁往 AlloyDB 的生产迁移;数据量大、迁移窗口紧张的团队。
机制
DMS 迁移基于逻辑复制:先做初始快照全量同步,再持续复制增量。迁移作业在早期阶段有多种崩溃方式,且崩溃后是整个作业重来而非断点续传——全量快照阶段的时间成本直接翻倍。
生产验证
来源 6,Bayer 工程师 Aaron Joyce 在 Google Cloud Next 2024 分享——非生产环境迁移"really well",但"we get to production it didn't go quite as well";原话建议 "leave about twice the length of time that you think that the migration is going to take","that job especially in the beginning has a lot of ways it can crash and if it crashes you're starting it over again"。
证据等级
`单方声音`,具名客户工程师会议分享(厂商大会上的客户演讲,细节充分:非生产 vs 生产对比、两倍时间建议)。
最后核验
2026-10-03

Google AlloyDB(AlloyDB for PostgreSQL) 年份:2024

读 4000 个分区并发要 4000 个 slot:slot 模型像个黑盒

单方声音
运维复杂度
一句话
BigQuery 的 slot 是"读一个分区占一个 slot"这种粒度的资源——想并发读 4000 个分区,你得有 4000 个 slot,而 slot 的分配过程对你完全不透明。
窄场景
分区数上千的大表、重度并发查询的项目;在按量计费与容量预留(Editions)之间做选择的中大型团队。
机制
slot 是 BigQuery 内部计算单元(CPU+内存),按量模式下用的是共享池 + 突发容量,容量预留模式下按 slot-hour 付费;据作者与 Google 团队面谈确认,slot 一次只能读一个分区,并发读 4000 个分区理论上需要 4000 个 slot——这也是"单表 4000 分区上限"这个配额存在的保护性原因。用户侧看不到 slot 分配明细,查询忽快忽慢只能归因于"slot 天气"(社区语:BQ weather / slot contention)。
生产验证
来源 8,Christophe Oudar 2024-01-29 跟进文章——此前发表"14 个 BigQuery 短板"后被 Google 团队约谈 1 小时+,逐条跟进;slot/分区并发关系是 Google 团队亲口确认的机制;另有 HN 同期评论印证:"really big queries in BQ can take 10x the slots on some runs just because of 'BQ weather' and slot contention"。
证据等级
`单方声音`,个人博客(与 Google 团队面谈后的一手跟进记录)。
最后核验
2026-10-03

Google BigQuery 年份:2024

DBFS 存 init script 被废弃:存量脚本要么搬家,要么集群起不来

单方声音
运维复杂度升级迁移
一句话
存在 DBFS 里的集群初始化脚本被官方废弃,不搬家集群就起不来——"It will be a re-work to move all?",还被告知 CLI 导不了 shell 脚本只能走网页。
窄场景
用 DBFS 存了大量 init script 的老工作区;靠脚本装系统包/配代理的集群。
机制
legacy init script 存储位置被废弃,官方要求搬到云存储/workspace 文件/UC volumes——是强制迁移,不是可选优化。迁移工具链还不完整:CLI 不支持导入 shell 脚本。
生产验证
—
证据等级
`单方声音`,社区帖(年代 2024,但废弃是强制性的)。
最后核验
2026-10-07

Databricks 年份:2024

Query history 只留 30 天:Snowflake 给 365 天,查旧账得自建管线

单方声音
运维复杂度
一句话
Databricks 查询历史(UI/API/`system.query.history`)30 天自动删除,想查 30 天前的记录?自己建增量持久化管线。可配置保留期 2026-09 才进 Beta。
窄场景
做季度成本复盘、合规审计要查历史查询的团队。
机制
保留期默认 30 天,过期自动删;2024 年用户问 API 能否返回 30 天前的数据,官方答复"只能等 system tables roadmap"。可配置保留 2026-09 进 Beta,截至 2026-10 仍非 GA。
生产验证
—
证据等级
`单方声音`。
最后核验
2026-10-07

Databricks 年份:2024

无模式 + 事务门槛:Infisical 举家迁往 PostgreSQL

单方声音
运维复杂度升级迁移
一句话
Infisical 因 MongoDB 的事务配置门槛、无模式导致的数据不一致、缺失关系型能力(CASCADE),历时 3-4 个月把全站迁往 PostgreSQL,迁移后数据库账单下降 50%。
窄场景
数据实际是关系型的产品、需要支持自托管/客户 POC 的 SaaS。
机制
多文档事务要求副本集/集群模式,单节点跑不起来,客户连 POC 都跑不通;无 CASCADE,应用层手写级联删除删不干净,留下悬空数据;无模式 + 校验只在 Mongoose 层实现,任何绕过 ODM 的写入直接产生数据不一致;关系型查询只能靠多段 $lookup 模拟,低效且要靠扩容数据库+应用实例来扛。
生产验证
Infisical 官方博客《The Great Migration from MongoDB to PostgreSQL》(2024);密钥管理 SaaS,日均处理 5000 万+ secrets;迁移窗口 6 小时只读、零数据丢失。
证据等级
`单方声音`(具名公司深度迁移复盘)
最后核验
2026-10-03

MongoDB 年份:2024

小版本升级引入复制停滞:官方标"已修复",生产每周仍复现 2-3 次

单方声音
稳定与故障生态与信任
一句话
从 4.2 升级到 4.4.28 后,生产分片集群的 secondary 复制随机停滞(CursorNotFound),CPU/磁盘归零,只能重启恢复;按官方 JIRA(SERVER-70155,标记为已修复)升到 4.4.29 后仍每周复现 2-3 次。
窄场景
4.4.28/4.4.29 分片集群 secondary,7×24 高写入。
机制
oplog fetcher 游标丢失后复制停滞且不自愈;oplog 窗口充足(22 小时)、重启即恢复,指向版本回归而非配置问题。官方标记修复但生产仍复现,修复的可信度存疑。
生产验证
MongoDB 官方论坛帖《Mongo replication stalls》(2024-03~05),用户 Fory Horio;生产分片环境,6-7 年老集群,4.2 稳定运行 1-2 年无此问题,含完整报错日志与时间线(5 月仍在复现)。
证据等级
`单方声音`(具名论坛用户生产实录,版本/报错/时间线俱全)
最后核验
2026-10-03

MongoDB 年份:2024

租户端点永远对外可解析:IP 白名单只做在 L7,SSO 登录页还能枚举用户名 [来源存疑]

单方声音 来源存疑
生态与信任
一句话
Snowflake 的"IP 过滤"发生在共享的 Layer7 ALB 上、返回 HTTP 403 而非网络层丢包;即使只想走 PrivateLink,也关不掉对外可解析的地址;SSO 登录页返回 200 还能做用户名枚举——"Tenant's should not have externally resolvable endpoints to worry about IP filtering"(租户本不该有对外可解析的端点、还得自己操心 IP 过滤)。
窄场景
对公网暴露面零容忍的金融/政务租户;做 PrivateLink 私有化部署的团队。
机制
多租户共享架构下租户没有真正的私有托管能力;IP 白名单维护变成"永远补不完的 SaaS 防火墙名单维护闭环"。
生产验证
来源 26:Hacker News 2024-06-02 匿名单条长评论(自述有租户端安全实施经验)——实测随手挑一个租户子域名即对外可解析并返回 IP 过滤的 HTTP 403;"you can't go private exposure via private-link only, without also having externally resolvable addresses existing for your instance";"Snowflake's fault here for never building true dedicated org capabilities with private hosting so far as I can tell"。
证据等级
`单方声音`,[来源存疑]:匿名单方声音,技术细节具体、可对照官方文档核验,但未找到第二独立客户信源复述。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2024

Definite:整仓从 Snowflake 搬到自建 DuckDB,降本超 70%,代价是自研读写分离

单方声音
升级迁移
一句话
数据产品公司把内部全部分析数据与查询从 Snowflake 迁到自建 DuckDB,成本 "radical reduction in cost (>70%)",动机是成本与 "vendor lock-in concerns";代价是 DuckDB 单写者设计逼他们自研双实例读写分离,"required a good bit of work"(花了不少功夫)。
窄场景
中小规模分析 workload、对 Snowflake 最小 warehouse 规格都嫌贵的团队。
机制
Snowflake 按 warehouse 规格×时间计费,小 workload 也要为整台"仓库"付费;DuckDB 嵌入式按实际资源付费,但单写者锁需要自研同步机制。
生产验证
来源 35:Definite 公司博客 2024——1TB 数据、16 vCPU/64GB 假设下,每天 12 小时使用自建 DuckDB 比最小 Snowflake 仓库便宜约 55%、比 Small 便宜约 77%;DuckDB SQL 方言接近 Postgres,大部分查询可直接翻译,数据存 Parquet 搬走无锁定。
证据等级
`单方声音`,客户自家迁移复盘;70% 数字被多篇第三方文章转述,但均为转述同一篇博客,无第二个独立实测。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2024

dbt-snowflake 把已建好的 Dynamic Table 当成新的,触发全量重建并在裸 schema 名上报错

单方声音
生态与信任
一句话
一个早已物化好的 dynamic table 突然被 dbt 当成"首次创建",走完备份-重命名-重建全套流程,并在 `Cannot perform CREATE TABLE. This session does not have a current schema`(090106)上失败;用户确认 dbt Cloud 与本地 Docker 均复现,问题次日自行恢复(怀疑 Snowflake 侧变化,未能复现)。
窄场景
dbt-snowflake + Dynamic Table 的增量管线;依赖 session 默认 schema 推断的部署。
机制
dbt 判断 dynamic table 是否已物化的逻辑可能因"检查了未限定的位置"而看不见已存在的表;重建流程里 `rename to MONTHLY__dbt_backup` 用不限定库名的裸名,依赖 Snowflake 按 session 默认 schema 推断——"Since that behavior is subject to change, dbt might want to be more explicit";Snowflake 官方文档至今保留相关警告:Snowflake 计划 2026 年 9 月扩大 string/binary 默认列宽,低版本 dbt-snowflake 在特定增量模型上会构建失败——Snowflake 侧行为变更反复击穿 dbt-snowflake 的增量物化逻辑。
生产验证
来源 48:dbt-snowflake 官方仓库用户 issue #1017(2024-05-02 事件,附完整 run artifacts SQL 与 dbt debug 环境信息)。
证据等级
`单方声音`,真实用户 issue(模板规范、复现环境完整);同 issue 提到 dbt 工程师在 Slack 同期讨论关联 bug,可作侧面参考。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2024

TiKV 磁盘空间失控:日志堆积、Titan 拿空间换性能

单方声音
稳定与故障运维复杂度
一句话
TiKV 磁盘被吃满的原因有四个:老版本日志不 rotation、混部下占位文件重复占用、GC 过慢、Titan 引擎默认拿空间换性能——单个 titandb 实例曾占 937G/1.1T。
窄场景
TiKV 独立部署用作 KV 存储(非 TiDB SQL 场景)、混部、老版本的集群;磁盘水位监控不完善的团队。
机制
rocksdb.info/raftdb.info 在老版本无日志轮转会无限堆积;混部时 space_placeholder_file 在每块盘重复占位;默认关闭的 gc.enable-compaction-filter 让过期数据回收过慢;Titan 把 value 存 blob 文件、默认 discardable-ratio=0.5,等于用磁盘空间换写入性能,空间放大显著。
生产验证
来源 5,vivo 互联网技术团队(袁建伟)约 2024-11 排查实录——逐项定位上述四因,给出各因的处置(开 rotation、调占位、开 compaction-filter、调 Titan 参数)。
证据等级
`单方声音`,具名生产复盘(细节充分:四因逐项定位与处置)。
最后核验
2026-10-03
备注
该复盘的场景是 TiKV 独立用作 KV 存储(Redis 协议兼容层),非 TiDB SQL 集群,机制结论对 TiKV 组件通用,但场景口径已如实标注。

TiDB 年份:2024

还原状态接口谎报 SUCCESS:恢复还在跑,API 先说成功了

单方声音
运维复杂度
一句话
filesystem 备份的 restore 是异步的,但 GET 备份状态接口在 restore 刚触发时就返回 SUCCESS——运维以为恢复完了,实际数据还在写入中。
窄场景
用 backup-filesystem 模块做跨机器恢复/灾备演练的自部署用户;用脚本轮询备份状态接口做自动化恢复的流程。
机制
POST /v1/backups/filesystem/{id}/restore 只登记恢复任务并立即返回 STARTED;随后 GET 同一接口返回的 status 反映的是"任务已登记"而非"恢复已完成",于是立刻显示 SUCCESS。真正的进度只能通过再发一次 restore(返回 "already in progress" 错误)或等待一段时间后查数据来确认——状态接口与真实进度脱节。
生产验证
来源 5,2024-07 论坛帖——用户把备份从 nodeA 恢复到另一台机器,POST 恢复返回 STARTED 后立刻 GET 状态得到 SUCCESS,误以为完成;再次 POST 触发恢复才暴露 "restoration ... already in progress";等待一段时间后数据才真正出现。用户原话评价该接口"misleading"。
证据等级
`单方声音`,论坛帖(细节充分:curl 命令、返回体原文、排查过程)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

Weaviate 年份:2024

InnoDB 间隙锁:删了 0 行的 DELETE,也能锁住别人的 INSERT

单方声音
性能问题运维复杂度
一句话
REPEATABLE READ 下,一个"删了 0 行"的 DELETE 也会拿走间隙锁,让毫不相干的 INSERT 排队甚至死锁;死锁日志只保留最近一次,排查靠人肉拼 performance_schema.data_locks。
窄场景
默认隔离级别 REPEATABLE READ;外键/非唯一索引上的范围删除与并发插入混跑;Rails/ORM 长事务。
机制
InnoDB 在 RR 下对非唯一索引扫描加 next-key lock(record + gap);DELETE ... WHERE table1_id=75 即使匹配 0 行,也会锁住 (74,80] 区间;另一事务往该区间 INSERT 拿 insert intention lock 等待;双向"删除+插入"即成环。SHOW ENGINE INNODB STATUS 只保留 LATEST DETECTED DEADLOCK,高频死锁下现场稍纵即逝,需 innodb_print_all_deadlocks 或 pt-deadlock-logger 常开。
生产验证
个人博客(2023-06-12,作者 nikhil):Sentry 捕获死锁,用 performance_schema.data_locks 实录 gap/insert-intention 锁等待链,定位到 AASM 状态机把多次回调塞进同一长事务;修复=拆小事务 + 删掉"删不存在行"的多余 DELETE。
证据等级
`单方声音`,来源性质:具名个人博客(含锁表实录与修复验证;在测试环境由 Sentry 捕获,非严格生产事故,但机制与生产一致)。
最后核验
2026-10-03

MySQL 年份:2023

串行化隔离 + FIFO 锁队列:ETL 的表切换被一张报表的长查询卡住

单方声音
性能问题稳定与故障
一句话
长查询拿着 AccessShareLock,ETL 的 ALTER TABLE … RENAME(AccessExclusiveLock)只能等;队列是 FIFO,排在写锁后面的读查询也要一起等——一次日常的表切换能拖成连锁等待。
窄场景
ETL 用"建临时表 + RENAME 切换"模式发布、同时有 BI 长查询的集群。
机制
Redshift 有 3 种表锁:SELECT/UNLOAD 拿 AccessShareLock,会阻塞 DDL 的 AccessExclusiveLock(如 ALTER TABLE RENAME);查询按到达顺序进队列,排在写锁后面的读也要等它。Faire 踩坑时 Redshift 只支持 serializable 隔离(snapshot isolation 2022-05 才引入),锁冲突面更大。Faire 的两种 workaround:给 RENAME 步骤设极短超时 + 大量重试做成 best-effort,或改用 DELETE+INSERT 模式(但 ETL 任务数翻倍,Airflow SLA 承压);且"不能指望每个用数据的人都遵守最佳实践"。
生产验证
来源 1,Faire 2023-02 具名复盘——早 9 点 Mode 报表长查询 + 9:15 ETL 的 RENAME 表切换真实踩坑,附锁类型与队列顺序的完整分析。
证据等级
`单方声音`,具名公司工程博客(细节充分:锁类型、复现场景、两种 workaround 的代价分析)。
最后核验
2026-10-03
备注
Faire 发文时已注明 snapshot isolation 于 2022-05 引入,串行化误杀部分缓解;但锁类型与 FIFO 队列语义未变,故保留收录,未作"已修复"标注。

Amazon Redshift 年份:2023

Serverless 按 60 秒起收:2–3GB 的小仓库一个月 260–520 美元

单方声音
成本账单
一句话
Redshift Serverless 每个查询按 60 秒最低时长 × RPU 数计费——亚秒级查询也一样,一个每天跑十几条 ETL 的小仓库月账单轻松上几百美元。
窄场景
数据量小(GB 级)、查询短平快、每天只有少量查询的轻量场景。注意区分 Redshift provisioned(常驻集群)与 Redshift Serverless。
机制
计费 = RPU 小时 × 每秒单价,但每次查询至少按 60 秒计;默认最小 32 RPU 下,单次查询最低约 0.2 美元(60×32×0.375/3600)。作者实测:几乎每次查询都被收了 1920 秒(60s×32RPU),SYS_SERVERLESS_USAGE 表可查。
生产验证
来源 6,HackerNoon 2023 年工程师为客户做的实测——预期月 60 美元,首日试用金就掉了约 25 美元;按 10–20 条日 ETL + 100–200 条手动查询估算,月 260–520 美元,还没算 BI 工具连接的费用;结论是"在 AWS 拿掉 60 秒起收之前,BigQuery 仍是小仓库首选"。
证据等级
`单方声音`,一线工程师账单实测(含 SYS_SERVERLESS_USAGE 查询与计算过程)。
最后核验
2026-10-03
备注
AWS 后来推出 4 RPU 档(2025),小负载可降本;但 60 秒最低计费规则未变。本卡主题可能与本站 [避坑] 卡重叠(Serverless 成本)。

Amazon Redshift 年份:2023

Spectrum:有些算子只能回集群算,S3 外表查询说慢就慢

单方声音 来源存疑
性能问题
一句话
Redshift Spectrum 查 S3 外表时,部分 SQL 算子下推不了,只能回 Redshift 集群本地执行——"透明加速"的期望落空,慢的原因还不好定位。
窄场景
冷热分层(热数据在集群、冷数据在 S3)、大量用 Spectrum 做联邦查询的团队。
机制
Spectrum 把部分操作下推到 S3 层的独立 fleet 执行,但并非所有算子都支持下推;不支持的回退到集群计算,跨层数据搬运与集群资源争抢让延迟不可预测。
生产验证
来源 4,PeerSpot 2023-05-04 匿名 Data Scientist(平台标注 Real User)——"some SQL commands have to run on Redshift instead of Redshift Spectrum, which slows down a few things";"有些命令走 Redshift、有些走 Spectrum,which is problematic"。
证据等级
`单方声音` `[来源存疑]`,匿名点评用户的一句话评论(细节有限,独立性无法确认)。
最后核验
2026-10-03

Amazon Redshift 年份:2023

并发写上限 20:文档里没写的 DML 天花板

单方声音
性能问题
一句话
同一张表最多 20 条并发的 COPY/INSERT/MERGE/UPDATE/DELETE——"Snowflake users might not be aware of such a concurrent write limit as this is not in Snowflake documentation"(文档里没有,用户无从得知);"Snowflake is designed for high-volume high-concurrency reading and not writing."
窄场景
把 Snowflake 当近实时写入目标的团队(streaming ingestion、高频 MERGE、hybrid 表写入)。
机制
限制指向 Global Service Layer 元数据仓库的约束;超过上限的并发写会被限流或失败,而官方文档未明确写出该数字。
生产验证
来源 14:Slim Baltagi 2023-11-08——"Snowflake has a built-in limit of 20 DML statements that target the same table concurrently… this is not in Snowflake documentation."
证据等级
`单方声音`,独立工程师长文实测;该限制未见官方文档记载亦未见官方否认。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2023

神秘报错码官方文档查不到,只能去 GitHub 翻驱动源码,官方"暂无计划"补文档

单方声音
生态与信任
一句话
"Snowflake might display cryptic error messages that are not available in Snowflake documentation. You need to contact Snowflake technical support or dig into source code of connectors and drivers in GitHub repositories."——更尖锐的是后半句:"Although Snowflake is made aware of this issue, it does not have any plan on adding related documentation at this time!"(Snowflake 知道这个问题,但目前没有任何补文档的计划。)
窄场景
半夜排障、搜报错码无果的 on-call;air-gapped/内网环境不能随手开 support case 的团队。
机制
官方文档至今无系统性错误码手册(仅有零散 troubleshooting 页),与文中指控一致;排障路径=开工单或翻驱动源码。
生产验证
来源 14:Slim Baltagi 2023-11-08 长文第 9 节专讲文档缺失。
证据等级
`单方声音`,独立工程师长文;"官方文档无系统性错误码手册"可对照 docs.snowflake.com 现状核验,与指控一致。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2023

GROUP BY ALL:一个"盼了好多年"的语法糖,2023 年才补上

单方声音 已修复于 2023
生态与信任
一句话
2023 年 Summit 回顾里,DAS42 的顾问写道 GROUP BY ALL "a feature that we at DAS42 have anticipated for many years"(我们盼了好多年);在此之前分析师写聚合要手工数 `GROUP BY 1, 2, 3, ... 35`——列一多就数错、列一动就得重数,是个持续多年的日常摩擦;Snowflake 2023 年才把这个别家早有的便利语法补上。
窄场景
写宽表聚合的分析师;2023 年之前的 Snowflake 用户。
机制
SQL DX 的"小事"最见响应速度:一个语法糖让用户盼了好多年。
生产验证
来源 60:DAS42 Summit 2023 回顾,"anticipated for many years"原话出处。
证据等级
`单方声音`,第三方咨询公司回顾(原话明确)。
最后核验
2026-10-07
备注
缺口状态:已补上于 2023(Summit 2023 宣布);保留收录以记录"补上之前盼了多年"的事实。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:2023

从 TDSQL 迁回 MySQL:存在,但没人细说

单方声音
升级迁移
一句话
有用户把 TDSQL 用过之后又迁回了 MySQL——原话只有一句 "TDSQL -> Mysql",动因、规模、时间线一概没说。
窄场景
不详(原帖为信创选型讨论下的跟帖,未披露业务背景)。
机制
动因未披露,无法归因。注:分布式带来的运维与兼容性代价超过收益时,回迁单机 MySQL 是常见的止损路径,但这只是一般性推断,不是对该用户的断言。
生产验证
来源 1:V2EX 用户 dddd1919 2023-05-06 在信创选型帖跟帖,原话:"用过的:达梦 -> Oracle TiDB -> Mysql TDSQL -> Mysql"。
证据等级
`单方声音`,匿名社区跟帖(细节极少,仅作"存在从 TDSQL 迁出"方向的弱信号;未找到具名迁出复盘,如实标注缺口)。
最后核验
2026-10-03

腾讯云 TDSQL 年份:2023

分区表 DDL 之后,执行计划走错,只读节点 CPU 从 20% 涨到 50%+ 持续

单方声音
性能问题
一句话
一次分区表 DDL 让统计信息重建,优化器选了全量扫索引的坏计划——只读节点 CPU 翻倍还多,几个查询卡了一整天。
窄场景
大表做分区表 DDL 变更;只读节点承担业务查询的集群。
机制
DDL 触发统计信息重新维护后,优化器对子查询选择了非最优索引:异常时段 CPU 主要消耗在 IndexScanIterator(对 `idx_created_on_ent_id(created_on, ent_id)` 全量扫),正常时走 IndexRangeScanIterator(用 ent_id+agent_id 定范围再拿 created_on 过滤)。计划走错后查询不报错、只是慢,几个 select 在只读节点上持续了一天(单独拿出来执行都在 0.1 秒内)。
生产验证
来源 1,2022-01 事故记录——1 亿多行表改成 分区表后,只读节点 CPU 从长期稳定 20% 以下升到 50% 多并持续;作者对阿里云服务群给出的"统计信息重建导致计划走错"解释表示怀疑,原文引用:"但是,一亿多行的数据也花不了一天吧",怀疑是分区表 DDL 成功瞬间的某种竞态条件。
证据等级
`单方声音`,具名事故记录(细节充分:CPU 曲线、执行计划对比、排查过程)。
最后核验
2026-10-03

PolarDB 年份:2022

Uber 把金融账本搬出 DynamoDB:官方口径一年省 600 万美元

单方声音
成本账单
一句话
Uber 把支付账本 LedgerStore 从 DynamoDB 迁到自研 Docstore,官方复盘称每年节省约 600 万美元。
窄场景
写密集、数据量大(2500 亿条记录/~300TB)、需要强一致索引与审计可验证性的账本类负载。
机制
DynamoDB 按操作次数 + 存储量计费,热数据单价高;账本数据的典型生命周期是"写入后几周内高频读、之后转冷",而 DynamoDB 没有原生的冷热分层,长期把全量数据放在热库 = 持续支付热存储溢价;记录占其存储足迹与成本的 75%,是主要矛盾。
生产验证
来源 3,Uber 官方工程博客 2020——LedgerStore(Gulfstream 支付平台的不可变账本,带 sealing 签名审计)在 DynamoDB 上跑近两年后"becoming expensive";回填 2500 亿条唯一记录(约 300TB)零生产事故;原文 "The estimated yearly savings are $6 million per year";同时实现技术栈整合、减少外部依赖。
证据等级
`单方声音`,具名公司官方工程复盘(Uber 自撰,非厂商邀请稿)。
最后核验
2026-10-03
备注
该复盘发表于 2020 年;按请求计费的成本结构为架构性设计、至今未变,故保留收录。与本站 Cognito Forms 弃选案例角度不同(彼为选型阶段弃用,此为生产运行后的迁出 + 量化节省),不重复。

Amazon DynamoDB 年份:2020

defrag:你必须定期执行的"停机式"维护

单方声音
运维复杂度
一句话
compaction 不缩文件,defrag 才缩——但 defrag 是阻塞操作,执行期间该成员**读写全停**,DB 越大停越久,连 HA 集群都救不了你,只能逐个成员错峰做。
窄场景
DB 逼近配额上限、长期只 compact 从不 defrag 的集群;defrag 跑在 leader 上且耗时超过选主超时时会顺带触发一次 leader 选举。
机制
defrag 重建整个 bbolt 文件以消除内部空洞,重建期间成员不响应任何读写;耗时随 DB 大小线性增长(AWS EKS 实测约每 GB 10 秒);`etcdctl defrag --cluster` 也只是逐个成员串行,不是并行无损。Gojek 的原话是"there is always going to be an unavoidable pause"——HA 架构对此无能为力,因为每个成员都必须单独经历一次。
生产验证
来源 4,2020-04,Gojek 生产 etcd 运维实录——"Defragmentation to a live member blocks the system from reading and writing data while rebuilding its state",因此 defrag 必须低频执行、DB 保持小巧(默认 2GB 别贪大);该阻塞行为在现行版本官方维护文档中依然存在,未被修复或优化掉。
证据等级
`单方声音`,公司工程博客生产运维实录(具名作者;阻塞机制经现行官方文档确认仍存在,故保留收录,未作"已修复"标注)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

etcd 年份:2020

Streams 免费变 GoldenGate 天价:用了十年的免费复制功能被砍

单方声音
成本账单生态与信任
一句话
随 EE 免费的 Streams/Advanced Replication 在 12c 被弃用、19c 起不受支持,替代品 GoldenGate 是独立许可、天价——客户原话:"Oracle 拿走了一个免费产品,换成了一个贵得离谱的!"
窄场景
用 Streams/Advanced Replication 做复制/数据同步的老 EE 客户;升级到 19c 时被迫面对。
机制
Streams 曾是 EE 自带("免费")的复制方案;12c 起 deprecated,19c 起 desupported;官方迁移路径是 GoldenGate(独立产品、独立许可)或 XStream API(需自行开发)。功能没有消失,但免费到天价的落差全部由客户承担。
生产验证
来源 8:Experts Exchange 问答(约 2020 年,围绕 19c 许可)——客户 slightwv 原话:"Oracle took away a 'free' product and replaced it with a very expensive one!!!";另一位客户 Alex 跟帖:"GoldenGate is horrobly expensive"(拼写为原文);讨论串确认 RAC 亦是 EE 之外的额外付费选项。
证据等级
`单方声音`,同一问答串内多名客户呼应(细节充分:产品名、版本线、价格体感)。
最后核验
2026-10-03
备注
问答发生在 2020 年前后,但 Streams 在 19c 起 desupported 的机制未变,故保留。

Oracle Database(甲骨文) 年份:2020

"我们得教育 Oracle 我们的合同":审计按现行政策、不按签约条款算

单方声音
成本账单生态与信任
一句话
JM Huber 前 CIO 作证:2019 年审计时,Oracle 按 2019 年的许可政策、而非 1999 年签约时的合同条款衡量合规,客户反过来给 Oracle 上课。
窄场景
与 Oracle 签约历史悠久、合同条款与现行政策存在代际差异的老客户。
机制
Oracle 许可政策随版本与年份不断修订(虚拟化认定、选项包定义、云折算系数等),而审计团队倾向于用"当前政策"解读历史合同;客户若无专人逐条核对签约文本,就可能为按新政策算出的"缺口"买单。
生产验证
来源 1:Michael Cahoon(时任 JM Huber 公司 CIO)2019 年亲历审计——合同可追溯至 1999 年,审计方却按 2019 年条款执行;Cahoon 原话:"It felt like we were having to educate Oracle on our contract"(感觉是我们在给 Oracle 上课,教他们读我们自己的合同)。Palisade Compliance 在报道中称 Oracle 审计年收入约 30 亿美元。
证据等级
`单方声音`,具名 CIO 经独立媒体报道(细节充分:年份、公司、合同年限)。
最后核验
2026-10-03
备注
主题可能与现有 [避坑] 卡(许可证审计类)重叠。

Oracle Database(甲骨文) 年份:2019

RDS Proxy 的隐藏保底:8 ACU 起步,比数据库本身还贵

单方声音
成本账单
一句话
给 Serverless v2 配 RDS Proxy 做连接池,Proxy 的最低收费是 8 ACU——0.5 ACU 的库,配了个 16 倍大的"门卫"。
窄场景
Serverless v2 + RDS Proxy(常见于 Lambda 架构)的组合;东京区域 0.5 ACU 常驻的小库。
机制
RDS Proxy 对 Serverless v2 按 ACU 计费且有 8 ACU 最低消费;口径藏在定价页细则里,控制台切换实例类型时不会提醒你 Proxy 的计费口径变了(从按 vCPU 小时变为按 ACU)。
生产验证
来源 9,dev.to 独立实践者——开发环境从 db.t3.medium 切到 Serverless v2(0.5 ACU 常驻约 $2.21/天),Cost Explorer 却每天多出约 $7;按使用类型分组发现 `Proxy-ASv2-Usage` 一项约 $10/天,根因是之前 Lambda 架构留下的 RDS Proxy 没关。
证据等级
`单方声音`,dev.to 个人实践记录(细节充分:Cost Explorer 分组、东京区单价、根因定位过程)。
最后核验
2026-10-03

Amazon Aurora 年份:—

Aurora Limitless:分片键要进主键,跨分片还可能"分布式死锁"

单方声音
运维复杂度
一句话
Limitless 不是透明的水平扩展——主键必须包含分片键、序列有空洞、Read Committed 下会出现原生 PG 没有的"分布式死锁"可重试错误,一批 Aurora 功能直接不支持。
窄场景
想用 Limitless 做写扩展、且带着原生 PG 心智(主键、序列、事务语义)迁过来的团队。
机制
Limitless 是"路由器+分片"的分片集群:主键必须含分片键(否则建不了);序列由路由器预留区间实现(空洞是常态);跨分片写走 2PC,Read Committed 下会出现 `aborting transaction participating in a distributed deadlock` 这类原生 PG 没有的可重试错误;Serializable 直接不支持;官方文档另有一长串不支持的功能(RDS Proxy、Global Database、克隆、自定义 endpoint、zero-ETL 等)。
生产验证
来源 16,AWS Hero Franck Pachot(独立数据库顾问,非 AWS 员工)的 Limitless 实测系列——pgbench 跨分片转账测出分布式死锁错误,只能先锁表绕过;`ALTER TABLE ... ADD PRIMARY KEY(id)` 因主键不含分片键被拒;序列 chunk 机制导致取值不连续。
证据等级
`单方声音`,独立实测系列(同一作者多篇,细节充分:完整报错原文、绕过方法、版本行为)。
最后核验
2026-10-03
备注
作者为 AWS Hero(社区身份),非 AWS 员工;内容为第一手实测,非厂商软文。

Amazon Aurora 年份:—

升级:读源码、等一个月、混版本 CI 才敢升

单方声音
升级迁移
一句话
ClickHouse 每月发版、行为变化快,升级前要 diff 源码里的 `*Settings.h`、跑混版本集群 CI,大版本数据格式不兼容真实发生过。
窄场景
自建多副本集群的版本升级;用了实验性功能、依赖特定 SQL 行为或默认参数的团队。
机制
发版节奏快带来四类升级风险:数据存储格式不兼容变更(降级即丢数据)、bugfix 顺带改 SQL 行为(查询结果变化)、性能回退、默认参数/开关变化。复制协议向后兼容,但数据格式与行为不保证。
生产验证
来源 3:Tinybird CTO 具名复盘——第一次升级花了 3 小时 + 2 周准备,用了 4 年才做到 CI/CD 无停机升级;"过去 2 年里遇到过 2-3 次数据格式不兼容"(多租户下各种类型组合全覆盖才撞上),"别在发布后立刻升级,至少等一个月"、"别用实验性功能";CI 跑生产版 + master + 目标版三版本、混版本集群、每天用下个版本重跑客户全部查询;"想有效运维 ClickHouse,你得读源码——我管过几百个 Postgres 集群,从没需要过这个"。
证据等级
`单方声音`,具名 CTO 深度运维复盘(细节充分:升级流程 8 步、CI 矩阵、格式不兼容次数)。
最后核验
2026-10-03
备注
与现有吐槽清单"升级"行(默认值/SQL 行为/元数据变化影响降级)主题重叠,互为佐证。

ClickHouse 年份:—

写入后读不到:read-your-own-writes 默认不保证

单方声音
性能问题
一句话
刚写入的行,后续 SELECT 可能查不到——ClickHouse 默认不保证读己写一致性,打开 `select_sequential_consistency` 要拿吞吐换。
窄场景
写入后立即查询的交互流程(表单提交后刷新、流水线"写完即查"断言)、对一致性有直觉预期的 OLTP 迁移团队。
机制
写入落盘与查询可见性之间是异步链路(part 落盘、副本同步都是后台的);`select_sequential_consistency` 能强制保证,但"at a measurable performance cost"。这是反复出现的主题:更强的保证都有,只是都要拿吞吐/延迟换。
生产验证
来源 4:TechWolf 工程博客——"ClickHouse does not guarantee read-your-own-writes consistency out of the box. The records you insert may not immediately be visible in subsequent SELECT queries",并把"想要关系型数据库的行为?可以,但学习曲线陡峭、处处是 tradeoff"列为采用 ClickHouse 的最大挑战之一。
证据等级
`单方声音`,具名公司工程博客(细节充分:参数名、性能代价说明)。
最后核验
2026-10-03

ClickHouse 年份:—

物化视图:回填没有安全路,POPULATE 有竞态

单方声音
运维复杂度
一句话
给存量表加物化视图想回填历史数据?官方 `POPULATE` 有并发竞态会丢数/重数,安全做法是全套手工作业。
窄场景
给已有大表新增物化视图并回填历史;MV 越加越多、写入越来越慢的集群。
机制
MV 本质是"触发器 + 另一张 MergeTree 表",每次写入主表都会同步执行 MV 的聚合写入——MV 越多写入越慢、part 越多、内存压力越大。`POPULATE` 在视图创建期间到达的写入不会被正确处理(官方文档明确不推荐);安全的回填是:先建 Null 表过渡、手动分批回填、控制每批行数避免产生数千个 part。
生产验证
来源 2:Tinybird——"MVs are a killer feature, but they are hard to manage, they lead to memory issues, and they generate a lot of parts…every new MV will make your ingestion slower";回填章节标题即"Backfills…it's so painful","You might be tempted to use POPULATE…Don't. It's broken because data can be duplicated",并给出 Null 表 + 手动分批的标准作业流程。
证据等级
`单方声音`,具名 CTO 运维复盘(细节充分:POPULATE 竞态、回填作业步骤)。
最后核验
2026-10-03

ClickHouse 年份:—

开源与商业的信任裂缝:零拷贝复制"没人爱"

单方声音
生态与信任
一句话
社区贡献的零拷贝复制(S3 存算分离的关键特性)buggy、会丢数据、还在 S3 留垃圾——而 ClickHouse Inc 自己的 SharedMergeTree 只给 Cloud 用,还一度计划删掉社区版特性。
窄场景
想在开源版上做 S3 存算分离降成本的团队;评估"开源版会不会被釜底抽薪"的选型者。
机制
开源版 S3 零拷贝复制由外部贡献者实现,ClickHouse Inc 态度冷淡(buggy、丢数据风险、S3 垃圾回收问题);ClickHouse Cloud 用的 SharedMergeTree 存储引擎不开源。开源的是代码,但最好的存储架构只存在于商业版。
生产验证
来源 3:Tinybird CTO 具名陈述——零拷贝复制"was contributed by someone outside ClickHouse, Inc., and it looks like they don't like it…it's buggy, you can lose data, it leaves garbage in S3";"ClickHouse Cloud has its own storage, but it's not open source";"ClickHouse, Inc. could remove the feature any time (they had actually planned to do it)";Tinybird 为此维护了私有 fork。同文开头的律师免责声明("mainly for ClickHouse, Inc lawyers: we have nothing to do with ClickHouse, Inc")本身也是商标关系紧张的信号。
证据等级
`单方声音`,具名 CTO 陈述(细节充分:特性归属、删除计划、私有 fork)。
最后核验
2026-10-03

ClickHouse 年份:—

列级脱敏(masking)仅 Cloud 可用:自建版执行 DDL 直接被拒

单方声音
运维复杂度生态与信任
一句话
Snowflake 有 Dynamic Data Masking;ClickHouse 的 `MASKING POLICY` 是 ClickHouse Cloud 专属(25.12+),开源/自建执行 DDL 直接被拒(`SUPPORT_IS_DISABLED`)——合规敏感的自建用户只能手写 view 变通。
窄场景
自建 ClickHouse + 数据合规/脱敏需求。
机制
行级 `ROW POLICY`(OSS 可用)与列级 `MASKING POLICY`(Cloud 专属)被切分到两个版本线。自建版教脱敏的课程只能教"建 `v_employees_masked` view + `replaceRegexpAll` 手工脱敏"。
生产验证
—
证据等级
`单方声音`,Cloud-only 事实确凿但无具名用户抱怨。
最后核验
2026-10-07

ClickHouse 年份:—

大版本之间没有升级通道:1.x→2.x、3.x→4.x 按"迁移"处理,1.x 迁移工具还要付费

单方声音
升级迁移成本账单
一句话
OceanBase 的大版本之间不支持原地升级,跨大版本等于重新做一次数据迁移;早期版本的官方迁移工具还是付费的。
窄场景
运行 1.x/2.x/3.x 老版本、希望跟进 4.x 新特性的团队。
机制
OceanBase 内核在 1.x→2.x、3.x→4.x 之间存在不兼容的存储/元数据变更,官方升级路径只覆盖小版本与相邻版本序列内的"经停"升级(如 4.2.5→4.3.5→4.4.x 需按升级依赖序列逐段经停);跨代只能走 OMS/逻辑迁移重建集群。早期 1.x 时代的官方迁移工具是商业收费的,而同期开源迁移工具普遍免费或随服务提供。
生产验证
来源 1:Gartner Peer Insights 验证用户原话——"their major version is sometimes not upgradable, e.g. 1.x to 2.x, 3.x to 4.x are considered migrations not upgrades. Data migration tools for version 1.x are paid tools, while out there data migration tools are free or as part of the services"。
证据等级
`单方声音`,Gartner Peer Insights 验证用户评价(匿名,平台验证身份)。
最后核验
2026-10-03

OceanBase 年份:—

CLOG 能吃掉近一半数据盘:高频写入场景的日志税

单方声音
成本账单
一句话
高频写入下 CLOG 日志空间占比极高,接近数据盘容量的一半,磁盘规划不留足就等着扩容。
窄场景
高频写入 OLTP;按数据量 1:1 规划磁盘、没给日志留余量的部署。
机制
OceanBase 是 Paxos 多副本共识写入,每笔事务的 Redo(CLOG)要在多数派落盘才算提交;为保证 RPO=0 与故障恢复,CLOG 保留窗口通常远大于单机库的 WAL/binlog 保留。高频写入时日志产生速度与数据写入速度同量级,磁盘占用里日志与数据几乎对半。
生产验证
来源 1:Gartner Peer Insights 验证用户原话——"CLOG Log: In high-frequency write scenarios, the CLOG log space accounts for a high proportion, nearly half of the data disk capacity."
证据等级
`单方声音`,Gartner Peer Insights 验证用户评价(匿名)。
最后核验
2026-10-03

OceanBase 年份:—

老版本改个配置要做节点迁移:弹性这事,新版本才有

单方声音
运维复杂度
一句话
老版本 OceanBase 调整资源配置需要做节点(Unit)迁移,又慢又重;在线改配是新版本才补上的能力。
窄场景
仍在跑 2.x/3.x 老版本的集群;需要频繁调整租户 CPU/内存规格的业务。
机制
早期版本租户资源与 Unit/资源池强绑定,改规格要走"新建 Unit → 分区复制 → 切换"的重分布流程,本质是一次小规模数据迁移;4.x 才把"改 Unit Config 即时生效"做成在线操作。版本越老,弹性越接近"纸面"。
生产验证
来源 1:Gartner Peer Insights 验证用户原话——"Elasticity: Configuration changes in older Oceanbase versions require node migration, which is time-consuming."
证据等级
`单方声音`,Gartner Peer Insights 验证用户评价(匿名)。
最后核验
2026-10-03

OceanBase 年份:—

监控粒度粗、第三方集成弱:想接自己的可观测体系得自己造轮子

单方声音
生态与信任
一句话
集群监控粒度不够细、第三方监控集成能力弱,ODC 的可定制功能也被点名不足,运维想深度定制只能自己动手。
窄场景
已有 Prometheus/Grafana/自研运维平台、希望把 OB 纳入统一可观测体系的团队。
机制
OB 的可观测主要围绕自家 OCP 与内部视图(GV$ 系列)建设,对外暴露的指标粒度和第三方生态对接(exporter、标准告警集成)成熟度不如 MySQL/PG 生态;ODC 作为开发者工具,可定制能力被用户点名不足。
生产验证
来源 1:Gartner Peer Insights 验证用户原话——"1. Cluster monitoring granularity and third-party integration capabilities 2. Suggested real-world use cases for AI models 3. Customizable features and functionalities, such as those available on the ODC (Optical Distribution Center)."
证据等级
`单方声音`,Gartner Peer Insights 验证用户评价(匿名)。
最后核验
2026-10-03

OceanBase 年份:—

12c 自适应优化器:升级后性能倒退,关掉才恢复正常

单方声音 来源存疑
性能问题升级迁移
一句话
两家 PeopleSoft 客户从 10g/11g 升到 12.1.0.2 后出现升级前不存在的性能问题,罪魁祸首是默认开启的自适应查询优化,关掉 OPTIMIZER_ADAPTIVE_FEATURES 后"性能极佳、再无用户投诉"。
窄场景
升级到 12c(12.1/12.2)的 OLTP/ERP 类应用(PeopleSoft、E-Business Suite 等)。
机制
Adaptive Query Optimization 允许 Oracle 在 SQL 执行过程中根据运行时收集的"自适应统计信息"调整执行计划;该机制本身有可观开销,且在某些负载下导致计划选择恶化。Oracle Support 上有大量相关性能 note(1335892.1、1320300.1、2182373.1 等)。12.2 起该参数被拆分为 OPTIMIZER_ADAPTIVE_PLANS 与 OPTIMIZER_ADAPTIVE_STATISTICS 两个参数。
生产验证
来源 11:Solvaria 咨询公司博客——两家 PeopleSoft 客户升级后性能问题、常规统计信息收集无效、关闭自适应特性后恢复的全过程。
证据等级
`单方声音`[来源存疑],咨询公司博客(未具名客户,营销文体)。
最后核验
2026-10-03
备注
内容年代较早(12c 时代机制),但自适应参数机制在后续版本中仍然存在,未标注"已修复"。主题可能与现有 [避坑] 卡(升级类)重叠。

Oracle Database(甲骨文) 年份:—

加副本提吞吐:Qdrant 在 400 QPS 测崩了

单方声音
性能问题
一句话
副本从 1 加到 2,Qdrant p99 有改善,但吞吐上不去——Reddit 的 400 QPS 测试因高延迟和错误根本没跑完。
窄场景
高吞吐在线查询、靠加副本扩读吞吐的集群;评估基于 v1.12。
机制
加副本后查询要向更多副本扇出并合并结果,协调开销上升;同构节点上每个节点既服务查询又参与复制协调,扇出开销随副本数放大,吞吐先撞墙。RF=1 时 Qdrant 单机吞吐占优,恰恰说明它的扩展瓶颈在"多副本协调"而非单机性能。
生产验证
来源 3:RF=1 时 Qdrant 在更高吞吐下仍能给出满意延迟;RF=2 后 Qdrant p99 改善,但 Milvus 能以可接受延迟维持更高吞吐——"Qdrant 400 QPS 未展示,因为测试因高延迟和错误未能完成"。
证据等级
`单方声音`,具名工程评估(量化对比数据)。
最后核验
2026-10-03

Qdrant 年份:—

开源版加副本要手工建/删分片:没有自动再平衡

单方声音
运维复杂度
一句话
想提高副本数,开源版 Qdrant 得手工创建/删除分片——Reddit 团队说这功能"要么自己造,要么用非开源版"。
窄场景
需要在线调整副本数/分片数的自运维集群;评估基于 v1.12。
机制
Qdrant 的分片放置与副本拓扑变更走共识操作,但开源版缺少"一键改 RF 自动搬数据"的编排能力;运维需手工发起分片转移并盯进度,步骤多、易出错。Milvus 在提高集合副本数时有自动再平衡。
生产验证
来源 3:评估团队原话——"Milvus 在提高集合副本数时有自动再平衡,而开源版 Qdrant 需要手工创建或删除分片来提高副本数(这个功能我们得自己造,或者用非开源版本)"。
证据等级
`单方声音`,具名工程评估。
最后核验
2026-10-03
备注
评估基于 v1.12;Qdrant 后续版本加入了 resharding 相关能力(以官方 release notes 为准),但无独立验证确认该缺口已补齐,故不作"已修复"标注。

Qdrant 年份:—

进坏状态后,Qdrant 比 Milvus 难调试

单方声音
生态与信任
一句话
Reddit 团队的原话——"任一系统进入坏状态时,调试和修复 Milvus 比 Qdrant 更容易"。
窄场景
生产异常排查(节点失速、查询变慢但不报错);评估基于 v1.12。
机制
Milvus 异构组件边界清晰(proxy、coordinator、query、data 节点各司其职),日志/指标按组件划分,故障域可定位;Qdrant 同构节点内 segment 优化、HNSW 构建、Raft 共识交织在同一进程里,坏状态时难判断是哪个子系统在拖慢。加上社区可借鉴的排障案例更少,on-call 更多只能靠自己啃。
生产验证
来源 3:评估团队在"运维"维度上的直接定性结论(引用原话)。
证据等级
`单方声音`,具名工程评估(定性结论,非量化数据)。
最后核验
2026-10-03

Qdrant 年份:—

半结构化数据二等公民:ARRAY 变字符串,JSON 支持残缺

单方声音
生态与信任
一句话
在 Redshift 里 ARRAY 列默认被转成字符串,JSON 支持"非常有限"——数据科学家直言跟其他数仓比"支持很差",半结构化分析处处碰壁。
窄场景
事件流、点击流等半结构化数据为主的分析;从 Snowflake/BigQuery 迁移过来的团队。
机制
Redshift 基于 PG 8 系老内核,SUPER 类型 2021 年才引入;数组/嵌套的表达与函数覆盖远不如 Snowflake VARIANT,JDBC/工具链常把 ARRAY 退化成字符串,下游解析成本转嫁给用户。
生产验证
来源 5,TrustRadius 认证评论(Manager in Engineering,页面未标注日期)——"Json support in sql is very limited... Array type columns are missing. They are by default converted to strings... For a data scientist too, the SQL is a bit limited when it comes to unstructured columns in the tables. Arrays, jsons, etc have very poor support compared to other warehouses."
证据等级
`单方声音`,点评平台认证用户(细节充分:ARRAY 转字符串、JSON 支持弱、与其他数仓对比)。
最后核验
2026-10-03

Amazon Redshift 年份:—

Snowflake 侧 incident 4 小时 45 分,dbt 任务间歇性报 000603 内部错误

单方声音
稳定与故障
一句话
2025-03-19 15:00 UTC 起 Snowflake 一次 incident,dbt Platform 上所有 Snowflake 用户的 IDE 调用与定时任务间歇性失败,报错 `"000603 (XX000): SQL execution internal error ... incident 7507128"`,影响窗口约 4 小时 45 分。
窄场景
2025-03-19 当天用 dbt Cloud 跑 Snowflake 任务的团队(dbt US Cell 1 AWS 的 IDE 与 Scheduled Jobs 两个组件)。
机制
Snowflake 服务端 incident;下游平台只能记录、等待,无自救手段。
生产验证
来源 18:dbt Labs 官方状态页——当日 04:50 UTC(美东)开始调查、05:12/06:44 UTC 两次确认是 Snowflake 侧 incident、次日 01:48 UTC 宣布恢复。
证据等级
`单方声音`,下游平台官方状态页的时间线与错误原文记录;与本页 2024-12-16 事件同属 000603/XX000 引擎内部错误报错族。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:—

服务端一次 rollout,Sigma 客户查询错误率 100% 长达 5 小时

单方声音
稳定与故障
一句话
2023-10-03 Snowflake 当天早晨发布的 server 7.35 合并了登录请求的 account 解析逻辑,导致 connection string 用 legacy 格式 account identifier 的 Go/JDBC driver 登录失败——受影响客户"所有 Sigma 相关 warehouse 操作错误率 100%",直到 Snowflake 全局回滚到 7.34 才恢复,约 5 小时。
窄场景
通过 Sigma(及同类 BI 工具)连接 Snowflake、用 legacy account identifier 的组织。
机制
服务端升级的向后不兼容变更 + 客户端 identifier 格式旧——两边都没错,但组合起来全挂;Sigma 的预防措施是"内部测试账号永远先于客户吃到最新 server 更新",等于承认对 Snowflake 的 rollout 节奏没有可见性。
生产验证
来源 19:Sigma Computing 工程团队 postmortem——13:00 UTC 起大量组织无法执行查询、报错 `"Bad request; operation not supported"`;排查确认是 server 7.35 的 account 解析逻辑变更;约 18:03 UTC 恢复。
证据等级
`单方声音`,下游 BI 平台以客户视角撰写的事故复盘(时间线、根因、恢复动作俱全)。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:—

SCIM 离职同步可能静默失败:Okta 侧显示解绑成功,Snowflake 里账号还活着

单方声音
生态与信任
一句话
Okta 给 Snowflake 做用户注销时,"Snowflake app un-assignment succeeds, but SCIM deactivation fails"——管理员在 Okta 里看到的是"已解绑",离职员工的 Snowflake 账号实际还活着,访问回收出现空档,且没有任何告警。
窄场景
Okta + Snowflake SCIM 对接的团队;有离职员工账号回收合规要求的组织。
机制
Snowflake SCIM 访问令牌过期是可能原因,而令牌过期本身没有任何提前通知机制;修复要去 Snowflake 里重新生成 token、再到 Okta 更新配置。
生产验证
来源 32:加州政府数据团队(cagov)GitHub issue #586(团队工程师 Kevin 记录的一线运维记录)——"The likely cause is that Snowflake SCIM access token expired"。
证据等级
`单方声音`,客户一线运维记录;SCIM 配置繁琐在社区有多篇讨论,但"解绑成功、注销失败"的静默失败模式只在此 issue 见到具名实录。
最后核验
2026-10-07
备注
本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:—

Empower 横评:Snowpark 做 AI 训练,Databricks 全方位胜出——"it is not" [来源存疑]

单方声音 来源存疑
生态与信任
一句话
从业者横评 Snowpark vs Databricks 做 AI 模型训练,TLDR 直接写 "**it is not**"(Snowpark 不是强力竞争者):工作区只是"SQL-only worksheet",无原生 Git 集成、多人不能协作编辑 notebook;第三方 Python 包"limited list, not all library versions supported";UDF 限 1 分钟且不能返回对象(模型训完必须在 UDF 内推理完再扔掉),存储过程限 1 小时只支持标量返回;实测不支持 OpenCV、音频库、强化学习库,"removes quite a few branches of AI from your toolkit";无 GPU("critical for big-model AI training");warehouse 内存上限撞到要找 support 逐个仓库提;真正的分布式训练在 Snowflake 执行环境内 "impossible"——"are you truly doing AI **with** Snowflake or with a Snowflake partner?"(你到底是在用 Snowflake 做 AI,还是在用 Snowflake 的合作伙伴做 AI?)
窄场景
评估"Snowflake All-in-One AI"的团队;需要 GPU/分布式训练的 ML 负载。
机制
Snowpark 的执行环境为 SQL 数仓设计,不是为 ML 训练设计;HN 社区同期争论中 Snowpark 被批 "walled garden… only 'approved' python libraries are allowed",Snowflake 员工反驳可用 IMPORTS 上传纯 Python 包,随即被怼 "Good luck with trying to install any non-trivial python library this way"。
生产验证
来源 49:Empower 公司博客([来源存疑]:数据平台咨询商,有立场倾向,结尾导向 Databricks Lakehouse 方案)——所列技术事实具体可核,且与来源 47 在四点上交叉印证。
证据等级
`单方声音`,[来源存疑]:作者立场倾向明显,但技术事实具体、与独立实测交叉印证。
最后核验
2026-10-07
备注
约 2022 年 Snowpark 早期横评,Snowpark 此后持续迭代。本卡主题可能与本站 [避坑] 卡重叠。

Snowflake 年份:—

主键表写入先把主键索引"吃"进内存:没分区的表直接写挂

单方声音
性能问题运维复杂度
一句话
主键模型写入时要把目标分区的主键索引加载进 BE 内存——表没做分区,就等于把整张表的主键索引一次性塞进内存,Update 内存一超,导入直接报错。
窄场景
主键模型(Primary Key)表、未按时间分区(或无冷热特征)的表、高频 Flink/Stream Load 写入;BE 的 update 内存默认 27GB 上限。
机制
StarRocks 主键表为支持行级实时更新,在写入时把目标分区的主键索引(persistent index)加载到 BE 内存做去重/更新定位,主键索引的加载粒度是分区。没有分区键的表,最小加载单元就是整张表。微盟案例中一张设计不合理的主键表在写入时把 BE 的 update 内存(默认 27GB)打爆,导入报 `close index channel failed`。另有一重硬约束:主键编码后总长度上限 127 字节且不可调,主键列多/宽的表建表即埋雷,写入时才暴露。
生产验证
来源 1:微盟技术中心生产案例一——多个主键表导入报错 `close index channel failed`,排查发现某主键表无分区,写入时整表主键索引进内存,BE update 内存(27GB)超限;最终把该表从主键模型改回更新模型解决;
来源 1:同团队案例三——50 张主键表的集群,8 台 BE 平均每台被主键索引常驻吃掉 7.5GB 内存(BE 总共只给了 50GB),治理(改更新模型/加分区键/清生命周期)后释放约 48GB 常驻内存;
来源 1:同团队案例二——7 列宽主键(多 VARCHAR)建表后写入失败,主键编码超 127 字节硬上限,去掉一列主键后才写入成功。
证据等级
`单方声音`,独立公司工程团队博客(同一来源内 3 个具名生产案例,细节充分:报错原文、内存数值、治理前后对比)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

StarRocks 年份:—

Tablet 数量失控:3T 数据、140 万个 tablet,FE 内存先顶不住

单方声音
运维复杂度
一句话
StarRocks 的 tablet 数 = 分区数 × 分桶数 × 副本数,随手建表就能造出百万级 tablet——每个 tablet 都在 FE 常驻约 5KB 元数据,FE 内存先被"小文件式"的元数据淹没。
窄场景
分区粒度过细(天级分区配小数据量)、分桶数拍脑袋设大、历史表从未治理的集群;分桶数建表后不可修改。
机制
Tablet 是 StarRocks 最小的数据管理单元,FE 要为每个 tablet 维护元数据(微盟压测:约 5KB/tablet,随总量线性增长)。微盟集群 3T 数据攒出 140 万个 tablet,平均每个 tablet 仅 2.6MB(官方推荐 100MB–1GB),FE 内存峰值被推到 18.6GB。治理(三批:天改月分区、砍分桶数)后 tablet 降到 13 万,FE 内存峰值回落到 4.5GB。雪上加霜的是分桶数建表后不能直接改,前期设错只能重建表。
生产验证
来源 1:微盟技术中心生产案例四——Tablet 数 120 万+(优化前 140 万),3TB 数据平均 tablet 2.6MB,大量 tablet 仅几 KB;治理后降至 13 万,FE 内存峰值 18.6GB → 4.5GB。
证据等级
`单方声音`,独立公司工程团队博客(细节充分:tablet 数、平均大小、FE 内存治理前后数值)。
最后核验
2026-10-03
备注
本卡主题可能与本站 [避坑] 卡重叠。

StarRocks 年份:—