当前位置:首页 > 日记 > 正文

MySQL中加载数据语句导致死锁的解决方案

MySQL中加载数据语句导致死锁的解决方案
在线项目报告的僵局简要介绍了原因、解决办法和一些相关的要点。

1。背景

这是一个项目类似于数据分析和数据完全导入InnoDB表通过加载数据表。为了描述的方便,表结构简化如下:
创建测试表(ID为主键auto_increment,C诠释不为空);

导入数据的语句与
LOAD DATA INFILE ' DATA1 .csv进入测试表;

LOAD DATA INFILE '数据CSV到测试表;
猫data1.csv

一千一百

二千一百

三千一百
猫data2.csv

一万零一百

一万一千一百

一万二千一百
死锁的证明死锁信息出现在最新检测到的死锁段SHOW ENGINE INNODB STATUS,这是简化如下:
解释

正如你可以看到从上面的表中,交易1等线路上的锁,事务2持有行锁,但是等待表的自增锁(auto_inc)被认为是一个僵局和事务回滚。

这里没有写事务1,但是可以推断事务1持有表的自锁(否则它不是死锁)。

2。背景知识1:auto_inc锁及其选择

在InnoDB表,如果有一个自增字段、表级锁,称为自增锁,是维持。每一次新的数据插入,或UPDATE语句修改的字段,你需要获得这个锁

因为交易可能包含多个报表,并不是所有的陈述都自增字段相关的,所以会有专门的处理。自完成的锁在语句结束后立即释放,特殊处理的原因是普通锁在事务结束后全部释放。

如果一个表有一个自增字段,插入语句没有指定字段的值,或者指定为null,InnoDB将它分配到当前auto_increment值加1,然后auto_increment。

与此相关的一个参数是自加锁,innodb_autoinc_lock_mode默认值。1、和分别是可选的。

让我们看看当值设置为0,以及插入一行数据时,具有自增字段的表的行为:

1)申请auto_inc锁

2)获取当前auto_incremnt值N,加上1 auto_increment

3)执行插入操作,并将n填充到新行对应字段中。

4)释放auto_inc锁

我们看到,在这个过程中,虽然会降低锁的粒度,它释放出的句子后立即执行,但锁仍然太大--包括插入操作的时间。这导致了两个INSERT语句实际上不能平行。

在此参数之前,行为与设置为0相同,0选项兼容。

很容易想到设置1,应该是3)和4,但是,本文仍将讨论0的情况,因为我们的前提是负载语句,负载语句被插入到多行语句(包括插入…选择),即使设置为1,它也会退化为0。

三.后台知识的主从行为2:负载数据语句

你为什么要插入多行语句设置innodb_autoinc_lock_mode 1和使用0模式

主要的原因是因为主从一致。想象binlog_format =表,载入数据声明,直接记录在主图书馆的binlog声明本身,这是重播从图书馆:

1)将加载数据所使用的文件发送给奴隶,并从中保存临时目录中的文件。

2)在从属端执行负载数据语句。

同时,还有一个问题:奴隶如何保证负载数据语句的自增id字段与主控字段相同

为了解决这个问题,也有一套insert_id命令在主图书馆的binlog,这表明自增ID值的负荷数据表插入的第一行。这样从执行设置insert_id语句的集合执行负荷数据,确保执行的结果是作为主要的图书馆同之前。

上述机制可以保证主从数据的一致性:主从库上的负载数据语句生成的自增id值必须是连续的。

4, 1 + 2:背景知识分析

回到0和1之间的区别,我们可以看到,如果auto_inc锁在全句开始收购,它将在声明后发布,从而确保身份连续模式0通过整个句子生成的保证。

对于1,每次都释放下一个值。插入数据后,如果需要再次应用,则它是不连续的。

这就是为什么,即使设置为1,多线程操作,它将退化为0。

到目前为止,我们知道,这个僵局的原因是这两种负荷数据报表不仅可以访问相同的记录,但同时访问同一auto_inc锁,造成对方等待。

