ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction解决
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,一、问题描述:同事反馈线上一个表有其中一条数据无法删除,其他都正常,我拿到删数据的sql,尝试执行,报错如下:mysql> delete from facebook_posts where id =
千家信息网最后更新 2024年11月26日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: 1trx_last_foreign_key_error: NULL trx_adaptive_hash_latched: 0 trx_adaptive_hash_timeout: 10000 trx_is_read_only: 0trx_autocommit_non_locking: 01 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 这个未提交的事物线程IDmysql> 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)
事物
数据
信息
步骤
线程
问题
主机
含义
字段
时间
状态
账号
检查
解释
事务
人员
内存
原因
同事
唯一性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
微服务 数据库设计
csum去哪租服务器
网络安全对教育
新服务器装系统读不到硬盘
联想服务器主板改家用
使用网络安全正确的是
云南pdu服务器电源厂
软件开发项目实施前准备
明日之后哪个官服服务器比较富
网络安全抄报图片大全简单又漂亮
网络安全工程师的题型
中国农药数据库
网络安全对中国经济的影响
苹果手机空间显示服务器错误
嵌入式服务器安装视频
有几种网络技术有限公司
专科女生工业网络技术就业方向
4G通信网络技术
软件开发合同形式
五家渠云服务器诚信合作
成都知壹家网络技术公司
数据库信息安全保护
软件开发测试过程管控报告
中国研究数据库
南京拓古网络技术有限公司
数控切割机 软件开发
mdb和db数据库哪个好
mfc与数据库连接
使用新建的数据库
有几种网络技术有限公司