sql自学笔记(二十四)——MySQL8.0版本的新特性(十四)

死锁检查控制

MySQL8.0(MySQL5.7.15)增加了一个新的动态变量,用于控制系统是否执行InnoDB死锁检查。

innodb _ deadlock_delect

对于高并发的系统禁用死锁检查可能带来性能的提高。

接下来我们看一下这个参数对我们系统的影响

首先我们显示一下参数的默认值

show varables like 'innodb _ deadlock _ detect';

默认情况下这个参数是打开的

接下来再两个事务中修改一些数据,然后让个事务相互锁定一些等待对方的一些锁,让他形成一个死锁,让后看一下这个参数默认打开情况下的一个行为。

创建一张表

create table t(i int);//创建一个字段
insert into t(i) values(1);//插入一条记录

首先在第一个会话当中,创建一个事物

start transaction;

然后获取记录上的一个锁

select * from t where i=1 for share;

接着启动第二个窗口
创建一个事物

start transaction;

删除这条记录

delete from t where i=1;

对于这个情况由于前面一个会话,已经占用了一个共享锁,所以这个语句他会进行一个等待,等待前面的会话进行资源的释放。
我们可以看到他会等待在这里



这个时候我们回到第一个窗口。同样执行一个删除
删除的时候也是需要一个排他锁
这个时候它也会等待第二个会话,释放相应的锁,他才能够继续进行下去,形成一个死锁、



我们可以看到当前窗口第一个窗口可以被执行,第二个窗口出现了一个错误,也就是这个死锁被发现了,所以系统把这个事务回转掉了,让第一个事务能够继续进行下去,这样就是这个参数‘inndb _ deadlock _ delect’默认打开情况下的一个行为。
接下来把这个参数先关掉
set global innodb _ deadlock _ detect = off;

在看一下是否已经关掉

show variables like 'innodb _ deadlock _ detect';

我们再重复刚才的实验,看一下再关掉的情况下,它的行为是什么样的

首先看一下锁等待超时的一个参数

show variables like 'innodb _ lock _ wait%';

它默认是50,我们可以改一下等待时间

set global innodb _ lock _ wait _ timeout = 5;

把刚才删掉的数据加回来

insert into into t(i) values(1);

同样启动一个事务

start transaction;

获取共享锁

select * from t where i =1 for share;

这时启动第二个窗口
启动一个事务

start transaction

然后执行这个删除操作

sekect * from t where i=1 for share;

看到他们仍然会等待
等待一段时间后,它会出现锁等待超时,它会以这种方式让事务回转失败。
再回到前面的事务



这个事务它由于等待时间没有这么长它能够继续执行下去,完成这个事务。


说明:
虽然这个死锁检测是我们可以关闭掉的,那么前提是我们要确保我们的应用不会发生或者是特别少的情况下发生这种死锁,那么我们要非常小心的写sql
语句或者我们的业务相应的代码,并且进行相应的测试,同时我们需要注意就是把刚才锁等待超时让它尽量小一点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355