txnLockFast 开发升级jdk17后出现select也被锁住的情况 请问怎么排查

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】
txnLockFast

id task estRows operator info actRows execution info memory disk
Limit_10 root 1 offset:0, count:1 1 time:19.3s, loops:2 N/A N/A
└─TableReader_17 root 1 data:Limit_16 1 time:19.3s, loops:1, cop_task: {num: 2, max: 8.2ms, min: 1.86ms, avg: 5.03ms, p95: 8.2ms, max_proc_keys: 1, p95_proc_keys: 1, tot_proc: 2ms, rpc_num: 20, rpc_time: 30.8ms, copr_cache_hit_ratio: 0.00}, ResolveLock:{num_rpc:18, total_time:411.6ms}, backoff{txnLockFast: 18.9s} 656 Bytes N/A
└─Limit_16 cop[tikv] 1 offset:0, count:1 1 tikv_task:{proc max:1ms, min:1ms, p80:1ms, p95:1ms, iters:2, tasks:2}, scan_detail: {total_process_keys: 1, total_process_keys_size: 213, total_keys: 4, rocksdb: {delete_skipped_count: 3, key_skipped_count: 7, block: {cache_hit_count: 1, read_count: 19, read_byte: 396.2 KB}}} N/A N/A
└─TableFullScan_15 cop[tikv] 1 table:ex_trade, keep order:true, desc 1 tikv_task:{proc max:1ms, min:1ms, p80:1ms, p95:1ms, iters:2, tasks:2} N/A

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

这是问的啥? 没看懂 :joy:

什么情况下select 查询会被update操作堵住

相同的 select * from aa for update 的操作,并发执行,或者连续执行,上次没释放就会出现锁

或者 select * from aa for update 和 insert into , update 等语句同时出现也会有这种情况

你update的prewrite时间太长了吧?减少下事务,另外是不是用的RR隔离级别啊?能否换成悲观+RC来减少读写冲突?

  1. txnLockFast 表示集群中存在读写冲突
  2. 可以读下 https://docs.pingcap.com/zh/tidb/stable/troubleshoot-lock-conflicts#读写冲突
  3. 不过读写冲突在较少量级的情况下,tidb 内部视为正常,可以 kv backoff ops 检查下
  4. 如果想直接反找哪 2 个事务发生的冲突,可以想办法(比如,加大压力),直接使后面的事务崩溃,日志里会暴露出 2 个 txn 的 start-ts,这样就能分析业务模型,为什么发生读写冲突;
  5. 或者,可以尝试开 debug log 分析,不过这条是我猜的,感觉应该会打。

tidb的读写冲突还是很难排查的。官方文档也不好

确实存在这个问题, :+1:

不看本问题,展开讲:
我觉得 原因可能是 tidb 内部有重试,在未达到一定量级的 backoff 时,产品不把这种行为定义为问题(所以只在 txn 崩溃时才会有更多信息,等…);
我觉得 如果想要产品修复,可以在这个问题解决后,把你觉得应该在哪个位置展现什么样的报错,在 github 提个 proposal,社区还是开放的。并且这确实是个比较头疼的问题,PingCAP 应该很乐意采纳;(但干抱怨难查,不给出有建设性的意见,就算研发们做了些修复也不一定是针对你这个问题的修复)

PS : 仅个人意见

看本问题:
其实,TxnLockFast 还是有办法追的,比如上面的事务崩溃后,反查 2 txn 的 start-ts。或者 poc 环境也可以开启 general-log case by case 分析。

官方文档没说的很详细 悲观事务可以查 不过瞬间消失。挺难的 乐观事务有大佬说说怎么查吗