一、问题
研发反映执行事务时报超时退出。错误如下
[error="[tikv:8229]TTL manager has timed out, pessimistic locks may expire, please commit or rollback this transaction"]
二、分析
通过dashboard里面查询日志,搜索ttl manager has timed out 关键字,并结合研发给的时间点,找到超时的语句。在此事务报错日志里记住语句的报错时间戳 注意这个是其他事务的,也就是阻碍本次事务失败的早期执行且未结束的事务。
[timestamp=451785963642290189]
查看PD的地址
tiup cluster display tidb01
tiup ctl:v7.1.5 pd -u http://xx.xxx.xx.xx -i
输入下面信息,
» tso 451785963642290189 ###输入上面报错时间戳
system: 2024-08-12 09:38:00.154 +0800 CST ###这个是阻碍的事务开始的时间
logic: 13
查看txnstart的开始时间。注意在所有tidb节点执行。txnstart 列可以看到有事务开始时间和上面的相同,可以确定就是这个阻碍了后面失败的事务。
select id,host,db,command,time,info,txnstart from INFORMATION_SCHEMA.processlist where db=‘xxxx’;
使用下面语句可以,能快速查看整个集群上所有 tidb 节点中正在执行的事务信息,确定是哪个节点在执行长数据, INFORMATION_SCHEMA.cluster_tidb_trx ↓ 里的session_id就是会话ID
MySQL [(none)]> select INSTANCE,ID,START_TIME,CURRENT_SQL_DIGEST,STATE,WAITING_START_TIME,SESSION_ID,USER,DB from INFORMATION_SCHEMA.cluster_tidb_trx;
±--------------------±-------------------±---------------------------±-------------------±------±-------------------±--------------------±------±-------+
| INSTANCE | ID | START_TIME | CURRENT_SQL_DIGEST | STATE | WAITING_START_TIME | SESSION_ID | USER | DB |
±--------------------±-------------------±---------------------------±-------------------±------±-------------------±--------------------±------±-------+
| xxxxx:10080 | 451785963642290189 | 2024-08-12 09:38:00.154000 | NULL | Idle | NULL | 8569054866188681547 | nc_rw | NC_AMC |
| xxxxxx:10080 | 451815356656254987 | 2024-08-13 16:46:45.604000 | NULL | Idle | NULL | 4661821549632179135 | root | |
±--------------------±-------------------±---------------------------±-------------------±------±-------------------±--------------------±------±-------+
2 rows in set (0.003 sec)
三、解决
在上面的processlist里查看到id,或者 INFORMATION_SCHEMA.cluster_tidb_trx 里面的session_id,
进行kill xxxxxx




