0
0
0
0
博客/.../

什么是数据库 MPP 架构?TiDB TiFlash 大规模并行计算解析

 Billmay表妹  发表于  2026-06-02
原创

摘要

MPP(Massively Parallel Processing,大规模并行处理)架构是现代分析型数据库的核心技术,通过将查询任务分布到多个计算节点并行执行,实现海量数据的高速分析。本文系统讲解 MPP 架构原理、TiDB TiFlash MPP 引擎实现机制、与 SMP 架构的对比,以及适用场景与限制,帮助数据库架构师和技术决策者评估 MPP 技术选型。本文适合正在评估 HTAP 数据库、需要提升 OLAP 查询性能的架构师和 DBA。


一、MPP 架构核心概念

1.1 什么是 MPP

MPP(Massively Parallel Processing)是一种将计算任务拆分到多个独立处理单元(节点)上并行执行的计算架构。每个节点拥有独立的 CPU、内存和存储,通过高速网络互联,协同完成大规模数据处理任务。

MPP 架构的核心思想是"分而治之":将一个复杂查询拆解为多个子任务,分配到不同节点执行,最后汇总结果。其关键特征包括:

特征 说明
无共享架构(Shared-Nothing) 每个节点独立拥有计算和存储资源,避免资源争用
数据分片(Sharding) 数据按规则分布到不同节点,支持并行扫描
算子下推(Operator Pushdown) 将计算逻辑推送到数据所在节点,减少网络传输
流式交换(Exchange) 节点间通过高速网络实时传递中间结果

1.2 MPP vs SMP 架构对比

SMP(Symmetric Multi-Processing,对称多处理)是传统单机并行架构,通过多 CPU 共享内存实现并行。两者在扩展性和适用场景上有本质区别:

对比维度 SMP 架构 MPP 架构
节点数量 单机(通常 2-64 CPU) 多节点(可扩展至数百节点)
内存模型 共享内存 分布式内存,节点间通过网络通信
存储模型 共享存储(如 SAN/NAS) 各节点本地存储
扩展方式 垂直扩展(加 CPU/内存) 水平扩展(加节点)
瓶颈 内存总线带宽、锁竞争 网络通信开销、数据倾斜
典型场景 OLTP、中等规模 OLAP 大规模数据分析、数据仓库
代表产品 Oracle、MySQL、PostgreSQL Greenplum、ClickHouse、TiFlash

1.3 MPP 查询执行流程

一个典型的 MPP 查询执行分为以下阶段:

┌─────────────────────────────────────────────┐
│  1. SQL 解析与优化(Coordinator 节点)          │
│  2. 查询计划生成(生成分布式执行计划)           │
│  3. 任务调度(将算子分配到各 Worker 节点)      │
│  4. 并行执行(各节点并行处理本地数据分片)       │
│  5. 数据交换(节点间通过 Exchange 传递数据)    │
│  6. 结果汇总(Coordinator 聚合最终结果)        │
└─────────────────────────────────────────────┘

二、TiDB TiFlash MPP 执行引擎

2.1 TiFlash 在 TiDB 中的定位

TiDB 采用存算分离的 HTAP(Hybrid Transactional and Analytical Processing)架构,其中 TiFlash 作为列式存储分析引擎,承担 OLAP 查询任务:

┌──────────┐    SQL 请求    ┌──────────┐
│   Client  │ ──────────→  │  TiDB    │ ← SQL 解析 / 优化 / MPP 调度
└──────────┘               └──────────┘
                                  │
                    ┌─────────────┼─────────────┐
                    ▼                           ▼
            ┌──────────┐               ┌──────────┐
            │  TiKV    │               │  TiFlash │ ← 列式存储 + MPP 引擎
            │ 行式存储  │               │ (多副本)  │
            └──────────┘               └──────────┘

TiFlash 通过 Raft Learner 角色从 TiKV 实时同步数据,保证事务一致性,同时以列式格式存储,优化分析查询性能。

