1

支持哪些类型的压缩(例如,大小层/级别压缩)?哪些参数控制压实的行为?

4

1 回答 1

2

YugabyteDB 压缩概述:

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

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

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

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

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

• 使用 yb-admin 工具,YugabyteDB 还允许在表上从外部触发手动压缩。这对于新数据不再进入系统的表的情况很有用,但由于已经发生的覆盖/删除或由于 TTL 到期,用户希望回收磁盘空间。

于 2019-11-15T01:52:50.813 回答