diff --git a/pipelined-dml.md b/pipelined-dml.md index 4ad359a2cae6..de7c8df25272 100644 --- a/pipelined-dml.md +++ b/pipelined-dml.md @@ -11,40 +11,25 @@ summary: Pipelined DML 增强了 TiDB 批量处理的能力,使得事务大小 本文介绍 Pipelined DML 的使用场景、使用方法、使用限制和使用该功能的常见问题。 -Pipelined DML 是 TiDB 从 v8.0.0 开始引入的实验特性,用于优化大规模数据写入场景的性能。启用 Pipelined DML 后,当执行 DML 操作时,TiDB 会将相应的数据持续写入存储层,而不是全部缓存在内存中。这种方式就像流水线(Pipeline)一样,数据一边被读取(输入),一边被写入到存储层(输出),从而显著降低 DML 操作对内存的占用,提升大规模数据的写入性能。 +## 功能概述 -通过 Pipelined DML,你可以执行超大规模的 DML 操作而不必担心内存溢出问题。 +Pipelined DML 是 TiDB 从 v8.0.0 开始引入的实验特性,用于优化大规模数据写入场景的性能。启用 Pipelined DML 后,当执行 DML 操作时,TiDB 会将相应的数据持续写入存储层,而不是全部缓存在内存中。这种方式就像流水线(Pipeline)一样,数据一边被读取(输入),一边被写入到存储层(输出),从而解决了大规模 DML 操作的以下常见问题: -## 使用场景 +- 内存限制:传统 DML 在处理大量数据时容易导致 OOM +- 性能瓶颈:大事务执行效率低,容易引起系统负载波动 +- 操作限制:受限于 TiDB 内存总量,难以执行超大规模数据处理 -Pipelined DML 适用于以下场景: +启用此功能后,你可以: +- 执行不受 TiDB 内存限制的大规模数据操作 +- 获得更平稳的系统负载和更低的操作延迟 +- 将事务内存使用控制在可预测范围内(在 1 GiB 以内) -- **大规模数据的迁移或归档** +当你遇到以下情况时,建议考虑使用 Pipelined DML: +- 需要处理数百万行及以上级别的数据写入 +- 执行 DML 时遇到内存不足错误 +- 大规模数据操作导致系统负载波动明显 - 例如,将历史数据从活跃表归档到归档表。 - -- **批量数据的导入或更新** - - 例如,批量调整商品价格或更新用户状态。 - -- **批量数据的删除** - - 例如,删除历史数据或清理过期数据。 - -- **涉及大量数据的 ETL (Extract, Transform, Load) 数据处理** - - 例如,从多个数据源提取数据,进行必要的转换处理后,加载到目标数据库或数据仓库。 - -- **大规模写入内存优化** - - 降低大规模数据写入操作对系统内存的占用。 - -在这些场景中,Pipelined DML 具有以下优势: - -- 事务使用内存可控,事务大小不受 TiDB 内存总量限制。事务部分内存使用限制在 1 GiB 以内。 -- 有效处理数百万行数据的迁移,避免 OOM 问题。 -- 延迟更低,事务执行效率更高。 -- CPU 和 IO 负载更平滑。 +需要注意的是,虽然 Pipelined DML 显著降低了事务处理的内存需求,但执行大规模数据操作时仍需要合理的内存空间(建议至少 2 GiB)来支持执行器等其他模块的运行。 ## 使用限制