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安全错误
数据库的锁怎样保障安全
福建购买网络技术咨询哪家强
济南旭航网络技术
使用sparksql操作数据库
全国网络安全题库
番禺网络数据库维护费用
增强网络安全能力靠什么
数据库有哪些安全性
应城市公安局网络安全课
山东区的服务器虚拟主机
远端服务器无响应请检查您的电脑
艾斯易欧网络技术
服务器管理器无法使用
网络安全关乎每个人
数据库表表
软件测试与软件开发工资对比
汽车销量数据库 搜狐
中期业绩大增的网络安全股票
云应用软件开发语言
关于陕西省网络安全绘画
dell服务器硬盘启动
软件开发系统部署设计
怎么利用宏创建数据库
网络安全和信息化要处理好
会员服务器
网络安全工作人员的职责
惠泽网络技术有限公司
涟源网络安全局
列式存储数据库压缩比
天津会计软件开发方案
wifi数据库查询