一.问题描述 在做查询语句时,MySQL 抛出了这样的异常:锁等待超时 Lock wait timeout exceeded; try restarting transaction,是当前事务在等待其它事务释放锁资源造成的! 二.解决方案 1.数据库中执行如下sql,查看当前数据库的线程情况: show full PROCESSLIST 2.INNODB_TRX 表的 trx_mysql_thread_id  字段对应 show full processlist 中的Id):       如果在…
工作中处理定时任务分发消息时出现的问题,在查找并解决问题的时候,将相关的问题博客收集整理,在此记录下,以便之后再遇到相同的问题,方便查阅. 问题场景 问题出现的场景: 在消息队列处理消息时,同一事务内先后对同一条数据进行了插入和更新操作; 多台服务器操作同一数据库: 瞬时出现高并发现象: 导致数据更新或新增后数据经常自动回滚:表操作总报 Lock wait timeout exceeded 并长时间无反应 问题剖析 原因分析 MySql Lock wait timeout exceeded 这个…
背景 最近在做一个订单的钉钉审批功能,钉钉审批通过之后,订单更新审核状态,然后添加一条付款,并且更新付款状态: // 订单审批通过 @Transactional(rollbackFor = Exception.class) public void orderPass() { // 更新订单审核状态 updateOrderAuditStatus(id); // 添加入库 addPutInStorage(id); // 更新订单入库状态 updateOrderStorageStatus(id); }…
本文为博主原创: 以下为在程序运行过程中报的错误, org.springframework.dao.CannotAcquireLockException: ### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction### The error…
有两种设置方法 第一种在mysql的配置文件中加入,然后重启mysql innodb_lock_wait_timeout = 500 第二种直接执行如下命令 set global innodb_lock_wait_timeout=500; 然后重启mycat和后台微服务,然后观察是否还有这个报错 如果怀疑,MYSQL出现死锁,首先查询information_schema.innodb_trx表,查看哪些mysql查询线程ID导致的,但是我查了没有一直存在的死锁线程,一般都是锁几秒就消失了 如下是…
昨晚添加完索引之后, 查询整表的时候抛出Lock wait timeout exceeded; try restarting transaction, 吓死小白的我, 为什么条件查询可以, 整表查不了, 老大说是不是我添加错了..., 后来找到解决办法, 原来是死锁了 查看数据库的隔离级别 select @@tx_isolation; 查mysql当前库进程(是否有wait之类的线程, 直接kill) show full processlist 对比线程中的情况,查看里面是否有正在锁定的事务线程…
前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: 在InnoDB Plugin之前,一般通过show full processlist(很难发现被锁的行记录问题所在)和show engine innodb status命令查看当前的数据库请求,然后再判断当前事务中锁的情况.随着mysql的发展,已经提供更加便捷的方法来监控数据库中的锁等待现象了.…
现场环境客户要求删数据(界面没法直接操作),于是直接在数据库进行查询删除了,删完发现界面依然能查到删除后的数据,又用sql语句进行删除,发现报了错:Lock wait timeout exceeded; try restarting transaction(锁等待超时).上网查了一波发现是删除后没有提交事务造成的(当前事务在等待其它事务释放锁资源造成的).所以在此纪录下解决方法: 方法一:在mysql查询中执行以下指令 select * from information_schema.innod…
OMG写的时候崩溃了一次. 触发关注这个问题的事情是 我们在使用pt-online-schedule 改表的时候总是拿不到锁,并且报出mysql innodb Lock wait timeout exceeded; try restarting transaction的问题,所以才想到要排查. 首先最先想到的肯定是 show processlist; 来查看当前正在运行的查询 或者等待休眠中的查询是哪些,包括使用了多少时间等,类似 . row **************************…
前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: 在InnoDB Plugin之前,一般通过show full processlist(很难发现被锁的行记录问题所在)和show engine innodb status命令查看当前的数据库请求,然后再判断当前事务中锁的情况.随着mysql的发展,已经提供更加便捷的方法来监控数据库中的锁等待现象了.…