数据库锁表导致连接池满问题
1.查看被锁表
并发时,操作了同一笔数据,导致锁表。在业务层面添加并发锁,避免这种情况。
show full processlist
2.查看被锁的表
show OPEN TABLES where In_use > 0;
3.杀死被锁进程
kill 4361901
4.为什么会出现锁表问题,怎么预防
业务场景:在合同签发流程中,业务流程比较长包含 参数校验,调用第三方合同签发,调用上传阿里OSS,重写PDF,调用回调通知业务方,保存相关业务数据,所有的业务操作都在同一个事务处理中。
这里任何一个环节出现hold住的情况都有可能导致连接不释放的问题,特别是调用第三方服务时。
处理:事务尽可能的短,事务只做单纯的数据库存储,修改逻辑,调用第三方及其他业务放在事务外处理。