描述导出 CSV 与 SQL 格式在并行度上的限制差异。
解读
面试官想验证你对 Cloud SQL 导出机制底层实现的理解深度,尤其是“并行度”这一性能维度。国内大厂面试常把“导出速度”与“一致性/锁”混在一起来问,答不到并行限制就等于没摸到核心。CSV 与 SQL 两种格式在 Cloud SQL 内部走的是完全不同的管道:CSV 依赖并行表级分片(MySQL 的 SELECT INTO OUTFILE、PostgreSQL 的 COPY),而 SQL 格式本质上是单线程逻辑备份(mysqldump/pg_dump)。能否把这两条管道的并行上限、锁行为、实例规格影响讲清楚,是得分关键。
知识点
-
CSV 导出
- 底层调用:MySQL 用
SELECT INTO OUTFILE ... FIELDS TERMINATED BY,PostgreSQL 用COPY table TO STDOUT WITH (FORMAT csv)。 - 并行模型:表级并行,最大并发度 = min(表数量, 50),这是 Cloud SQL 导出任务调度器的硬上限。
- 锁行为:MySQL 仅对目标表加共享 MDL 读锁,PostgreSQL 用MVCC 快照,不阻塞读写。
- 瓶颈:单表再大也只能单线程扫,无法分片并行;国内若单表过 TB,常因一个表拖慢整库导出被吐槽。
- 底层调用:MySQL 用
-
SQL 导出
- 底层调用:统一走单线程逻辑备份(mysqldump/pg_dump),生成可重放的 DDL+DML 文本。
- 并行模型:全程单线程,Cloud SQL 侧不允许拆库拆表并行,因此并行度恒为 1。
- 锁行为:MySQL 会短暂触发FLUSH TABLES WITH READ LOCK来捞 binlog 位点;PostgreSQL 用可重复读事务,不锁表,但长事务可能撑大 WAL。
- 瓶颈:单线程导致CPU 单核打满,网络出口也只能用单流;国内 4 核 16 G 实例实测,SQL 导出速度≈CSV 的 1/5。
-
国内场景差异
- 跨境链路:若 Bucket 选的是新加坡,北京 VPC 通过Cloud Interconnect 专线,CSV 并行 50 表能把 10 Gbps 专线吃满;SQL 单线程只能跑到 200 MB/s,带宽浪费。
- 监管合规:金融客户要求导出加密,CSV 可在GCS 端触发CMEK 加密,并行 50 流同时写;SQL 单流加密CPU 打满,耗时翻倍。
答案
CSV 格式在 Cloud SQL 内部采用表级并行,上限 50 张表同时导出,每张表内部仍是单线程扫;SQL 格式走单线程逻辑备份,并行度恒为 1。因此,CSV 的最大并行度是 50,SQL 是 1;单表体量过大时,两者都会退化为单线程,但 CSV 仍可通过多表并发把网络/IO 打满,而 SQL 只能单核慢跑。
拓展思考
- 混合策略:国内头部电商做“大促前全量备份”时,核心业务表用CSV 分片+WHERE 切段(自建脚本按主键范围拆 10 段),非核心表用原生并行 CSV,DDL 与存储过程再单独做一次 SQL 导出,整体时间从 6 h 降到 45 min。
- Serverless Export 新特性:Google 2024 Q2 在 Preview 的Serverless Export 支持自动分片 CSV,单表可拆 32 并行,锁-free;面试时可主动提及,展示对 roadmap 的敏感度。
- 成本陷阱:并行 50 的 CSV 会把实例IOPS 额度瞬间打爆,触发 throttling;国内用户常因GP2 磁盘 IOPS 上限被限速,预演时需提前升配到 SSD 30 k IOPS 或开启 IOPS 突发,否则面试答完并行度却忽略成本侧会减分。