文档章节

ERROR 1205 (HY000): Lock wait timeout exceeded; tr

知之为止
 知之为止
发布于 2016/06/21 16:59
字数 638
阅读 23
收藏 0
点赞 0
评论 0

前言:朋友咨询我说执行简单的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,看到有这条9930577sqlkill掉,执行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 |
+--------------+
|
+--------------+
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://www.linuxidc.com/Linux/2014-08/105078.htm

© 著作权归作者所有

共有 人打赏支持
知之为止
粉丝 1
博文 10
码字总数 1797
作品 0
武汉
程序员
浅析 innodb next-key lock

record lock:记录锁,也就是仅仅锁着单独的一行 gap lock:区间锁,仅仅锁住一个区间(注意这里的区间都是开区间,也就是不包括边界值,至于为什么这么定义?innodb官方定义的) next-key l...

长平狐 ⋅ 2012/11/01 ⋅ 0

MySQL 执行一个很长的 SQL 语句报错 —— Lock wait timeout exceeded

执行一个对数据的操作语句,需要时间很长,可能一个小时。执行报错如下: ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction该怎么调整 MySQL 配置呢?...

华宰 ⋅ 2015/12/05 ⋅ 1

mysql锁等待问题

相关操作: update a set type=0 where id=1; 执行时提示ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 问题分析: 经过排查,发现是由于连接没有关闭,或者...

hanowa ⋅ 2014/03/06 ⋅ 0

隔离级别和MVCC

-----本文章为个人理解,如有疑问或错误欢迎留言并讨论----- 谢谢。 昨天去去哪儿网面试,老周和老赵问了很多问题,大多关于细节,其中就包括事务隔离级别和MVCC,由于准备不够充分,所以今天...

浮生凤年 ⋅ 2015/07/14 ⋅ 0

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 前言:朋友咨询我说执行简单的update语句失效,症状如下: MySQL> update orderinfo set provinceid=15 ,cityid= 1667 where orderf...

yunlielai ⋅ 2017/05/27 ⋅ 0

MySQL 事务没有提交导致 锁等待

执行简单的update语句失效:报错 Lock wait timeout exceeded; try restarting transaction jdbc PreparedStatement executeBatch 解决办法: 1、 ps -ef | grep mysql 找到mysql安装路径 2、......

北极之北 ⋅ 2015/12/22 ⋅ 2

MySQL事务隔离级别之REPEATABLE-READ

MySQL事务隔离级别之REPEATABLE-READ 考虑这样一个业务情境..... 事务A:用户查询余额为4000元,存入2000,写入数据库,余额6000。 事务B:银行系统在月初,要进行扣费,扣费500。 建表语句:...

秋风醉了 ⋅ 2014/07/30 ⋅ 9

python2.7报错Lock wait timeout exceeded; try restarting transaction')

conn.execute(sql) File "build/bdist.linux-x86_64/egg/MySQLdb/cursors.py", line 174, in execute File "build/bdist.linux-x86_64/egg/MySQLdb/connections.py", line 36, in defaulterr......

sca7 ⋅ 2017/05/26 ⋅ 0

python爆这个错误,怎么解决??

conn.execute(sql) File "build/bdist.linux-x86_64/egg/MySQLdb/cursors.py", line 174, in execute File "build/bdist.linux-x86_64/egg/MySQLdb/connections.py", line 36, in defaulterr......

sca7 ⋅ 2017/05/26 ⋅ 0

记一次处理MySql锁等待(Lock wait timeout exceeded)

环境 MySQL5.5 现象 A.数据更新或新增后数据经常自动回滚。 B.表操作总报 Lock wait timeout exceeded 并长时间无反应 解决方法 A.应急方法:show processlist; kill掉出现问题的进程 B.根治...

-蒋全忠- ⋅ 2014/04/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 25分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 29分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 34分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 35分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 45分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 今天 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 今天 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 今天 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部