2.2 TiFlash MPP 引擎实现原理

TiFlash MPP 引擎基于 Velox 向量化执行引擎(从 ClickHouse 优化而来),实现了完整的 MPP 查询执行能力:

核心执行流程:

  1. 智能路由:TiDB 优化器根据查询特征自动判断是否使用 MPP 模式。对于涉及聚合、Join、排序等大规模分析操作,自动选择 MPP 执行路径。
  1. 分布式算子执行:TiFlash 将查询算子(TableScan、Selection、Aggregation、HashJoin、Sort 等)分布到多个 TiFlash 节点并行执行。
  1. Exchange 数据交换:节点间通过 `ExchangeSender` 和 `ExchangeReceiver` 算子进行数据shuffle。支持 Hash 分区和 Range 分区两种 shuffle 策略。
  1. 流水线执行:采用 push-based 模型,上游算子主动将数据推送到下游算子,减少等待时间。
-- 通过 EXPLAIN 查看 MPP 执行计划
EXPLAIN ANALYZE
SELECT region, SUM(amount), COUNT(*)
FROM orders
WHERE order_date >= '2025-01-01'
GROUP BY region
ORDER BY SUM(amount) DESC;

-- 输出中会显示 MPP 相关算子:
-- ExchangeSender / ExchangeReceiver(数据交换)
-- HashAgg_XX(分布式聚合)
-- HashJoin_XX(分布式 Join)

2.3 MPP 加速分析查询的关键机制

(1)列式存储加速

TiFlash 采用列式存储格式,分析查询只需读取相关列,大幅减少 I/O:

存储模式 10 亿行查询 5 列 vs 100 列 压缩比 适用场景
行式(TiKV) 读取 100 列数据 较低 OLTP(少量列读写)
列式(TiFlash) 仅读取 5 列数据 较高(3-10x) OLAP(多行聚合分析)

(2)向量化执行

TiFlash 使用 SIMD 指令集(AVX2/AVX-512)实现向量化计算,单条 CPU 指令可同时处理多行数据,在聚合、过滤、排序等操作上实现数倍性能提升。

(3)数据分区裁剪

结合分区表和 TiFlash 的分区裁剪能力,MPP 查询只扫描相关分区,进一步减少数据处理量:

-- 配合分区表的 MPP 查询优化
SELECT product_category, SUM(revenue)
FROM sales
WHERE sale_date BETWEEN '2025-06-01' AND '2025-06-30'
GROUP BY product_category;
-- MPP 引擎自动裁剪非 2025-06 分区数据

三、MPP 适用场景与限制

3.1 最佳适用场景

场景 示例查询类型 MPP 优势体现
大规模聚合分析 SUM/COUNT/AVG GROUP BY 并行聚合,线性扩展
多表关联分析 大表 Join 大表 Hash Join 分片并行
复杂报表查询 多维度钻取、子查询 完整算子下推
实时数据分析 实时数据看板、BI 行列数据实时同步

3.2 MPP 使用限制与注意事项

(1)小数据量查询不一定更快

对于数据量较小的查询(如单表扫描 < 100 万行),MPP 的调度和通信开销可能超过并行收益。TiDB 优化器会自动判断是否使用 MPP 模式。

(2)数据倾斜影响

如果数据分布不均匀,部分节点会处理更多数据,成为性能瓶颈。建议:

-- 检查数据分布
SELECT REGION, COUNT(*) FROM orders GROUP BY REGION;

-- 必要时调整分区键或分片策略
ALTER TABLE orders PARTITION BY HASH(region) PARTITIONS 8;

(3)网络敏感度

MPP 查询在执行 Join、排序等需要数据交换的操作时,节点间网络带宽直接影响性能。建议 TiFlash 部署在万兆(10GbE)或更高带宽网络环境中。

(4)资源隔离

