环境
mysql8, gradle5.6, flyway6.1, spring boot 5.1.9
执行 gradle moduleName:test
然后开启三个线程跑测试,则报错,内容如下。如单独执行这个测试,则不会报错
Request processing failed; nested exception is org.springframework.dao.CannotAcquireLockException: xxxMapper.insert (batch index #1) failed. Cause: java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
; Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
链接: https://pan.baidu.com/s/1ViFd... 提取码: m1gx 复制这段内容后打开百度网盘手机App,操作更方便哦
百度云盘这里面有数据库的一些查询结果。
疑问点是同一个ENGINE_TRANSACTION_ID 怎么生成了新的EVENT_ID,并且也没找到这个EVENT_ID的详细信息,他为什么一直不释放?
不可以直接转为付费问答吗?这个功能怎么不实现呢?
问题已解决
通过查看mysql的一些performanceSchema最终找到了答案。我的业务是主从表在一个事务中创建。这个表创建了外键,有外键检查,主表的插入是sleep,从表是waiting。最终导致了超时。将外键去掉解决了。
深层次的为啥正式环境不报错,为啥单独跑这个文件也不报错。就gradle test报错,还没有得到答案。