导读:本期聚焦于小伙伴创作的《TiDB的TiKV compaction的level和write stall有什么关系,如何缓解write stall问题》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《TiDB的TiKV compaction的level和write stall有什么关系,如何缓解write stall问题》有用,将其分享出去将是对创作者最好的鼓励。

TiKV作为TiDB的分布式存储引擎,基于LSM树(日志结构合并树)实现数据存储,compaction是LSM树维持读写性能的核心机制,而write stall是TiKV在写入压力过大时触发的保护性限流机制,二者存在直接关联。

TiDB的TiKV compaction的level和write stall有什么关系,如何缓解write stall问题

TiKV compaction与level层级基础

TiKV使用的RocksDB作为单机存储引擎,LSM树的层级从0到N依次递增,不同level的compaction规则不同:

  • L0层存放刚写入的MemTable flush后的SST文件,文件之间可能存在key范围重叠
  • L1到Lmax层,每一层的SST文件按照key有序排列,层与层之间文件范围不重叠,且上层大小通常是下层的若干倍
  • compaction的过程就是将上层的小SST文件合并到下层,清理过期数据和重复key,减少读放大

compaction分为两种类型,分别是L0->L1的compaction和Ln->Ln+1的层级compaction,不同层级的compaction触发条件和资源消耗差异很大。

level层级与write stall的触发关系

write stall的触发主要和以下几个level相关的阈值有关:

触发场景关联level阈值说明
L0文件数量过多L0默认L0文件数达到4个触发L0 compaction,达到20个时强制触发write stall
待合并文件过多所有层级某个level的待compact文件总大小超过该层软阈值时触发限速,超过硬阈值触发write stall
compaction pending bytes过多所有层级所有待compact的文件总大小超过阈值时,触发write stall限制写入

当L0层文件堆积过快,L0到L1的compaction速度跟不上写入速度,L0文件数达到硬阈值,就会直接触发write stall。如果下层level的compaction速度慢,导致pending bytes持续上涨,也会触发write stall。

write stall的缓解方案

1. 调整compaction相关参数

可以根据业务写入特点调整RocksDB的compaction参数,提升compaction效率:

-- 查看当前TiKV的RocksDB compaction相关配置
SHOW CONFIG WHERE type = 'tikv' AND name LIKE '%compaction%';

-- 动态调整L0触发compaction和write stall的阈值,提升L0 compaction触发频率,避免L0文件堆积
SET CONFIG tikv rocksdb.defaultcf.l0_compaction_trigger = 3;
SET CONFIG tikv rocksdb.defaultcf.l0_slowdown_writes_trigger = 15;
SET CONFIG tikv rocksdb.defaultcf.l0_stop_writes_trigger = 18;

2. 优化写入模式

避免大量热点key集中写入,热点写入会导致L0文件快速生成,compaction来不及处理。可以通过业务侧拆分热点key,或者调整TiDB的tidb_batch_insert等参数,控制单批次写入量,降低瞬时写入压力。

3. 提升硬件IO能力

compaction是重IO操作,如果磁盘IO性能不足,compaction速度会远低于写入速度。可以将TiKV的部署磁盘更换为NVMe SSD,提升磁盘读写吞吐量,加快compaction执行速度。

4. 分离compaction与写入IO

如果条件允许,可以将RocksDB的WAL日志、SST文件、compaction临时文件分别部署到不同的磁盘,避免compaction和正常写入的IO竞争,提升整体处理效率。

总结

TiKV的write stall本质是LSM树compaction机制跟不上写入速度时的保护策略,和L0层文件数量、各level的pending compaction大小直接相关。通过合理调整compaction参数、优化写入模式、提升硬件IO能力等方式,可以有效缓解write stall问题,保障TiDB的写入性能稳定。

TiDBTiKVcompactionwrite_stall修改时间:2026-06-30 12:54:24

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。