# [Critical bug] 关于 PD Leader 切换或重启 PD 可能导致 SQL 执行持续报错

## Issue

在对 PD 进行 Transfer Leader 或重启操作后，集群出现 SQL 执行持续报错的现象。

6.2.0 测试中发现了该问题：[https://github.com/tikv/tikv/issues/12934](https://github.com/tikv/tikv/issues/12934)

受到该 bug 影响的版本：v5.3.2, v5.4.2

相关 ONCALL：

宝尊电商：[https://internal.pingcap.net/jira/browse/ONCALL-5219](https://internal.pingcap.net/jira/browse/ONCALL-5219)

中通快递：[https://internal.pingcap.net/jira/browse/ONCALL-5275](https://internal.pingcap.net/jira/browse/ONCALL-5275)

Flipkart：[https://internal.pingcap.net/jira/browse/ONCALL-5275](https://internal.pingcap.net/jira/browse/ONCALL-5309)

## Root Cause

TiKV 中的问题代码导致在发送 Region Heartbeat 时，如果碰到 Error（如 not leader）就会直接退出，不重新建立 Heartbeat Stream。导致 TiKV 无法向 PD 继续发送 Region Heartbeat，PD 亦无法向 TiKV 发送调度。PD 中相关 Region 的信息会逐步过旧，TiDB 无法获取最新的 Region 信息导致 SQL 执行出错。

详细调查报告：[https://pingcap.feishu.cn/docx/doxcn8MJOxq2W05lOv5J71yrzqh](https://pingcap.feishu.cn/docx/doxcn8MJOxq2W05lOv5J71yrzqh)

## Diagnostic Steps

1. TiDB 监控观察到 SQL 执行持续报错，报错为 Region Unavailable / Region Epoch not match 等

2. TiKV 监控中 TiKV Details - PD - PD heartbeats 中观察到持续快速上涨的 pending

![critical-bug-tikv-pd-heartbeat-abnormal.png](/images/TiKV//critical-bug-tikv-pd-heartbeat-abnormal.png)

## Resolution

升级 TiKV 至修复了该 Bug 的版本。

Bug Fix PR: [https://github.com/tikv/tikv/pull/13094](https://github.com/tikv/tikv/pull/13094)

预期修复版本：v5.3.3, v5.4.3

针对 v5.4.2 已有 Hotfix，可直接使用：[https://pingcap.feishu.cn/docs/doccneKA5sdLRWoUeRj1ruNBETo](https://pingcap.feishu.cn/docs/doccneKA5sdLRWoUeRj1ruNBETo)

## Workaround

重启出现 Region Heartbeat Pending 的 TiKV 直至不再有 Pending 的 Region Heartbeat 为止。
