# [Known Issues] 关于集群删除数据后，空 Region 增多几乎不合并的问题

## Key Words

Empty Region, 空 Region 不回收, truncate table, drop table, drop partition

## Issue

在集群做 truncate table/partition后，发现 empty-region 大量增多，且几乎不会下降。

![emty-region](/images/PD/emty-region.png)

## Root Cause

正常的情况下空 region 是会由 PD 的 merge-region operator 触发缓慢合并的。

由于 TiKV 是通过异步的心跳与 PD 进行通信的，当前负载下 PD 心跳的处理存在瓶颈。 

导致所有调度都比较慢，在 merge-region 上的表现为， TiKV 通过心跳接收到 merge-region 后， 很快的执行完毕，但汇报到 PD 的时间会比较长。 整体就导致了 Region 元信息出现了问题。

## Diagnostic Steps

1. 通过 PD 监控发现 Merge Region 的调度异常缓慢
![emty-region1](/images/PD/emty-region1.png)
2. 通过查看 TiKV 日志，发现 Merge Region 的速度正常
3. 通过 PD operator 监控发现， PD 的心跳时常达到了 1s.
![emty-region2](/images/PD/emty-region2.png)
4. 查看 PD heartbeat 监控，update_cache event 达到了 3k. 凭经验，在当前版本此为达到瓶颈的值。
![emty-region3](/images/PD/emty-region3.png)

## Resolution

Upgrade TiDB to 5.1 

## Workaround

1. 调节 PD 参数，trace-region-flow: false。 此参数将关闭集群火焰图的抓取来缓解心跳瓶颈。 上图最后的 QPS 降低就是调整此参数的效果。调整后可以看到 99 Region heartbeat latency 也降低至毫秒级了。

2. 调节一下参数以加快 Region Merge 调度速度。

    1. 记录集群当前的调度配置

        ```shell 
        tiup ctl pd:v4.0.x config show
        ```

    2. 调整配置参数

        ```shell
        tiup ctl pd:v4.0.x config set (see also: [PD Control User Guide | PingCAP Docs](https://docs.pingcap.com/tidb/stable/pd-control##config-show--set-option-value--placement-rules))
        ```

        ```shell
        max-merge-region-size 1 max-merge-region-keys 10000 patrol-region-interval 10ms merge-schedule-limit 32
        ```

调整结果：

![know-issue-pd-emptry-region-no-merge](/images/PD/know-issue-pd-emptry-region-no-merge.png)

> **注意**
>  
> 待 empty region 数量稳定后，恢复第二步的调度参数。