快速装载性能

更新时间:
复制 MD 格式

本文介绍PolarDB MySQL X-Engine快速装载功能的性能数据及技术原理分析。

快速装载简介

PolarDB MySQL X-Engine快速装载是针对全列存表研发的高性能大文件导入方案。该技术通过旁路(Bypass)机制,绕过传统的SQL解析层、事务引擎及后台Compaction流程,实现了从原始数据到ORC最终文件格式的向量化直写。

image

其核心技术优势体现在以下四个维度:

  1. 全路径性能优化:彻底消除传统写入路径中索引唯一性检查(Unique Check)与预写日志(WAL)带来的同步性能开销。

  2. 消除Compaction损耗:规避大规模数据加载时产生的大量文件碎片,从源头解决由于后台 Compaction 资源争抢导致的系统抖动问题。

  3. 极效算力利用:深度集成SIMD指令集加速数据解析与格式转换,并结合零拷贝(Zero-copy)技术优化内存管理,将CPU访存延迟降至最低。

  4. 即时查询与持续更新:采用异步构建机制生成行列映射索引(Non-clustered Index)及二级索引。在确保导入数据“即刻可查”的同时,通过解耦索引构建流程,保障了系统后续的高效更新能力。

性能数据

每张表均使用64个并发同时导入,统计总的导入时间,以及导入后的磁盘空间占用情况。

测试结果表明,在100 GB+级别数据量下,PolarDB MySQL X-Engine快速装载技术相比传统InnoDB引擎,导入速度提升了4~26倍,磁盘空间占用降低了73%~94%,展示了极佳的存储效率与写入性能。

image

Airline数据集(77 GB纯文本)

指标

X-Engine全列存

InnoDB

导入时间

96 s

2574 s

平均吞吐量

821 MB/s

30 MB/s

存储空间

4.95 GB

94.29 GB

TPC-H SF1000数据集

指标

X-Engine全列存

InnoDB

导入时间

1450 s

6065 s

平均吞吐量

706 MB/s

168 MB/s

存储空间

357 GB

1351 GB

深入解析

导入性能差异:架构开销与并发瓶颈

  1. Airline 场景(宽表 + 无主键):

    • InnoDB的“锁”瓶颈:在无显式主键(PK)时,InnoDB会生成一个隐式的全局6字节 Row_ID。在64路高并发导入时,无主键导致Row_ID顺序递增,多个线程需要写入同一个Page,从而诱发了严重的Page Latch竞争,导致并发性能大幅下降。

    • B+Tree的效率退化:Airline的单行行长较大(110 列),导致InnoDB 16KB页面能容纳的记录数极少,B+TreeFan-out低,树高增加,每一行写入涉及的元数据管理开销显著增大。

    • X-Engine的优势:采用旁路直写(Direct Load),无需维护B+Tree结构,也不存在全局Row_ID竞争。其向量化解析和ORC直写将瓶颈从"锁竞争"转移到了纯粹的“计算与IO”上。

  2. TPC-H 场景(短表 + 顺序主键):

    • InnoDB 的“理想场景”:TPC-Hlineitem行长较短,且dbgen产生的数据具有天然的主键递增顺序。这使得InnoDBB+Tree几乎是以“顺序追加”的方式生长,有效地减少了页分裂与随机IO,同时由于每个线程操作的页面不同,不会造成严重的Page Latch竞争。因此,InnoDBTPC-H下的导入效率显著优于Airline场景,对X-Engine全列存则影响不大。

存储空间差异:列存编码与数据稀疏性

  • 数据的“稀疏性”(Sparsity):Airline数据集虽然列多,但存在大量稀疏数据(如空值 NULL、零值 0、大量重复的字符串如航空公司代码)。

  • X-Engine全列存优势:

    • 编码压缩:X-Engine全列存利用ORC格式,对重复值极高的列采用字典编码(Dictionary Encoding),对连续相同或递增值(如年份、日期)采用游程编码(RLE)。

    • 跳过零值:在列存模式下,大量的零值和空值几乎不占用实际物理存储;而InnoDB的行格式仍需为每个字段保留必要的头信息和偏移量,导致空间浪费严重。

    • 通用压缩:X-Engine 全列存采用ZSTD压缩算法,提供了较高的压缩比,同时保持极高的解压速度。

这种技术代差使得X-Engine在真实世界的“宽表且多稀疏值”场景下,能实现近20倍的存储节省。