ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

原创 2014年07月31日 10:59:43

前言:朋友咨询我说执行简单的update语句失效,症状如下:
mysql> update order_info  set province_id=15  ,city_id= 1667  where order_from=10 and order_out_sn='1407261241xxxx';
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> 

QQ远程过去,开始check
1,查看数据库的隔离级别:

mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)

mysql> 

 
2,去查看先当前库的线程情况:

mysql> show full processlist;

+----------+-----------------+-------------------+-----------------+-------------+---------+-------------------------+-----------------------+

| Id       | User            | Host              | db              | Command     | Time    | State                   | Info                  |

+----------+-----------------+-------------------+-----------------+-------------+---------+-------------------------+-----------------------+

|        1 | event_scheduler | localhost         | NULL            | Daemon      | 9635385 | Waiting on empty queue  | NULL                  |

|  9930577 | business_web    | 192.168.1.21:45503 | business_db     | Sleep       |     153 |                         | NULL                  |

|  9945825 | business_web    | 192.168.1.25:49518 | business_db     | Sleep       |      43 |                         | NULL                  |

|  9946322 | business_web    | 192.168.1.23:44721 | business_db     | Sleep       |     153 |                         | NULL                  |

|  9960167 | business_web    | 192.168.3.28:2409  | business_db     | Sleep       |      93 |                         | NULL                  |

|  9964484 | business_web    | 192.168.1.21:24280 | business_db     | Sleep       |       7 |                         | NULL                  |

|  9972499 | business_web    | 192.168.3.28:35752 | business_db     | Sleep       |      13 |                         | NULL                  |

| 10000117 | business_web    | 192.168.3.28:9149  | business_db     | Sleep       |       6 |                         | NULL                  |

| 10002523 | business_web    | 192.168.3.29:42872 | business_db     | Sleep       |       6 |                         | NULL                  |

| 10007545 | business_web    | 192.168.1.21:51379 | business_db     | Sleep       |     155 |                         | NULL                  |
......

+----------+-----------------+-------------------+-----------------+-------------+---------+-------------------------+-----------------------+

 

没有看到正在执行的慢SQL记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。

 

mysql> SELECT * FROM information_schema.INNODB_TRX\G;

*************************** 1. row ***************************

                    trx_id: 20866

                 trx_state: LOCK WAIT

               trx_started: 2014-07-31 10:42:35

     trx_requested_lock_id: 20866:617:3:3

          trx_wait_started: 2014-07-30 10:42:35

                trx_weight: 2

       trx_mysql_thread_id: 9930577

                 trx_query: delete from dltask where id=1

       trx_operation_state: starting index read

         trx_tables_in_use: 1

         trx_tables_locked: 1

          trx_lock_structs: 2

     trx_lock_memory_bytes: 376

           trx_rows_locked: 1

         trx_rows_modified: 0

   trx_concurrency_tickets: 0

       trx_isolation_level: READ COMMITTED

         trx_unique_checks: 1

    trx_foreign_key_checks: 1

trx_last_foreign_key_error: NULL

 trx_adaptive_hash_latched: 0

 trx_adaptive_hash_timeout: 10000

          trx_is_read_only: 0

trx_autocommit_non_locking: 0

 

3,看到有这条9930577的sql,kill掉,执行kill 9930577;

mysql> kill 9930577;

Query OK, 0 rows affected (0.00 sec)

 

mysql>

 

然后再去查询INNODB_TRX表,就没有阻塞的事务sleep线程存在了,如下所示:

mysql> SELECT * FROM INNODB_TRX\G;

Empty set (0.00 sec)

 

ERROR:

No query specified

 

mysql>

再去执行update语句,就能正常执行了,如下所示:

mysql> update order_info  set province_id=15  ,city_id= 1667  where order_from=10 and order_out_sn='1407261241xxxx';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

 

mysql>

