最近在生产环境中查看慢sql日志发现更新执行表act_ru_execution执行时间很长,后面对该语句加了索引后虽然有改善,但依旧执行时间较长,后面发现一直报这个:process 3590960 still waiting for ShareLock on transaction 20357 after 1000 ,这里提到的是一个进程(process 3590960)正在等待获取一个共享锁(ShareLock)在一个特定的事务(transaction 20357)上,并且已经等待了一段时间(超过1000毫秒,可能是配置的超时时间)。
同时还发新另外一个日志:Process holding the lock: 3378124. Wait queue: 3376671:这条信息提供了更具体的细节,说明当前持有锁的进程ID是3378124,而等待队列中有至少一个进程(3376671)正在等待获取锁。
后面经过排查,发现是在任务监听中用了同步的 http请求超时导致的,应该是超时后导致事务被锁,进而出现慢的问题。