# 后台维护任务

原文链接 : [http://kudu.apache.org/docs/background_tasks.html](http://kudu.apache.org/docs/background_tasks.html)

译文链接 : [http://cwiki.apachecn.org/pages/viewpage.action?pageId=10813641](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10813641)

贡献者 : [小瑶](/display/~chenyao) [ApacheCN](/display/~apachecn) [Apache中文网](/display/~apachechina)

## Apache Kudu 后台维护任务

**Kudu** 依赖于许多重要的自动维护活动运行后台任务。这些任务包括将数据从内存刷新到磁盘，压缩数据以提高性能，释放磁盘空间等。

## Maintenance manager ( 维护管理 )

**maintenance manager** 安排并运行后台任务。在任何给定的时间点，**maintenance manager** 根据当时所需的改进来确定下一个任务的优先级，例如减轻内存压力，提高读取性能或释放磁盘空间。通过设置 **--maintenance_manager_num_thread**s 可以控制专用于运行后台任务的工作线程数。

## Flushing data to disk ( 将数据刷新到磁盘 )

从内存到磁盘 **flush** 数据可以缓解内存压力，并可通过从 **MemRowSet** 中的写入优化的面向行的内存中格式切换到磁盘上读取优化的以列为单位的格式来提高读取性能。刷新数据的后台任务包括 **FlushMRSOp** 和 **FlushDeltaMemStoresOp** 。

与这些操作相关联的 **metrics** 分别具有前缀 **flush_mrs** 和 **flush_dms** 。

## Compacting on-disk data ( 压缩磁盘数据 )

**Kudu** 不断执行几种类型的压缩任务，以便在一段时间内保持一致的读写性能。将多个 **DiskRowSets** 组合到一个 **DiskRowSet** 中的合并压缩由 **CompactRowSetsOp** 运行。还可以运行两种类型的 **delta** 存储压缩操作：**MinorDeltaCompactionOp** 和 **MajorDeltaCompactionOp** 。

有关这些不同类型的压实操作的更多信息，请参阅 [**Kudu Tablet** 设计文档](https://github.com/apache/kudu/blob/master/docs/design-docs/tablet.md)。

## Write-ahead log GC ( 预写日志 GC )

**Kudu** 每个 **tablet** 维护一个预先记录日志（ **WAL** ），分为固定大小的分段。当活动段达到配置大小（由 **--log_segment_size_mb** 控制）时，**tablet** 会定期将 **WAL** 滚动到新的日志段。为了节省磁盘空间并减少启动时间，称为 **LogGCOp** 的后台任务尝试通过从本地节点不再需要它们的持久性而将其从磁盘中删除，从而对其进行垃圾收集（ **GC** ）旧的 **WAL** 段。

与此后台任务相关联的 **metrics  **具有前缀 **log_gc** 。

## Tablet history GC and the ancient history mark ( tablet 历史GC和古代历史记号 )

因为 **Kudu** 使用多重并发控制（ **MVCC** ）机制来确保快照扫描可以从新的更改隔离到一个表中，所以定期对旧的历史数据进行垃圾回收（删除）以释放磁盘空间。虽然 **Kudu** 不会删除在最新版本的数据中可见的行或数据，但 **Kudu** 会删除不再可见的旧更改的记录。

历史上的 **MVCC** 数据变得无法访问并被自由删除的时间点被称为古代历史记录（ **AHM** ）。可以通过设置 **--tablet_history_max_age_sec** 来配置 **AHM** 。

有两个后台任务，**GC** 历史 **MVCC** 数据早于 **AHM** ：运行合并压缩（称为 **CompactRowSetsOp** （见上））的后台任务，以及一个单独的后台任务，可以删除旧的撤消增量块，称为 **UndoDeltaBlockGCOp** 。运行 **UndoDeltaBlockGCOp** 可减少所有工作负载中的磁盘空间使用情况，特别是在更新或升级版本较高的系统中。

与此后台任务相关联的 **metrics **具有前缀 **undo_delta_block** 。