MySQL行锁堵塞案例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 背景 客户执行delete操作一直显示ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 测试环境 centos7.

背景

客户执行delete操作一直显示ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

测试环境

  • centos7.4
  • MySQL5.7.25

测试步骤

session 1
root@localhost : test 05:58:52> select * from test111;
+------+
| a |
+------+
| 1 |
| 3 |
| 7 |
| 10 |
| 11 |
+------+
5 rows in set (0.00 sec)

root@localhost : test 06:06:53> begin;
Query OK, 0 rows affected (0.00 sec)

root@localhost : test 06:06:55> insert into test111 values(11);
Query OK, 1 row affected (0.00 sec)
session 2
root@localhost : (none) 06:07:07> begin;
Query OK, 0 rows affected (0.00 sec)

root@localhost : (none) 06:07:09> use test
Database changed

root@localhost : test 06:07:11> delete from test111 where a >3;
session 3
root@localhost : test 06:07:03> use sys
Database changed

root@localhost : sys 07:40:44> select * from innodb_lock_waits\G
*************************** 1. row ***************************
                wait_started: 2019-02-18 19:41:29
                    wait_age: 00:00:18
               wait_age_secs: 18
                locked_table: `test`.`test111`
                locked_index: GEN_CLUST_INDEX
                 locked_type: RECORD
              waiting_trx_id: 605682
         waiting_trx_started: 2019-02-18 19:41:29
             waiting_trx_age: 00:00:18
     waiting_trx_rows_locked: 3
   waiting_trx_rows_modified: 2
                 waiting_pid: 903466
               waiting_query: delete from test111 where a >3
             waiting_lock_id: 605682:47:3:6
           waiting_lock_mode: X
             blocking_trx_id: 605672
                blocking_pid: 903490
              blocking_query: NULL
            blocking_lock_id: 605672:47:3:6
          blocking_lock_mode: X
        blocking_trx_started: 2019-02-18 19:41:20
            blocking_trx_age: 00:00:27
    blocking_trx_rows_locked: 1
  blocking_trx_rows_modified: 1
     sql_kill_blocking_query: KILL QUERY 903490
sql_kill_blocking_connection: KILL 903490
1 row in set, 3 warnings (0.00 sec)

Warning (Code 1681): 'INFORMATION_SCHEMA.INNODB_LOCK_WAITS' is deprecated and will be removed in a future release.
Warning (Code 1681): 'INFORMATION_SCHEMA.INNODB_LOCKS' is deprecated and will be removed in a future release.
Warning (Code 1681): 'INFORMATION_SCHEMA.INNODB_LOCKS' is deprecated and will be removed in a future release.
root@localhost : sys 07:41:47> select * from sys.session where conn_id=903490\G
*************************** 1. row ***************************
                thd_id: 903532
               conn_id: 903490
                  user: root@localhost
                    db: test
               command: Sleep
                 state: NULL
                  time: 37
     current_statement: NULL
     statement_latency: NULL
              progress: NULL
          lock_latency: 128.00 us
         rows_examined: 0
             rows_sent: 0
         rows_affected: 1
            tmp_tables: 0
       tmp_disk_tables: 0
             full_scan: NO
        last_statement: insert into test111 values(11)
last_statement_latency: 406.35 us
        current_memory: 0 bytes
             last_wait: NULL
     last_wait_latency: NULL
                source: NULL
           trx_latency: NULL
             trx_state: NULL
        trx_autocommit: NULL
                   pid: 21460
          program_name: mysql
1 row in set (0.11 sec)

root@localhost : sys 07:41:57> show processlist;
+--------+------+--------------------+------+---------+------+----------+--------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+------+--------------------+------+---------+------+----------+--------------------------------+
| 903410 | root | localhost | sys | Query | 0 | starting | show processlist |
| 903466 | root | localhost | test | Query | 65 | updating | delete from test111 where a >3 |
| 903490 | root | localhost | test | Sleep | 74 | | NULL |
| 903705 | root | 10.244.2.124:44058 | test | Sleep | 1 | | NULL |
+--------+------+--------------------+------+---------+------+----------+--------------------------------+
4 rows in set (0.00 sec)
session 2
root@localhost : test 06:07:11> delete from test111 where a >3;
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
6月前
|
SQL 存储 关系型数据库
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
136 3
|
SQL 关系型数据库 MySQL
案例剖析:MySQL唯一索引并发插入导致死锁!
案例剖析:MySQL唯一索引并发插入导致死锁!
829 0
案例剖析:MySQL唯一索引并发插入导致死锁!
|
7月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
SQL 关系型数据库 MySQL
案例剖析,MySQL共享锁引发的死锁问题!
案例剖析,MySQL共享锁引发的死锁问题!
158 0
|
消息中间件 关系型数据库 MySQL
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
717 0
|
9月前
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
219 25
|
9月前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
11月前
|
存储 关系型数据库 MySQL
10个案例告诉你mysql不使用子查询的原因
大家好,我是V哥。上周与朋友讨论数据库子查询问题,深受启发。为此,我整理了10个案例,详细说明如何通过优化子查询提升MySQL性能。主要问题包括性能瓶颈、索引失效、查询优化器复杂度及数据传输开销等。解决方案涵盖使用EXISTS、JOIN、IN操作符、窗口函数、临时表及索引优化等。希望通过这些案例,帮助大家在实际开发中选择更高效的查询方式,提升系统性能。关注V哥,一起探讨技术,欢迎点赞支持!
541 5