Skip to content

Commit

Permalink
rework introduction section
Browse files Browse the repository at this point in the history
Signed-off-by: ekexium <[email protected]>
  • Loading branch information
ekexium committed Dec 13, 2024
1 parent dbe9bdb commit daf1cf4
Showing 1 changed file with 14 additions and 29 deletions.
43 changes: 14 additions & 29 deletions pipelined-dml.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)来支持执行器等其他模块的运行。

## 使用限制

Expand Down

0 comments on commit daf1cf4

Please sign in to comment.