MySQL报错:1205 Lock wait timeout exceeded; try restarting transaction处理

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: MySQL报错:1205 Lock wait timeout exceeded; try restarting transaction处理

1205 - Lock wait timeout exceeded; try restarting transaction

解决:

select * from information_schema.innodb_trx; -- 找到了那个一直没有提交的只读事务 
kill thread id; -- 对应的线程后

MySQL 5.5 – innodb_lock_wait 锁 等待

以前,当出现:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction,

要解决是一件麻烦的事情 ;

特别是当一个SQL执行完了,但未COMMIT,后面的SQL想要执行就是被锁,超时结束;

DBA光从数据库无法着手找出源头是哪个SQL锁住了;

有时候看看show engine innodb status , 并结合 show full processlist; 能暂时解决问题;但一直不能精确定位;

在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎);

innodb_trx ## 当前运行的所有事务
  innodb_locks ## 当前出现的锁
  innodb_lock_waits ## 锁等待的对应关系

来看一下表结构

desc information_schema .innodb_locks;
  +-------------+---------------------+------+-----+---------+-------+
  | Field | Type | Null | Key | Default | Extra |
  +-------------+---------------------+------+-----+---------+-------+
  | lock_id | varchar(81) | NO | | | |#锁ID
  | lock_trx_id | varchar(18) | NO | | | |#拥有锁的事务ID
  | lock_mode | varchar(32) | NO | | | |#锁模式
  | lock_type | varchar(32) | NO | | | |#锁类型
  | lock_table | varchar(1024) | NO | | | |#被锁的表
  | lock_index | varchar(1024) | YES | | NULL | |#被锁的索引
  | lock_space | bigint(21) unsigned | YES | | NULL | |#被锁的表空间号
  | lock_page | bigint(21) unsigned | YES | | NULL | |#被锁的页号
  | lock_rec | bigint(21) unsigned | YES | | NULL | |#被锁的记录号
  | lock_data | varchar(8192) | YES | | NULL | |#被锁的数据
  +-------------+---------------------+------+-----+---------+-------+
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
  +-------------------+-------------+------+-----+---------+-------+
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 | |#innodb_locks.lock_id
  | trx_wait_started | datetime | YES | | NULL | |#事务开始等待的时间
  | trx_weight | bigint(21) unsigned | NO | | 0 | |#
  | trx_mysql_thread_id | bigint(21) unsigned | NO | | 0 | |#事务线程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 | |#事务锁住的内存大小(B)
  | 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 | |#
  +----------------------------+---------------------+------+-----+---------------------+-------
select * from information_schema.innodb_lock_waits G


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
关系型数据库 MySQL 数据库
MySQL报错:未知系统变量'tx_isolation'及隔离级别查询
记住,选择合适的隔离级别,就像是在风平浪静的湖面上找到适合的划船速度——既要快到能赶上午饭(性能),又不至于翻船(数据一致性问题)。
363 3
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
24MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法(4-2) 学不会你来砍我!!!
|
12月前
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
12月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】MySQL和YashanDB 隐式转换不一致引起的报错
本文分析了在YashanDB中执行特定SQL语句时出现的类型转换错误问题,并对比了YashanDB、Oracle和MySQL 5.7的行为差异。问题源于隐式类型转换,当数值字段与非法数字字符串(如'1,2')进行比较时,YashanDB和Oracle会报错,而MySQL 5.7虽不报错但会引发警告。通过调整SQL语句,避免数值与字符串直接比较,可有效解决问题。文章还详细解析了不同值表现不一致的原因,涉及执行计划和过滤条件的实际运行细节。
|
12月前
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
12月前
|
SQL Oracle 关系型数据库
【YashanDB 知识库】MySQL 和 YashanDB 隐式转换不一致引起的报错
【YashanDB 知识库】MySQL 和 YashanDB 隐式转换不一致引起的报错
|
关系型数据库 MySQL Linux
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
当MySQL 8.4启动时报错“io_setup() failed with EAGAIN”时,通常是由于系统AIO资源不足所致。通过增加AIO上下文数量、调整MySQL配置、优化系统资源或升级内核版本,可以有效解决这一问题。上述解决方案详细且实用,能够帮助管理员快速定位并处理此类问题,确保数据库系统的正常运行。
500 9
|
SQL 关系型数据库 MySQL
|
NoSQL 安全 关系型数据库
2024Mysql And Redis基础与进阶操作系列(6)作者——LJS[含MySQL 多表之一对一/多;多对多;多表联合查询等详解步骤及常见报错问题所对应的解决方法]
MySQL 多表之一对一/多;多对多;多表联合之交叉连接;内连接;左、右、外、满、连接;子查询及关键字;自连接查询等详解步骤及常见报错问题所对应的解决方法
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法

推荐镜像

更多