这不是结束,因为我们知道,虽然两个线程访问两锁会导致死锁,死锁的另一个条件,即应用顺序有关。因为auto_inc是表锁,无论谁得第一,那块在同一表中的其他数据加载的执行,和为什么会有锁等待一个记录

5。对背景知识3锁定时间:auto_inc

在我们的面前,我们说,每一次新的数据插入的auto_inc将会被锁定的过程是上市。但这个过程是一个设置列值为自我增值的InnoDB的情况。另一种情况是,该列的值一直在声明中指定的。

例如,将插入实现到TB值中,(9100)。id值已经是9,虽然不需要补到这个值,但在有可能需要改变auto_increment值(如果原来是小于10,则应改为10),所以锁或不。过程变成:

1)插入数据

2)如果失败是过程的结束

3)如果成功申请auto_inc锁

4)电话set_max…功能,如有必要,修改auto_increment

5)在语句结束auto_inc锁释放。

6。为什么要修改auto_inc秩序
这种调整的好处是什么主要目的是为了减少不必要的锁的访问。如果错误发生在插入数据,例如,其他领域造成重复键错误,所以你不必访问auto_inc锁。

7。死锁恢复过程

必须强调的是,在语句的结尾处,我们要查看一个加载数据语句的流,它被指定为每行的附加值(这是本文中的例子)。

1)插入第一个数据

2)申请auto_inc锁

3)插入第二部分

4)申请auto_inc锁(因为已经是自己的,直接成功)

5)插入所有剩余行。

6)释放auto_inc锁。

所以这个过程是简单的描述为:插入第一行,申请auto_inc锁,然后将所有剩余的行,然后释放它。

正如我们前面提到的,插入第一个数据时可能需要访问的记录锁直到整个事务结束时才被释放。

基于以上背景知识,我们将了解死锁的过程。
可以看出,引发的更高的要求,特别是如果session2是使用记录锁,由锁最。需要说明的是,同一记录锁并不意味着主关键字的值必须是相同的因为InnoDB内部的记录表示。

8。解决方法1:删除不必要的auto_increment场

在这个业务中,因为所有数据都是通过加载数据输入的,并且自指定增量字段的值已被指定,因此不需要自动增量属性。

少一点,死亡不能被锁住。

9,解决方案2:强制模式1

为innodb_autoinc_lock_mode参数上可选的值是0, 1,和2。设置为1时,负载数据声明将退化为模式0。但如果设置为2,模式1将用于无论如何。

我们前面提到的,使用模式1能使自增ID值的负载产生的数据是不连续的,结果在主人与奴隶的矛盾时,binlog_format是1,所以2的前提下,设置binlog_format是行。

在binlog_format = 'row ',它是安全的设置innodb_autoinc_lock_mode 2。

如果允许的话,方案2比方案1轻一点,不需要修改数据和表结构。

相关文章

MySQL进程中主键唯一键重复值的解

MySQL进程中主键唯一键重复值的解

进程,解决方案,主键,一键,电脑软件,本文主要介绍在插入数据中避免将重复值插入到表中的方法,主要涉及忽略、重复密钥更新和替换。接下来,让我们看看三种方法。 忽略 使用忽略时,当插入的值与主键(主键)或唯一键(唯一键)重复时,它会自动忽略重复行,不…

如何画一个简单的甜蜜图画

如何画一个简单的甜蜜图画

图画,画一,甜蜜,简单,电脑软件,简单的绘画。 软件名称:Adobe Illustrator CS6(AI CS6)简化绿色中文版(32位+ 64位)软件大小:205mb更新时间:2014-05-11 1。在Ai软件中,创建一个新的800 * 800文档,选择一个椭圆工具,画一个椭圆图,填充颜色,如图所示。 2…

MySQL和Mongo简单的查询实例代码

MySQL和Mongo简单的查询实例代码

实例代码,查询,简单,电脑软件,MySQL,首先,我没有说关系数据库和非关系数据库(许多百度)直接切入主题的区别。 我想问的内容是:分数大于0,人的名字是鲍伯或杰克,分数的平均分数的最大分数被计算在内。 拿这个例子来尝试使用MySQL和MongoDB查询分…

