Lock wait timeout分析
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction分析
1、4个用户连接数据库(A和D是本地回环登陆,B和C是本地登陆)
A用户信息:
mysql> status;
--------------
Connection id: 8
Current database: db1
Current user: root@localhost
Connection: 127.0.0.1 via TCP/IP
B用户信息:
mysql> status;
--------------
Connection id: 3
Current database: db1
Current user: root@localhost
Connection: Localhost via UNIX socket
C用户信息:
mysql> status;
--------------
Connection id: 6
Current database: db1
Current user: root@localhost
Connection: Localhost via UNIX socket
D用户信息:
mysql> status;
--------------
Connection id: 9
Current database: db1
Current user: root@localhost
Connection: 127.0.0.1 via TCP/IP
2、4个用户分别开启事务,对db1里面的t1表进行DML
start transaction;
A用户执行:
mysql> select * from t1;
+------+-------+
| id | name |
+------+-------+
| 4 | mvk |
| 6 | marry |
| 5 | fang |
| 5 | fang |
+------+-------+
4 rows in set (0.00 sec)
mysql> insert into t1 values(1,'juhua'),(2,'long');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t1;
+------+-------+
| id | name |
+------+-------+
| 4 | mvk |
| 6 | marry |
| 5 | fang |
| 5 | fang |
| 1 | juhua |
| 2 | long |
+------+-------+
6 rows in set (0.01 sec)
B用户执行:
mysql> select * from t1;
+------+-------+
| id | name |
+------+-------+
| 4 | mvk |
| 6 | marry |
| 5 | fang |
| 5 | fang |
+------+-------+
4 rows in set (0.00 sec)
mysql>
mysql> update t1 set name='liu' where id=5;
等待50秒,报错
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
在第5个会话层面查看:
mysql> select * from information_schema.innodb_lock_waits;
+-------------------+-------------------+-----------------+------------------+
| requesting_trx_id | requested_lock_id | blocking_trx_id | blocking_lock_id |
+-------------------+-------------------+-----------------+------------------+
| 426545 | 426545:45:3:10 | 426540 | 426540:45:3:10 |
+-------------------+-------------------+-----------------+------------------+
1 row in set, 1 warning (0.00 sec)
锁等待是426545,因为426540占着事务没有提交造成的
mysql> select * from information_schema.innodb_locks;
+----------------+-------------+-----------+-----------+------------+-----------------+------------+-----------+----------+----------------+
| lock_id | lock_trx_id | lock_mode | lock_type | lock_table | lock_index | lock_space | lock_page | lock_rec | lock_data |
+----------------+-------------+-----------+-----------+------------+-----------------+------------+-----------+----------+----------------+
| 426545:45:3:10 | 426545 | X | RECORD | `db1`.`t1` | GEN_CLUST_INDEX | 45 | 3 | 10 | 0x000000242504 |
| 426540:45:3:10 | 426540 | X | RECORD | `db1`.`t1` | GEN_CLUST_INDEX | 45 | 3 | 10 | 0x000000242504 |
+----------------+-------------+-----------+-----------+------------+-----------------+------------+-----------+----------+----------------+
mysql> select * from information_schema.innodb_trx\G
*************************** 1. row ***************************
trx_id: 426546
trx_state: RUNNING
trx_started: 2019-08-07 17:24:36
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 1
trx_mysql_thread_id: 6
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 1
trx_lock_structs: 1
trx_lock_memory_bytes: 1136
trx_rows_locked: 1
trx_rows_modified: 0
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 0
trx_is_read_only: 0
trx_autocommit_non_locking: 0
*************************** 2. row ***************************
trx_id: 426545
trx_state: LOCK WAIT
trx_started: 2019-08-07 17:21:36
trx_requested_lock_id: 426545:45:3:10
trx_wait_started: 2019-08-07 17:26:38
trx_weight: 5
trx_mysql_thread_id: 3
trx_query: update t1 set name='liu' where id=5
trx_operation_state: fetching rows
trx_tables_in_use: 1
trx_tables_locked: 1
trx_lock_structs: 3
trx_lock_memory_bytes: 1136
trx_rows_locked: 6
trx_rows_modified: 2
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 0
trx_is_read_only: 0
trx_autocommit_non_locking: 0
*************************** 3. row ***************************
trx_id: 426540
trx_state: RUNNING
trx_started: 2019-08-07 17:20:10
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 4
trx_mysql_thread_id: 8
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 1
trx_lock_structs: 2
trx_lock_memory_bytes: 1136
trx_rows_locked: 1
trx_rows_modified: 2
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 0
trx_is_read_only: 0
trx_autocommit_non_locking: 0
3 rows in set (0.00 sec)
找到trx_mysql_thread_id对应的id号,show processlist看是否对应,然后commit事务即可。
改变情况:
分别在B、C、D执行DML
B:
mysql> update t1 set name='liu' where id=5;
C:
mysql> delete from t1 where id=4;
D:
mysql> update t1 set id=8 where id=6;
全部发生所等待
mysql> select * from information_schema.innodb_lock_waits;
+-------------------+-------------------+-----------------+------------------+
| requesting_trx_id | requested_lock_id | blocking_trx_id | blocking_lock_id |
+-------------------+-------------------+-----------------+------------------+
| 426547 | 426547:45:3:4 | 426545 | 426545:45:3:4 |
| 426546 | 426546:45:3:4 | 426547 | 426547:45:3:4 |
| 426546 | 426546:45:3:4 | 426545 | 426545:45:3:4 |
| 426545 | 426545:45:3:10 | 426540 | 426540:45:3:10 |
+-------------------+-------------------+-----------------+------------------+
mysql> select * from information_schema.innodb_trx\G
*************************** 1. row ***************************
trx_id: 426547
trx_state: LOCK WAIT
trx_started: 2019-08-07 17:35:19
trx_requested_lock_id: 426547:45:3:4
trx_wait_started: 2019-08-07 17:36:48
trx_weight: 4
trx_mysql_thread_id: 9
trx_query: update t1 set id=8 where id=6
trx_operation_state: starting index read
trx_tables_in_use: 1
trx_tables_locked: 1
trx_lock_structs: 2
trx_lock_memory_bytes: 1136
trx_rows_locked: 1
trx_rows_modified: 2
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 0
trx_is_read_only: 0
trx_autocommit_non_locking: 0
*************************** 2. row ***************************
trx_id: 426546
trx_state: LOCK WAIT
trx_started: 2019-08-07 17:24:36
trx_requested_lock_id: 426546:45:3:4
trx_wait_started: 2019-08-07 17:36:52
trx_weight: 2
trx_mysql_thread_id: 6
trx_query: delete from t1 where id=4
trx_operation_state: starting index read
trx_tables_in_use: 1
trx_tables_locked: 1
trx_lock_structs: 2
trx_lock_memory_bytes: 1136
trx_rows_locked: 2
trx_rows_modified: 0
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 0
trx_is_read_only: 0
trx_autocommit_non_locking: 0
*************************** 3. row ***************************
trx_id: 426545
trx_state: LOCK WAIT
trx_started: 2019-08-07 17:21:36
trx_requested_lock_id: 426545:45:3:10
trx_wait_started: 2019-08-07 17:36:56
trx_weight: 5
trx_mysql_thread_id: 3
trx_query: update t1 set name='liu' where id=5
trx_operation_state: fetching rows
trx_tables_in_use: 1
trx_tables_locked: 1
trx_lock_structs: 3
trx_lock_memory_bytes: 1136
trx_rows_locked: 7
trx_rows_modified: 2
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 0
trx_is_read_only: 0
trx_autocommit_non_locking: 0
*************************** 4. row ***************************
trx_id: 426540
trx_state: RUNNING
trx_started: 2019-08-07 17:20:10
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 4
trx_mysql_thread_id: 8
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 1
trx_lock_structs: 2
trx_lock_memory_bytes: 1136
trx_rows_locked: 1
trx_rows_modified: 2
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 0
trx_is_read_only: 0
trx_autocommit_non_locking: 0
4 rows in set (0.00 sec)
直接在426540对应的trx_mysql_thread_id: 8会话提交之后,发现B和D锁等待消失,只有C还有锁等待。
查找innodb_lock_waits表看到426545还引起了锁等待。同理commit即可。
mysql> select * from information_schema.innodb_lock_waits;
+-------------------+-------------------+-----------------+------------------+
| requesting_trx_id | requested_lock_id | blocking_trx_id | blocking_lock_id |
+-------------------+-------------------+-----------------+------------------+
| 426546 | 426546:45:3:4 | 426545 | 426545:45:3:4 |
+-------------------+-------------------+-----------------+------------------+
1 row in set, 1 warning (0.00 sec)
Lock wait timeout分析的更多相关文章
- SQL性能优化常见措施(Lock wait timeout exceeded)
SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...
- mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决
前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...
- java.sql.SQLException: Lock wait timeout exceeded --转
org.springframework.dao.CannotAcquireLockException 的解决> 直接上 bug 的详细信息: 2012-03-12 15:20:31 XmlBea ...
- 排查mysql innodb Lock wait timeout exceeded; try restarting transaction的问题
OMG写的时候崩溃了一次. 触发关注这个问题的事情是 我们在使用pt-online-schedule 改表的时候总是拿不到锁,并且报出mysql innodb Lock wait timeout ex ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
本文为博主原创: 以下为在程序运行过程中报的错误, org.springframework.dao.CannotAcquireLockException: ### Error updating dat ...
- mysql Lock wait timeout exceeded; try restarting transaction解决
前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...
- Spring_错误 java.sql.SQLException: Lock wait timeout exceeded | CannotAcquireLockException 的解决
java.sql.SQLException: Lock wait timeout exceeded | org.springframework.dao.CannotAcquireLockExcept ...
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 表被锁的解决办法
转自:https://blog.csdn.net/mchdba/article/details/38313881 前言:朋友咨询我说执行简单的update语句失效,症状如下:mysql> upd ...
- Lock wait timeout exceeded数据库死锁问题
环境 MySQL5.5 现象 A.数据更新或新增后数据经常自动回滚. B.表操作总报 Lock wait timeout exceeded 并长时间无反应 解决方法 A.应急方法:show proce ...
随机推荐
- Spring MVC -- 表达式于语言(EL)
JSP 2.0最重要的特性之一就是表达式语言(EL),JSP用户可以用它来访问应用程序数据.由于受到ECMAScript和XPath表达式语言的启发,EL也设计成可以轻松地编写免脚本(就是不用在jsp ...
- [LeetCode] 689. Maximum Sum of 3 Non-Overlapping Subarrays 三个非重叠子数组的最大和
In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. E ...
- SVN 本地文件锁/服务端文件锁清除步骤
1.本地文件锁,直接cleanup,cleanup界面选择break locks即可 2.服务端文件锁,本地文件右击没有release lock或者break lock的选项时 方法1:右键,svn选 ...
- VS Code 编译C++
1.安装VS Code 2.安装插件 在左侧插件库 必须: c/c++ 插件 非必需: C++ Intellisense Include Autocomplete 3.安装编译调试环境mingw Mi ...
- laravel相关知识点
参考地址:http://note.youdao.com/noteshare?id=9899f8328427de449390230c35489934
- python爬虫4猫眼电影的Top100
1 查看网页结构 (1)确定需要抓取的字段 电影名称 电影主演 电影上映时间 电影评分 (2) 分析页面结构 按住f12------->点击右上角(如下图2)---->鼠标点击需要观察的字 ...
- 怎么又出错了?盘点java中最容易出现的错误
现如今,java已经广泛应用各种软件开发领域.基于面向对象的设计,java屏蔽了诸如C,C++等语言的一些复杂性,提供了垃圾回收机制,平台无关的虚拟机技术,Java创造了一种前所未有的开发方式.所以, ...
- PHP 获取星期
<?php function getWeek($time = 0) { $week_array=array('日', '一', '二', '三', '四', '五', '六'); //先定义一个 ...
- AOP+Redis锁防止表单重复提交
确保分布式锁同时满足以下四个条件 1.互斥性.在任意时刻,只有一个客户端能持有锁 2.不会发生死锁.即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁 3.具有容错性.只要 ...
- Linux05 文件或目录的权限(ls、lsattr、chattr、chmod、chown、chgrp、file)
一.查看文件或目录的权限:ls -al 文件名/目录名 keshengtao@LAPTOP-F9AFU4OK:~$ ls -al total drwxr-xr-x keshengtao keshen ...