# Region Merge 速度慢 - 解决方案

![left](./student-guide/diagram/25-region-merge-solution-01-01.png)

-------------------------------------------------------------

可能原因及解决方案
集群中出现空 Region 时，一般情况下都伴随集群中大量的删除数据的现象，比如 Drop，Truncate Table，以及 Delete 等。

- 调整 Region Merge Schedue Limit 
Region Merge 速度慢也很有可能是受到 limit 限制（Region Merge 同时受限于 merge-schedule-limit 及 region-schedule-limit），或者是与其他调度器产生了竞争，处理方法不再赘述。

- 调整 max-merge-region-size 、max-merge-region-keys 及 patrol-region-interval
假如我们已经从统计得知系统中有大量的空 Region，这时可以通过把 max-merge-region-size 和 max-merge-region-keys 调整为较小值来加快 Merge 速度。这是因为 Merge 的过程涉及到副本迁移，于是 Merge 的 Region 越小，速度就越快。如果 Merge Operator 生成的速度已经有几百 opm，想进一步加快，还可以把  patrol-region-interval  调整为 "10ms" ，这个能加快巡检 Region 的速度，但是会消耗更多的 CPU。

集群中出现大量空 Region，但是无法合并，还有一种特殊情况：曾经创建过大量 Table 然后又清空了（Truncate 操作也算创建 Table），此时如果开启了 split table 特性，这些空 Region 是无法合并的，此时需要调整以下参数关闭这个特性：
- TiKV
  - 将 split-region-on-table 设为 false，该参数不支持动态修改。
- PD
  - key-type 设为 txn 或者 raw，该参数支持动态修改
  - key-type 保持 table，同时设置 enable-cross-table-merge 为 true，该参数支持动态修改
- 通常情况下，如果集群的构建模式是 TiDB（PD+TiDB+TiKV），那么 key-type 建议设置为 table，并且配合 enable cross table 参数一起使用。如果是 RawKV 模式（只有 PD+TiKV）那么可根据使用的 rawapi 和 txnapi来选择 key-type 参数的值。
- 在开启 placement-rules后，请合理切换 txn和 raw，避免无法正常解码 key。

