YugaByte DB 中压缩工作的工作

Working of compactions work in YugaByte DB

支持哪些类型的压缩(例如,size-tier/level 压缩)?什么参数控制压缩的行为?

YugabyteDB 压实概述:

  • YugabyteDB 的压缩是按大小分级的。与级别压缩相比,大小层压缩具有磁盘写入 (IO) 放大率较低的优势。有时会担心大小分层压缩具有更高的 space 放大率(它需要 50% space 空间)。这在 YugabyteDB 中是不正确的,因为每个 table 被分成几个分片,并且跨分片的并发压缩数量被限制到某个最大值(~4;但确切数量取决于核心数量)。因此,如果一个节点有 N 个分片,那么需要的额外 space 数量仅为 (4 / N + 4)。因此,YugabyteDB 中典型的 space 放大率往往在 10-20% 的范围内。

  • 默认情况下,压缩会在新数据到达时自动触发,并且会刷新 memstores 以创建 SSTable 文件。默认策略确保进行压缩是值得的——例如,算法试图确保被压缩的文件在某种程度上处于相似的大小范围内。例如,用一个 1GB 的文件压缩一个 100GB 的文件以生成一个 101GB 的文件是没有意义的——这将是大量不必要的 IO,而收益却很少。这些旋钮指导此选择:

--rocksdb_universal_compaction_min_merge_width (default 4)
--rocksdb_universal_compaction_size_ratio (default 20)

默认情况下,压缩 运行 仅当至少有 4 个符合条件的文件并且它们的 运行ning 总数(到目前为止考虑的文件大小的总和)在下一个文件的 20% 以内时考虑到包含在同一个压实中。

  • YugabyteDB 还提供了一种方法来控制压缩过程在整个系统中允许占用多少系统资源。它会根据 CPU 的数量自动选择一些设置,但用户也可以根据可用的磁盘带宽明确地修改它。管理此设置的标志是:
--rocksdb_max_background_compactions (e.g, 4)
--rocksdb_compact_flush_rate_limit_bytes_per_sec (e.g., 268435456)
  • 除了对压缩进行节流控制外,YugabyteDB 还进行了各种内部优化,以最大限度地减少压缩对前台延迟的影响。其中之一是优先队列,优先考虑小型压缩而不是大型压缩,以确保任何 tablet 的 SSTable 文件数量保持尽可能低。

• 使用 yb-admin 工具,YugabyteDB 还允许在 table 上从外部触发手动压缩。这对于 table 不再有新数据进入系统,但由于 overwrites/deletes 已经发生或由于 TTL 到期用户想要回收磁盘 space 的情况很有用.