【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.0
【复现路径】无
【遇到的问题:问题现象及影响】
近期发现tidb锁冲突特别严重,影响整个集群性能,但是硬件负载很低,不知道如何解决
【资源配置】
【附件:截图/日志/监控】
这个应该只能从代码逻辑上去优化吧。数据库无能为力。
我想知道,冲突具体是由于哪个对象造成的,怎么排查,我查看tidb server节点日志的时候发现,当延迟增加的时候,日志报tikv相应慢,但是kv节点日志级别是error,并没有任何报错,现在我跟研发反馈这个问题,研发反馈没有任何造成锁冲突的可能性
那你要根据tikv的锁日志去判断了,里面会有具体的数据行,找到对应冲突,跟开发battle,
大部分的锁都是业务设计不合理导致。
还是得在业务设计侧去避免发生锁竞争,官方文档有锁排查的流程,可以参考下
我先在线把kv的日志级别开到info级别,然后再找冲突的行
检查下TIDB-server日志 看看是否存在9007([kv:9007]Write conflict),这个能够证明 是写写冲突的
1277这个表,一个tidb server的日志,一天大概有几千次的Write conflict,之前反馈给研发,研发反馈需要具体的语句,或者具体的行
INFORMATION_SCHEMA.CLUSTER_TIDB_TRX 这张表可以看锁信息,但是只能看正在执行的锁
只要stat字段是LockWaiting的都存在写写冲突吗
打开资源定位的功能,设定慢于多少秒的都是 slow query,这样子 SQL 会被记录下来,然后你可以慢慢看
如果存在 lock waiting,肯定是 耗时比较长的那种了
https://docs.pingcap.com/zh/tidb/stable/identify-expensive-queries
锁处理相关的参考文档:
https://docs.pingcap.com/zh/tidb/stable/troubleshoot-lock-conflicts#处理悲观锁冲突问题
好的,我试一下,谢谢
我们也有类似问题。请问具体的语句或具体的行,时间怎么找出来呢?
可以参考上面兄弟的操作