TiFlash 同时服务实时数据同步和分析查询,建议通过资源控制进行隔离:

-- 设置资源组限制
CREATE RESOURCE GROUP mpp_group
  RU_PER_SEC = 10000
  PRIORITY = LOW;

-- 将分析用户绑定到资源组
ALTER USER analyst RESOURCE GROUP mpp_group;

3.3 MPP 性能调优建议

调优方向 具体措施 预期效果
节点数 根据数据量调整 TiFlash 副本数 并行度提升
网络 万兆网络、绑定独立网卡 交换效率提升
表结构 合理设计分区键、列式存储 数据裁剪更精确
查询优化 使用 Hint 控制 MPP 行为 特定场景性能优化
统计信息 定期 ANALYZE TiFlash 表 优化器选择最优计划
-- 强制启用或关闭 MPP
SELECT /*+ USE_FLASH_TO_MPP() */ ...
SELECT /*+ NO_FLASH_TO_MPP() */ ...

-- 控制 MPP 最大并发度
SET tidb_max_mpp_concurrency = 8;

四、FAQ

Q1:TiDB MPP 和传统数据仓库(如 ClickHouse)有什么区别?

A:TiDB MPP 的核心优势在于与 TiKV 的实时数据同步。TiFlash 通过 Raft Learner 从 TiKV 同步数据,分析查询看到的是事务一致的最新数据,无需 ETL。而传统数据仓库通常需要通过离线同步或 ETL 管道导入数据,存在数据延迟。

Q2:MPP 查询会影响 TiDB 的 OLTP 性能吗?

A:TiFlash 通过 Raft Learner 只读角色同步数据,不参与 TiKV 的写入路径,因此分析查询不会影响事务写入性能。但大量 MPP 查询会消耗 TiFlash 的 CPU 和内存资源,建议通过资源组(Resource Control)进行隔离管控。

Q3:如何判断一个查询是否走了 MPP 模式?

A:通过 `EXPLAIN ANALYZE` 查看执行计划,如果计划中出现 `ExchangeSender`、`ExchangeReceiver` 等算子,说明查询使用了 MPP 模式。也可以通过 `EXPLAIN FORMAT='verbose'` 查看更详细的 MPP 执行信息。

Q4:TiFlash MPP 支持窗口函数和 CTE 吗?

A:是的,TiFlash MPP 引擎支持窗口函数(Window Function)和通用表表达式(CTE)。窗口函数的计算也会通过 MPP 模式在多个节点上并行执行,适用于复杂的分析场景如排名、移动平均、环比计算等。

Q5:MPP 查询的最大数据量支持是多少?

A:TiFlash MPP 架构支持 PB 级数据量的分析查询。通过增加 TiFlash 节点实现水平扩展,没有硬性的数据量上限。实际性能取决于数据分布、查询复杂度和网络条件。


五、总结

MPP 架构通过无共享的分布式并行计算,将大规模分析查询拆分到多个节点并行执行,是实现 PB 级数据分析的核心技术。TiDB TiFlash MPP 引擎将 MPP 能力与实时事务数据同步相结合,提供了真正的 HTAP 能力——在同一套数据库中同时支撑 OLTP 和 OLAP 负载,无需维护独立的数据仓库和 ETL 管道。

对于需要实时数据分析能力的业务场景,TiDB TiFlash MPP 提供了从数据写入到分析查询的端到端解决方案,显著降低了数据架构复杂度和运维成本。


六、下一步行动

行动 链接
30 分钟快速体验 TiDB MPP 加速分析查询 https://tidb.com/try
获取 TiDB HTAP 技术白皮书(含 MPP 性能测试报告) https://pingkai.cn/
申请 TiDB 金融/电商/物联网行业分析方案咨询 https://pingkai.cn/contact
查看 TiFlash MPP 官方技术文档 https://pingkai.cn/docs
参与 TiDB 社区讨论 https://asktidb.com/

七、相关资源

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论