我是靠谱客的博主 大力篮球,这篇文章主要介绍mysql阻塞后锁的释放,现在分享给大家,希望可以做个参考。

在测试锁的情况下,可能会遇到莫名奇妙的锁定的情况。比如之前测试行锁的时候,http://blog.csdn.net/aoerqileng/article/details/51354441 在innodb中innodb_lock_wait_timeout用来控制等待的时间,innodb_rollback_on_timeout用来决定在等待超时的时候对进行中的事务进行回滚操作,模式是off就是不会滚,索引在测试的时候,事务超时了,这个时候是没有回滚的,锁还是存在的,所以会给人莫名其妙的感觉,如果线上出现了这个情况,如果代码中没有做处理,就需要人为手工的去干预了。
测试如下:
| baixyu | CREATE TABLE baixyu (
userid int(11) NOT NULL,
name varchar(10) DEFAULT NULL,
PRIMARY KEY (userid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

mysql> select * from baixyu;
+——–+——+
| userid | name |
+——–+——+
| 1 | a |
| 2 | a |
| 3 | a |
| 4 | a |
| 5 | a |
| 6 | bb |
| 7 | cc |
+——–+——+
session1:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> update baixyu set name='zz' where userid=7; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 session 2: mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> insert into baixyu values(99,'qqq'); Query OK, 1 row affected (0.04 sec) 下面的语句被阻塞 mysql> update baixyu set name='yyy' where userid=7; 等待超时,超时后查询表 mysql> select * from baixyu; +--------+------+ | userid | name | +--------+------+ | 1 | a | | 2 | a | | 3 | a | | 4 | a | | 5 | a | | 6 | bb | | 7 | cc | | 99 | qqq | +--------+------+ 看到99这个记录还在 这个时候在session 3执行下面的操作,会被阻塞 mysql> insert into baixyu values(99,'tt');

可见在这种情况下,代码需要进行处理,如果代码中没有进行处理,那么需要dba手工介入处理

最后

以上就是大力篮球最近收集整理的关于mysql阻塞后锁的释放的全部内容,更多相关mysql阻塞后锁内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部