写点什么

一次 meet_lock 告警异常处理过程

  • 2022 年 7 月 11 日
  • 本文字数:2051 字

    阅读完需:约 7 分钟

作者: dba_gc 原文来源:https://tidb.net/blog/52b39abc


1. TiKV-Detail>Coprocessor Overview



或者通过 Prometheus 获取指标数据


sum(rate(tikv_coprocessor_request_error[10m])) by (reason)


2. TiDB>KV Errors



指标解释:


  • regionMiss:Region 缺失

  • txnLock:代表出现了写冲突

  • tikvLockFast:代表出现了读写冲突


通过监控可以看到写冲突并不高,而且也没有读写冲突。那么为什么会 meet_lock 指标会这么高?下面我们再通过 TiDB 日志分析一下。


3. TiDB 日志分析


通过关键字 ”prewrite encounters lock” 过滤预写阶段遇到的锁冲突的 tableID:


grep “prewrite encounters lock” tidb.log |awk -F “tableID” ‘{print 2}’ | awk -F “,” ‘{print 1}’ | sort | uniq -c > pe.log


通过关键字 ”Write conflict 过滤写冲突的 tableID:


grep “Write conflict” tidb.log |awk -F “tableID” ‘{print 2}’ | awk -F “,” ‘{print 1}’ | sort | uniq -c > wc.log


cat wc.log


1 =24289


86 =24900


5 =25849


3 =27930


86 表示冲突次数,24900 表示 tableID。


但量过滤出来的冲突次数也不多,说明锁冲突的原因不在这里,下面查找 TiKV 日志。


4 TiKV 日志分析


[2021/06/23 14:59:24.085 +08:00] [WARN] [endpoint.rs:537] [error-response] [err=“Key is locked (will clean up) primary_lock: 7480000000000073E15F728000000000201B3C lock_version: 425834987480679159 key: 7480000000000073E15F728000000000201B3C lock_ttl: 20631 txn_size: 10 lock_for_update_ts: 425834987480679159”]


[2021/06/23 14:59:24.085 +08:00] [WARN] [endpoint.rs:537] [error-response] [err=“Key is locked (will clean up) primary_lock: 7480000000000073E15F728000000000186E7D lock_version: 425834987454465021 key: 7480000000000073E15F72800000000104676B lock_ttl: 21177 txn_size: 28 lock_for_update_ts: 425834987454465021”]


[2021/06/23 14:59:24.088 +08:00] [WARN] [endpoint.rs:537] [error-response] [err=“Key is locked (will clean up) primary_lock: 7480000000000073E15F728000000000186E7D lock_version: 425834987454465021 key: 7480000000000073E15F72800000000104676F lock_ttl: 21177 txn_size: 28 lock_for_update_ts: 425834987454465021”]


[2021/06/23 14:59:24.089 +08:00] [WARN] [endpoint.rs:537] [error-response] [err=“Key is locked (will clean up) primary_lock: 7480000000000037A95F698000000000000001013036363634366239FF6661636532623036FF3635353738613837FF3139333964313330FF0000000000000000F7 lock_version: 425834986536960179 key: 7480000000000037A95F698000000000000004013735333464366666FF3166313439373739FF3365366431333531FF3835363861386464FF0000000000000000F7038000000065F421CC lock_ttl: 5380 txn_size: 2 lock_type: Del lock_for_update_ts: 425834986536960179”]


TiKV 日志当中有很多 Key is locked (will clean up),这段报错信息表示出现了读写冲突,当读数据时发现 key 有锁阻碍读,这个锁包括未提交的乐观锁和未提交的 prewrite 后的悲观锁。


  • primary_lock:锁对应事务的 primary lock。

  • lock_version:锁对应事务的 start_ts。

  • key:表示被锁的 key。

  • lock_ttl: 锁的 TTL。

  • txn_size:锁所在事务在其 Region 的 key 数量,指导清锁方式。


下面过滤出出现次数最多的 primary_lock


cat tikv.log |grep error-response | awk -F “primary_lock:” ‘{print 2}’ | awk -F “ ” ‘{print 1}’ | sort | uniq -c | sort -n



通过 region key 命令找到 region


tiup ctl pd -u http://{pdip:port} -i


region key 7480000000000073E15F728000000000415EDF



然后通过 region 查找表结果显示 not found


curl http://{tidbip}:10080/regions/1412629


region not found for regionID 1412629


查看一下 region 元数据信息,显示这是个空 region


SELECT * FROM INFORMATION_SCHEMA.TIKV_REGION_STATUS WHERE region_id=1412629


通过监控面板发现集群有 1700+empty-region-count,下面合并空 region 看看能不能解决锁冲突异常监控数据。


tiup ctl pd -u http://{pdip:port} -i


config set max-merge-region-keys 10


config set max-merge-region-size 100


config set merge-schedule-limit 16


config set region-schedule-limit 4


config set key-type raw


合并完记得修改回来


config set max-merge-region-keys 200000


config set max-merge-region-size 20


config set merge-schedule-limit 16


config set region-schedule-limit 4


config set key-type table


结果:


大概 2 小时左右空 region 合并完,最后还有 50 个左右无法合并。


锁冲突信息明显降低,说明有效果。 具体为什么空 region 会导致锁冲突还不知道。


如果还有很多锁冲突,可以通过 tidb 和 tikv 日志继续排查。


或者通过慢查询日志过滤:Exec_retry_count 表示重试次数


grep Exec_retry_count /data/tidb_data/log/tidb_slow_query.log



发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
一次 meet_lock 告警异常处理过程_实践案例_TiDB 社区干货传送门_InfoQ写作社区