我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

一、问题描述:

     同事反馈线上一个表有其中一条数据无法删除,其他都正常,我拿到删数据的sql,尝试执行,报错如下:

mysql> delete from facebook_posts where id = 7048962;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

二、问题处理

从报错信息看,应该是关于这条数据有事物未提交,锁等待超时了,下面我们就开始验证并解决问题

1、在sql执行期间,通过information_schema.innodb_trx表找到这个sql的事物ID(5316933097

mysql> select trx_id,trx_started,trx_requested_lock_id,trx_mysql_thread_id,trx_query from information_schema.innodb_trx  where trx_query='delete from facebook_posts where id = 7048962';
+------------+---------------------+------------------------+---------------------+-----------------------------------------------+
| trx_id     | trx_started         | trx_requested_lock_id  | trx_mysql_thread_id | trx_query                                     |
+------------+---------------------+------------------------+---------------------+-----------------------------------------------+
| 5316933097 | 2017-08-15 07:31:57 | 5316933097:923:24693:6 |          1798850878 | delete from facebook_posts where id = 7048962 |
+------------+---------------------+------------------------+---------------------+-----------------------------------------------+
1 row in set (0.00 sec)

关于innodb_trx表字段含义的解释:

mysql> desc information_schema.innodb_trx;       
+----------------------------+---------------------+------+-----+---------------------+-------+
| Field                      | Type                | Null | Key | Default             | Extra |
+----------------------------+---------------------+------+-----+---------------------+-------+
| trx_id                     | varchar(18)         | NO   |     |                     |       |#事务ID
| trx_state                  | varchar(13)         | NO   |     |                     |       |#事物状态
| trx_started                | datetime            | NO   |     | 0000-00-00 00:00:00 |       |#事物开始时间
| trx_requested_lock_id      | varchar(81)         | YES  |     | NULL                |       |#事物请求锁ID
| trx_wait_started           | datetime            | YES  |     | NULL                |       |#事物开始等待时间
| trx_weight                 | bigint(21) unsigned | NO   |     | 0                   |       |#
| trx_mysql_thread_id        | bigint(21) unsigned | NO   |     | 0                   |       |#事物线程ID,即show processlist看到ID
| trx_query                  | varchar(1024)       | YES  |     | NULL                |       |#具体SQL
| trx_operation_state        | varchar(64)         | YES  |     | NULL                |       |#事物当前操作状态
| trx_tables_in_use          | bigint(21) unsigned | NO   |     | 0                   |       |#事物中有多少个表被使用
| trx_tables_locked          | bigint(21) unsigned | NO   |     | 0                   |       |#使用拥有多少个锁
| trx_lock_structs           | bigint(21) unsigned | NO   |     | 0                   |       |#
| trx_lock_memory_bytes      | bigint(21) unsigned | NO   |     | 0                   |       |#事物锁住的内存大小
| trx_rows_locked            | bigint(21) unsigned | NO   |     | 0                   |       |#事物锁住的行数
| trx_rows_modified          | bigint(21) unsigned | NO   |     | 0                   |       |#使用修改的行数
| trx_concurrency_tickets    | bigint(21) unsigned | NO   |     | 0                   |       |#事物并发票数
| trx_isolation_level        | varchar(16)         | NO   |     |                     |       |#事物隔离级别
| trx_unique_checks          | int(1)              | NO   |     | 0                   |       |#是否唯一性检查
| trx_foreign_key_checks     | int(1)              | NO   |     | 0                   |       |#是否外键检查
| trx_last_foreign_key_error | varchar(256)        | YES  |     | NULL                |       |#最后的外键错误
| trx_adaptive_hash_latched  | int(1)              | NO   |     | 0                   |       |#
| trx_adaptive_hash_timeout  | bigint(21) unsigned | NO   |     | 0                   |       |#
| trx_is_read_only           | int(1)              | NO   |     | 0                   |       |#
| trx_autocommit_non_locking | int(1)              | NO   |     | 0                   |       |#
+----------------------------+---------------------+------+-----+---------------------+-------+
24 rows in set (0.00 sec)

2、通过上面步骤1找到的事物ID,找到占有锁的事物ID(5316888834  )

mysql> select * from information_schema.innodb_lock_waits  where requesting_trx_id=5316933097;
+-------------------+------------------------+-----------------+------------------------+
| requesting_trx_id | requested_lock_id      | blocking_trx_id | blocking_lock_id       |
+-------------------+------------------------+-----------------+------------------------+
| 5316933097        | 5316933097:923:24693:6 | 5316888834      | 5316888834:923:24693:6 |
+-------------------+------------------------+-----------------+------------------------+
1 row in set (0.00 sec)

关于innodb_lock_waits 表的字段含义的解释:

mysql> desc information_schema.innodb_lock_waits;
+-------------------+-------------+------+-----+---------+-------+
| Field             | Type        | Null | Key | Default | Extra |
+-------------------+-------------+------+-----+---------+-------+
| requesting_trx_id | varchar(18) | NO   |     |         |       |#请求锁的事物ID
| requested_lock_id | varchar(81) | NO   |     |         |       |#请求锁的锁ID
| blocking_trx_id   | varchar(18) | NO   |     |         |       |#当前拥有锁的事物ID
| blocking_lock_id  | varchar(81) | NO   |     |         |       |#当前拥有锁的锁ID
+-------------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

3、通过步骤2找到的占有锁的事物ID,找到占有锁的事物线程ID(1790259884

mysql> select * from  information_schema.innodb_trx where trx_id=5316888834  \G
*************************** 1. row ***************************
                    trx_id: 5316888834
                 trx_state: RUNNING
               trx_started: 2017-08-15 06:00:21
     trx_requested_lock_id: NULL
          trx_wait_started: NULL
                trx_weight: 6
       trx_mysql_thread_id: 1790259884
                 trx_query: NULL
       trx_operation_state: NULL
         trx_tables_in_use: 0
         trx_tables_locked: 0
          trx_lock_structs: 6
     trx_lock_memory_bytes: 1184
           trx_rows_locked: 10
         trx_rows_modified: 0
   trx_concurrency_tickets: 0
       trx_isolation_level: REPEATABLE READ
         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
1 row in set (0.00 sec)

4、通过步骤3找的事物ID,可以查看下这个事物发起的账号和主机信息,提供给开发人员查找异常的真正原因,并kill这个事物ID,这条数据就可以正常删除了

#查看下这个事物发起的账号和主机信息
mysql> select * from  information_schema.processlist where ID=1790259884;
+------------+----------+---------------------+--------+---------+------+-------+------+
| ID         | USER     | HOST                | DB     | COMMAND | TIME | STATE | INFO |
+------------+----------+---------------------+--------+---------+------+-------+------+
| 1790259884 | spider_w | 172.31.11.143:46120 | db_mta | Sleep   | 1319 |       | NULL |
+------------+----------+---------------------+--------+---------+------+-------+------+
1 row in set (0.01 sec)
#kill 这个未提交的事物线程ID
mysql> CALL mysql.rds_kill(1790259884);
Query OK, 0 rows affected (0.00 sec)
#删除数据
mysql> delete from facebook_posts where id = 7041232;
Query OK, 1 row affected (0.02 sec)


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Lock wait timeout exceeded; try restarting transaction

一、问题抛出 在做查询语句时,MySQL 抛出了这样的异常: MySQL server error report:Array( [0] => Array ( [message] => MySQL Query Error
Lock wait timeout exceeded; try restarting transaction
2019-10-20

MySQL:MySQLTransactionRollbackException - Lock wait timeout exceeded; try restarting transaction

Lock wait timeout exceeded解决优化方案 一 , 定位问题可以通过以下几种命令去定位 二 , 解决方案紧急措施1.紧急措施:终止(KILL)相关的线程,释放任何被该线程持有的锁2.次之紧急措施:调整 In
2023-08-17

Lock wait timeout exceeded; try restarting transaction - 如何解决MySQL报错:事务等待超时

在使用MySQL数据库时,有时可能会遇到一个常见的错误:Lock wait timeout exceeded; try restarting transaction,该错误表示事务等待超时。这个错误通常发生在并发访问数据库时,因为有一个事务
2023-10-21

mysql数据库死锁问题解决MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transact

记录一下: 原因:spring事务提交时导致数据库事务得不到释放,产生死锁问题,紧接着抛出操作超时异常:MySQLTransactionRollbackException: Lock wait timeout exceeded; try
2023-08-16

Lock wait timeout exceeded; try restarting transaction - 如何解决MySQL报错:锁等待超时,尝试重新启动事务

正文:MySQL作为一种常用的关系型数据库管理系统,被广泛应用于各种类型的应用程序。然而,在使用MySQL时,我们可能会遇到各种错误和异常。其中一个常见的错误是“Lock wait timeout exceeded; try restart
2023-10-21

编程热搜

目录