Javascript闭包和承载功能

Javascript闭包和承载功能

闭包,功能,电脑软件,Javascript,关闭和钻营经常使用Javascript和更先进的技术,功能性编程语言都支持两个概念,因此,我们要充分发挥在Javascript函数式编程的特点,我们需要理解的概念,事实上是基础的封闭的必不可少的咖喱。 第一,咖喱的概念 在计算机科学中,…

为什么在PS图象处理软件做所有的动

为什么在PS图象处理软件做所有的动

都是,图象,处理软件,动作,电脑软件,问:我最近有一个很奇怪的现象,就是当我使用PS图象处理软件画图,所有的动作,例如缓慢显示,,我想与图片中的文本工具做一些的话,需要单击图片将在完成这个词这是为什么后立即显示在显示。 答:很多人都遇到过这个问…

ppt如何设置滚动字幕ppt基本教程

ppt如何设置滚动字幕ppt基本教程

教程,滚动字幕,如何设置,电脑软件,ppt,你知道如何在PPT中添加滚动字幕吗让小编辑器告诉你PPT是如何添加滚动字幕的。 添加滚动字幕的PPT方法: 打开PPT软件,创建一个新的空白幻灯片: 2点击插入下拉列表;点文本框,选择水平文本框: 3、在幻灯片上…

我会画一个绿色陶坛。

我会画一个绿色陶坛。

我会,画一,电脑软件,ai绘制绿色陶坛 软件名称:Adobe Illustrator CS6(AI CS6)简化绿色中文版(32位+ 64位)软件大小:205mb更新时间:2014-05-11 1。在AI软件中,一个新的800 * 800文档被建立,钢笔工具被选中,下面的图形被勾勒出来,颜色被填充,如图所示。…

photoshopcs5如何修改的地方色彩教

photoshopcs5如何修改的地方色彩教

教程,修改,色彩,地方,电脑软件,PS图象处理软件主要是针对数字图像由像素。其众多的编辑和绘图工具的使用,可以用于照片编辑更有效。所以你知道photoshopcs5修改图片颜色的地方吗这里是一个小编辑photoshopcs5如何修改图片的局部颜色。我们希…

PS给出了一张美丽星云的。

PS给出了一张美丽星云的。

出了,星云,美丽,电脑软件,PS,本教程是分享ps给朋友们的照片合成美丽星云的教程,很好的教程,值得学习,一起去看看吧! 设计素描 uff1a 原始图: 具体的合成步骤如下: 无论是修图,第一步是打开图片的图像分析(缺陷,穿帮,音调,和预期的效果,心里应该有一个…

WPS演示如何插入动作按钮WPS演示教

WPS演示如何插入动作按钮WPS演示教

教程,演示,按钮,动作,电脑软件,在WPS演示中,我们经常插入一些动画来吸引观众的注意力。例如,我们可以向它添加一些操作按钮。让我们告诉你小编给插入动作按钮通过WPS方式。 WPS演示插入动作按钮的方法: 1:根据以下步骤,1如果你想把鼠标,2,它会显…

如何在excel2010开做excel2010教程

如何在excel2010开做excel2010教程

教程,如何在,电脑软件,在Excel2007打开,网页变成灰色,什么事。让我们为你带来一个灰色的解决办法excel2010当你打开它使小编辑。 在excel2010打开,它是一个灰色的解决方案。 首先打开空白excel 工具选项> > > > >常规将忽略其他应用程序在…

真实年龄与名义年龄的快速计算

真实年龄与名义年龄的快速计算

计算,年龄,名义,真实,快速,小赵的办公室在Excel中制作了员工信息表、员工姓名、表ID号、出生日期等,而且还统计了每个员工的年龄(年龄),还统计了2012年5月31日每个员工的确切年龄(年龄)。 一个是捏手指计算。我们需要计算哪一年我们为什么不用函…