ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction解决
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,一、问题描述:同事反馈线上一个表有其中一条数据无法删除,其他都正常,我拿到删数据的sql,尝试执行,报错如下:mysql> delete from facebook_posts where id =
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
想做网络游戏服务器多少钱
数据库是由组成的
福山软件开发价格
济南软件开发的
杨浦区软件开发技术服务公司
北京汇融网络技术
软件开发及其模型的案例
印刷包装软件开发维护
产业创新网络安全
dlp 数据库
怎么收集数据库汇报材料
软件开发公司有哪些要求
闵行区通讯网络技术售后保障
欧盟网络安全法物联网
vb数据库html
python写数据服务器
jj怪服务器
带web服务器的wifi模块
服务器活动方案
软件开发管理学重点
苹果网络安全产品
包头网络技术哪个好
梦网科技互联网
互联网科技类公众号
服务器管理员号登陆不了
查看数据库用户密码
浙江pdu服务器电源价钱
闪布服务器开小差了
廊坊勋泽网络技术有限公司
数据库表的查询结果