KingbaseES PDML海量数据写入加速实战


在这里插入图片描述

让多核真正跑起来:KingbaseES PDML 海量数据写入加速实战

在金融、政务等核心业务系统中,数据库不仅要保证稳定和可靠,还要应对越来越庞大的批量数据处理任务。无论是日终跑批、数据清洗,还是报表汇总,一旦数据规模达到数千万甚至数亿行,传统串行 DML 的执行效率就很容易成为系统瓶颈。

即使服务器拥有多核 CPU 和高速 SSD,如果数据库仍然采用单进程完成查询与写入,大量硬件资源也无法得到充分利用。针对这一问题,电科金仓 KingbaseES(KES)提供了并行 DML(PDML)能力,并通过 MGQ、GMQ 等执行计划,将查询、写入、索引维护和约束检查等任务分配给多个工作进程。

本文围绕一个典型的大规模数据插入场景,介绍 KES PDML 的工作原理、配置方法、SQL Hint 用法以及实际性能表现。

一、业务痛点:多核服务器为何仍被单核限制

在某大型银行的批处理业务中,DBA 需要执行一条复杂的 INSERT INTO ... SELECT ... 语句。该语句涉及多张基础表,数据总量达到 1.7 亿行。

服务器已经配置了 32 核高性能 CPU 和高速 SSD,但任务运行时却出现了明显的资源利用不均:

  • 一个 CPU 核心长期处于高负载状态;
  • 其他核心大部分时间处于空闲状态;
  • 3000 万行单表插入在串行模式下约需 97 秒;
  • 上亿行多表关联插入可能持续数小时。

这类现象的根本原因并不在于硬件性能不足,而是传统执行方式只能由单个进程完成主要工作。当单核计算能力达到上限后,继续增加 CPU 核数也无法直接缩短执行时间。

PDML 的价值就在于把原本集中在一个进程中的任务拆分给多个 Worker,使查询、计算和数据写入能够并行执行,从而真正发挥多核服务器的能力。

二、执行原理:MGQ 与 GMQ 有什么区别

KES 的并行 DML 采用“Leader 进程 + Worker 进程”的执行模型。Leader 负责协调任务,Worker 则按照执行计划处理各自的数据分片。

根据查询和修改阶段的并行范围不同,KES 主要提供 MGQ 和 GMQ 两类计划。

2.1 MGQ:查询阶段并行

MGQ 的全称为 Modify-Gather-Query

在这种模式下,多个 Worker 可以并行完成数据扫描、过滤、关联和计算。查询结果汇总到 Leader 后,再由 Leader 统一执行数据修改操作。

其执行过程可以概括为:

  1. Worker 并行执行查询;
  2. 查询结果汇总至 Leader;
  3. Leader 单进程执行 Insert、Update 或 Delete。

MGQ 能够明显提升查询阶段的处理效率,更适合查询工作量较大、实际修改数据量相对较少的场景。

2.2 GMQ:查询与修改全流程并行

GMQ 的全称为 Gather-Modify-Query,也是 KES PDML 中更具代表性的执行方式。

与 MGQ 不同,GMQ 不仅并行处理查询,还会把数据修改任务一并分配给多个 Worker。每个 Worker 在完成自己负责的数据扫描和计算后,可以直接执行对应的数据写入。

其优势主要体现在以下几个方面:

  • 查询和修改可以同时并行;
  • 索引维护任务可以分散到多个进程;
  • 约束检查不再完全由 Leader 承担;
  • CPU 密集型操作能够更均匀地分布到多个核心。

在适合并行执行的业务场景中,GMQ 的性能收益通常会随着并行度提升而增加。原测试数据显示,部分场景中的性能提升可达到 74%。

三、配置实操:开启 PDML 并行模式

3.1 开启 DML 并行功能

首先在当前会话中开启并行 DML:

SET enable_parallel_dml = on;

该参数用于允许优化器为 DML 语句生成并行执行计划。

3.2 设置并行 Worker 数量

接下来配置系统可使用的并行进程数量:

SET max_parallel_workers = 16;
SET max_parallel_workers_per_gather = 8;

其中:

  • max_parallel_workers 表示系统允许使用的并行 Worker 总数;
  • max_parallel_workers_per_gather 表示单个 Gather 节点最多能够调用的 Worker 数量。

并行度并不是越高越好。实际配置时,需要结合 CPU 核数、磁盘性能、并发任务数量以及数据库整体负载进行调整。

3.3 优化 WAL 和检查点配置

当多个 Worker 同时写入数据时,WAL 日志和检查点可能成为新的性能瓶颈。为了减少日志写入等待,可以根据测试环境进行以下调整:

SET wal_buffers = '512MB';
SET checkpoint_timeout = '1d';
SET synchronous_commit = off;

