Region is unavailable

【 TiDB 使用环境】生产环境 /测试/ Poc
生产环境
【 TiDB 版本】v5.4.2
【遇到的问题】
使用dm从上游mysql 同步到tidb,突然昨天同步延迟增加,

看tidb cluster_processlist进程,发现一堆的写入操作堆积
REPLACE INTO weplayzy.dd_recommend_new (

看tidb 日志提示 Region is unavailable

[2022/11/02 15:29:58.257 +08:00] [WARN] [backoff.go:152] ["regionMiss backoffer.maxSleep 40000ms is exceeded, errors:\nepoch_not_match:<>  at 2022-11-02T15:29:56.63521457+08:00\nepoch_not_match:<>  at 2022-11-02T15:29:57.528003335+08:00\nepoch_not_match:<>  at 2022-11-02T15:29:58.257138997+08:00"]
[2022/11/02 15:29:58.257 +08:00] [WARN] [session.go:1719] ["run statement failed"] [conn=5429] [schemaVersion=423853] [error="[tikv:9005]Region is unavailable"] [session="{\n  \"currDBName\": \"\",\n  \"id\": 5429,\n  \"status\": 3,\n  \"strictMode\": false,\n  \"txn\": \"437092125073735682\",\n  \"user\": {\n    \"Username\": \"tidb_user\",\n    \"Hostname\": \"10.0.8.183\",\n    \"CurrentUser\": false,\n    \"AuthUsername\": \"tidb_user\",\n    \"AuthHostname\": \"%\"\n  }\n}"]
[2022/11/02 15:29:58.257 +08:00] [INFO] [conn.go:1117] ["command dispatched failed"] [conn=5429] [connInfo="id:5429, addr:10.0.8.183:30432 status:11, collation:utf8mb4_general_ci, user:tidb_user"] [command=Query] [status="inTxn:1, autocommit:1"] [sql="REPLACE INTO `weplayzy`.`dd_recommend_new` (`id`,`god_uid`,`category_id`,`online_score`,`order_score`,`time_score`,`pay_score`,`gift_score`,`price_score`,`game_price_score`,`fun_price_score`,`single_score`,`expired_score`,`speech_score`,`createtime_score`,`star_score`,`god_click_score`,`chat_num_score`,`chat_rate_score`,`room_click_score`,`room_enter_pay_score`,`order_all_score`,`score`,`score_rank`,`final_rank`,`nickname`,`update_time`) VALUES (12714,15082961,56,0,0,0,0,0,0.5599651414767486,0.5599651414767486,0,0,0,0,0.7223192902226421,0,0,0,0,0,0,0,0,3144,3144,_binary'兔啊兔',_binary'2022-11-01 14:00:48')"] [txn_mode=OPTIMISTIC] [err="[tikv:9005]Region is unavailable"]

此时查询 weplayzy.dd_recommend_new 卡住
select * from weplayzy.dd_recommend_new limit 10;

请问是 weplayzy.dd_recommend_new 数据所在的Region unavailable ? 这种情况如何处理

是不是旧的 region 被分裂成两个新的了? 观察下看看先

同步延迟 从昨天下午到现在 已经持续 24小时了。 region分裂这么慢么

dd_recommend_new 发现都在个region 里面。 如果是region分裂期间,对这个表的查询都会卡住?

哪不太正常了,region 分裂和调度很快的(最多一次失败 会触发backoff,分裂和调度完成之后就 ok )

建议检查下,tikv 各个节点的状态,以及相关region 的健康度 和 副本数量

客户端报 Region is Unavailable 错误

  • 1.1.1 Region is Unavailable 一般是由于 Region 在一段时间不可用(可能会遇到 TiKV server is busy;或者发送给 TiKV 的请求由于 not leader 或者 epoch not match 等原因被打回;又或者请求 TiKV 超时等),TiDB 内部会进行 backoff 重试。backoff 的时间超过一定阈值(默认 20s)后就会报错给客户端。如果 backoff 在阈值内,客户端对该错误无感知。
  • 1.1.2 多台 TiKV 同时内存不足 (OOM),导致 Region OOM 期间内没有 Leader,见案例 case-991
  • 1.1.3 TiKV 报 TiKV server is busy 错误,超过 backoff 时间,参考 4.3 客户端报 server is busy 错误TiKV server is busy 属于内部流控机制,后续可能不计入 backoff 时间。
  • 1.1.4 多台 TiKV 启动不了,导致 Region 没有 Leader。单台物理主机部署多个 TiKV 实例,一个物理机挂掉,由于 label 配置错误导致 Region 没有 Leader,见案例 case-228
  • 1.1.5 follower apply 落后,成为 Leader 之后把收到的请求以 epoch not match 理由打回,见案例 case-958(TiKV 内部需要优化该机制)。

大佬有没具体解决方法

上游数据变更量有变化吗

这个表的数据量没大变化。问题是这个Region unavailable 导致 replace dd_recommend_new 很慢(单条执行将近1分钟),不知如何处理

这种比较内部的机制 不太好人工介入, 你看下问题时间段的tikv情况 是否繁忙

tikv 没啥负载,可以修改表的region 么

可以手工split region
https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region#语法图

或针对某个region pd-ctl operator add split-region <region_id> --policy=approximate

多谢,重启tidb集群 重新dm同步,解决了。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。