【面试直击:化零为整的推土机,OceanBase 里的并行执行 (PQ) 折叠时空之术】 导语OceanBase 专属面试在日常的在线交易OLTP系统中我们总是希望 SQL 像狙击手一样找准索引0.1 毫秒击毙一行数据然后光速撤退。但是如果老板突然要在白天拉一份包含一百亿行交易记录的“双十一全链路销售大盘财务报表”呢让一个可怜的 CPU 线程去一行行扫一百亿条记录做聚合结果绝对是跑到天黑都出不来甚至把系统的内存挤爆。今天“DBA面试君”就带你拆解 OceanBase 最强悍的 HTAP 底盘能力——**并行执行Parallel Query, PQ**。教你如何一键召唤出蚂蚁雄兵把按小时计算的任务拍扁进秒级阵列里 【OceanBase 面试情景对话】Interview scenario dialogue‍OceanBase 原厂资深技术专家 (考官)“你好。我们知道 OceanBase 是一个同时支持在线交易处理 (OLTP) 和在线分析处理 (OLAP) 的 HTAP 头号国产数据库。在应对动辄扫描几亿行的报表或者跑批Batch聚合查询时单线程串行计算是远远不够的。请问在 OceanBase 中如果我们想极大地缩短一条复杂报表 SQL 的执行时间最核心的原生手段是什么在实操中作为 DBA 你推荐用怎样的方式最优雅地开启并控制它更重要的是它有什么让你防不胜防的毒副作用必须避坑的点”DBA面试君 (候选人)“专家您好这也是我们在做大促盘点时最爱用、却也是最危险的一把核武器——**并行执行PQ。**它的本质非常简单暴力当一个庞大的全表扫描、巨量 GROUP BY 或者多表大 Hash Join 压下来时优化器会把这一个宏大的任务切分为多个互相独立的小执行流DFO然后立刻拉起几十个甚至上百个 Worker 线程跨越物理机分布式地同时去啃这块硬骨头。它最大的效果就八个字以资源换绝对时间。”DBA面试君拆解并行执行的“用与防”实战落子“一把梭”最优雅的开火方式 (SQL Hint)很多新手 DBA 喜欢去调系统全局的 ob_stmt_parallel_degree 等系统变量。但这极度危险一旦全局默认开启高并发极其容易让普通的业务连接瞬间把系统的线程池榨干。最标准、最高端的外科手术刀SQL Hint在实际生产运维中我们几乎 100% 推荐让开发人员甚至报表 BI 系统仅仅在需要跑大查询的 SQL 文本中间强行插入一把钥匙在这条语句中/* PARALLEL(8) */ 就是我们指定的并行度DOP Degree of Parallelism。这句话就是在命令 OB“哪怕平时你都只派一个线程去跑现在这个报表请你砸给我8 个线程同算立刻马上”震撼的战果折叠时空HTAP 降维打击开启 PQ 后你会在执行计划里EXPLAIN看到满屏的 EXCHANGE OUT、EXCHANGE IN 和 DFO 的字眼。这说明调度器已经把任务分发出去了。效果立竿见影化小时为读秒如果之前全表扫描 5 亿行需要 8 个小时。当你打上 /* PARALLEL(128) */它可能会把这 5 亿行劈成 128 份均匀散布到集群后台三台高配置的 OBServer 机器上。每台机器拉起上百个空闲的 CPU 核心全速运转。最后各个线程把算好的局部 Sum 值通过网络 RPC 抛给发号施令的主节点Coordinator一汇总原本 8 小时的报表业务可能短短两三分钟内甚至十几秒之内就被几百个线程组成的“推土机群”暴力趟平出总结果⚔️面试高分防雷区给 OLTP 喂了 PQ 的毒药系统当场休克面试到这里其实刚刚拿了 60 分。高级架构师绝不只懂什么能用更懂什么**万万不能用**。避坑保命法则PQ 极其昂贵的“启动费”如果一个开发新手觉得“加上 PARALLEL(16) 就会变快 16 倍”于是把它悄悄加在了登录页面的 SELECT user_id FROM users WHERE username admin 这种单行点查上灾难就降临了。为什么因为开火是有代价的并行度 16意味着系统必须先去向线程池请求分配 16 个线程还要设置好它们之间复杂的内存网络通信RPC通道还要切分任务块。这个准备工作Overhead可能就要耗费几毫秒甚至十几毫秒。而那个走索引的单行点查本来单线程跑0.1 毫秒就结束了强行并行不仅让这条本来 0.1 毫秒的 SQL 慢了 100 倍花了 10.1 毫秒去协调调度还什么都没算更致命的是如果并发一高每秒有一千个登录请求都来索要 16 个后台线程系统的百万并发线程池会在 1 秒内被瞬间全部剥削抽干整个数据库直接 queue_time 我们在前面讲过它爆表活活因为缺少可用空闲线程而当场暴毙休克结论总结PQ 是一只只能被放归到荒野大扫描、大聚合上的猛虎绝不能让它走在大街上单点高频 OLTP。技术专家点评“回答得非常通透是一份满分的大厂实战答卷。1. 点出了 PQ 是典型的 【以资源换时间】 这一本质哲学证明你不迷信调优而是明白守恒定律。2. 给出了 【基于 SQL Hint 级别的控制】这是目前运维人员容错率最高、对业务侵入性最小的推荐写法。3. 能主动向考官抛出 【在 OLTP 场景下乱用 PQ 带来的调度开销与线程池抽干雪崩】 这个致命反例把并行的正向与负向代价拆解得淋漓尽致。很精彩你随时可以入职接手大促护航了”