这些参数的作用分别是:

  • 增大 WAL 缓冲区,减少前台进程因日志缓冲不足而等待;
  • 延长检查点间隔,降低跑批过程中频繁刷盘造成的干扰;
  • 关闭同步提交后,可以减少事务提交阶段的等待时间。

需要注意的是,synchronous_commit = off 更适合对性能要求较高、且能够接受一定提交确认延迟的场景。正式生产环境中应根据可靠性要求谨慎设置。

四、使用 Hint 引导并行执行计划

除了系统级和会话级参数,KES 还支持通过 SQL Hint 对单条语句进行更精细的控制。

下面以多表关联插入为例,同时为目标表和查询部分指定 8 个并行进程:

INSERT /*+ parallel(target_tab, 8) */ INTO target_tab
SELECT /*+ parallel(8) */
       t1.id,
       t2.info
FROM source_tab1 t1
INNER JOIN source_tab2 t2
        ON t1.id = t2.id
WHERE t1.batch_no = '20241027';

在这条 SQL 中:

  • parallel(target_tab, 8) 用于指定目标表写入阶段的并行度;
  • parallel(8) 用于指定查询部分的并行度。

通过 Hint,DBA 可以针对特定跑批语句进行调优,而不必直接修改所有业务会话的全局执行策略。KES 的 Hint 写法与主流商业数据库较为接近,也有利于降低数据库迁移过程中的改造成本。

五、执行前检查:哪些情况可能回退为串行

并不是所有 DML 语句都能安全地并行执行。为了保证事务一致性和业务逻辑正确,KES 会在优化阶段检查目标表、约束和函数是否满足并行安全条件。

如果存在以下情况,PDML 可能被禁用或自动回退到串行执行。

5.1 目标表存在触发器

触发器通常包含额外的业务逻辑。多个 Worker 同时触发相关逻辑时,可能产生执行顺序和一致性问题,因此系统可能不采用并行 DML。

5.2 存在复杂外键约束

自引用外键、级联删除和延迟约束等机制,可能导致多个并行进程之间产生依赖关系,从而影响并行执行。

5.3 使用非并行安全函数

如果 CHECK 约束、生成列或表达式中调用了非并行安全函数,优化器也可能放弃并行计划。

因此,在实施 PDML 前,应先检查目标表结构、触发器、外键、索引和相关函数,并通过执行计划确认语句是否真正进入并行模式。

六、性能验证:并行执行带来了什么变化

在完成 PDML 配置和 SQL 调整后,可以从执行时间、索引维护效率以及资源利用率三个方面评估优化效果。

6.1 多表关联插入明显加速

在 2.6 亿行数据的多表关联插入测试中:

  • 串行执行耗时接近 8 分钟;
  • 开启 8 并行后,执行时间缩短至约 2 分钟;
  • 整体性能提升约 74%。

这说明在数据量较大、查询和写入都具备并行条件时,GMQ 能够显著缩短批处理任务的完成时间。

6.2 带索引目标表同样能够受益

传统模式下,目标表存在索引时,索引维护通常会进一步放大 Leader 进程的压力。

在 GMQ 计划中,索引写入任务也可以分配给多个 Worker。原测试结果显示,在带索引的数据插入场景中,KES GMQ 的执行速度可达到传统串行模式的 4 倍以上。

6.3 硬件资源利用更加充分

开启并行 DML 后,系统资源使用情况也会发生明显变化:

  • 多个 Worker 分担计算任务,CPU 负载更加均衡;
  • 整体 CPU 利用率可由约 3% 提升至 30% 以上;
  • 高速 SSD 的 IOPS 能力得到更充分的利用;
  • 磁盘利用率在高负载阶段可接近 100%。

这表明 PDML 不只是缩短 SQL 执行时间,也能改善服务器资源长期闲置的问题。

七、总结:用软件并行释放现有硬件能力

KingbaseES PDML 并不是简单地增加几个并行进程,而是对查询、数据修改、索引维护、约束检查和事务控制进行协同调度。

其中,GMQ 计划能够让查询和修改同时进入并行阶段,在海量数据插入、更新、删除以及核心跑批任务中具有较高的应用价值。

对于已经部署多核 CPU 和高速存储、但批处理效率仍然受限的业务系统,PDML 提供了一种不依赖频繁升级硬件的优化路径。通过合理设置并行度、优化 WAL 和检查点参数、使用 Hint 引导执行计划,并提前排查并行安全限制,企业可以进一步缩短跑批窗口,提高现有服务器的资源利用率。

在金融、政务等对性能和一致性都有较高要求的场景中,KES PDML 能够在保证事务处理能力的基础上,为大规模数据加工和核心业务批处理提供更高效的执行方案。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屿小夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值