4,总结分析
表数据量也不大,按照普通的情况来说,简单的update应该不会造成阻塞的,mysql都是autocommit,不会出现update卡住的情况,去查看下autocommit的值。
mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            0 |
+--------------+
1 row in set (0.00 sec)


mysql>

看到亮闪闪的0,这个设置导致原来的update语句如果没有commit的话,你再重新执行update语句,就会等待锁定,当等待时间过长的时候,就会报ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction的错误。
所以赶紧commit刚才执行的update语句,之后 set global autocommit=1;

来自:http://blog.itpub.net/26230597/viewspace-1242948/

MySQL 事务没有提交导致 锁等待 Lock wait timeout exceeded

java.lang.Exception: ### Error updating database.  Cause: java.sql.SQLException: Lock wait timeout ...
  • mangmang2012
  • mangmang2012
  • 2013年06月30日 12:45
  • 96366

lock wait timeout exceeded; try restarting transactio解决方案

问题原因:        今天线上环境,突然出现一个问题,追踪原因是数据库中的一条语句报错,错误内容: lock wait timeout exceeded; try restarting tra...
  • zc474235918
  • zc474235918
  • 2017年05月25日 17:10
  • 7308

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction的问题解决(备忘)

今天让运维将测试库的数据到了导出一份到自己电脑本地来做测试,数据量较大(几百万条吧),系统运行起来之后查看订单列表数据很慢(估计是自己电脑配置太low了,刷新列表的时候一直在加载),然后就想删除部分数...
  • mayor125
  • mayor125
  • 2017年07月27日 15:10
  • 1562

【Mysql】mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法

问题场景 问题出现环境:  1、在同一事务内先后对同一条数据进行插入和更新操作;  2、多台服务器操作同一数据库;  3、瞬时出现高并发现象; 不断的有一下异常抛出,异常信息: org.sprin...
  • moshenglv
  • moshenglv
  • 2017年12月21日 15:13
  • 1187

关于MYSQL ERROR 1205 :Lock wait timeout exceeded; try restarting transaction

在mysql的数据库上操作增删改查语句,数据库一直在执行,响应完后,报Lock wait timeout exceeded;try restarting transaction; 执行delete语句...
  • Hayley_Liu
  • Hayley_Liu
  • 2016年10月07日 18:58
  • 2055

mysql异常Lock wait timeout exceeded; try restarting transaction

mysql中使用update语句更新数据报错: Lock wait timeout exceeded; try restarting transaction。 这是因为你要更新的表的锁在其他线程手里,...
  • w171203757
  • w171203757
  • 2015年08月19日 19:40
  • 2683

Mysql出现“ Lock wait timeout exceeded; try restarting transaction”错误

今天用django写一个小程序,结果调用数据库d
  • xiaobei4929
  • xiaobei4929
  • 2014年05月08日 20:43
  • 19031

mysql trouble shooting---- 从库停止同步lock_wait_timeout_exceeded_try_restarting_transaction

问题描述: 数据库从库停止同步。 问题分析: show slave status\G;(也可使用show full processlist) 显示 某个update语句出错,Lock wait t...
  • crazyhacking
  • crazyhacking
  • 2013年11月05日 12:18
  • 7647

Mysql事物锁等待超时 Lock wait timeout exceeded; try restarting transaction

工作中同事遇到此异常,查找解决问题时,收集整理形成此篇文章。问题场景问题出现环境: 1、在同一事务内先后对同一条数据进行插入和更新操作; 2、多台服务器操作同一数据库; 3、瞬时出现高并发现象;...
  • wo541075754
  • wo541075754
  • 2016年02月22日 16:50
  • 26021

Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法

Java执行一个SQL查询未提交,遇到1205错误。     java.lang.Exception:     ### Error updating database.  Cause: java....
  • wp1603710463
  • wp1603710463
  • 2016年06月20日 17:01
  • 13040
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
举报原因:
原因补充:

(最多只允许输入30个字)