悲观锁ttl时间是多久呢

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

2PC事务过程,对于primary row 如果 prewrite之后一直没有二阶段的commit,在ttl过期前一直是被锁的,会一直阻塞其他的事务?

如果是悲观锁的话,需要结合日志查看

如果当时prewrite的节点活着,确实事务太大的话,会一直执行txn_heartbeat延长ttl的。有个check_txn_status,如果这个锁超期了(说明最开始执行prewrite的节点挂了),这个锁就会被其他节点清理掉。

2 个赞
  • 通过 innodb_lock_wait_timeout 变量,设置事务等锁的超时时间(默认值为 50,单位为秒)。等锁超时后返回兼容 MySQL 的错误码 1205。如果多个事务同时等待同一个锁释放,会大致按照事务 start ts 顺序获取锁。

50s的时间感觉很长啊。如果prewrite的节点挂了,一直没有commit。那需要等50s过期后,锁被清理,其他事务才能执行。

需要看看日志