我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql load 相关实验过程是怎样的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql load 相关实验过程是怎样的

本篇文章为大家展示了mysql load 相关实验过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一:load 的过程相当于是:先start transaction,然后再insert数据,最后commit

我猜测mysql 区别于oracle sqlldr,没有后者的rows的参数来控制每次提交的数据行

但是我感觉 mysql 是自己通过估算出一个值,来批量读取 ,我觉得他不是 一条一条的 insert的

二:load 如果数据存在(主键或者唯一键),默认是跳过的,可以选择replace存在就替换!

三:load 没有类似于oracle的 sqlldr的rows参数来控制每次提交的行数,只能先通过linux命令来

切分(split)成小文件来实现并行;

实验一:load会不会锁表

session1

[root@beijing-fuli-hadoop-04 ~]# cat /data/t.txt

100,  liu ,18

102,  liu ,18

101,  liu, 18

root@localhost : (none) 11:50:05>start  transaction;

Query OK, 0 rows affected (0.00 sec)

root@localhost : (none) 11:51:08>LOAD DATA LOCAL INFILE '/data/t.txt' INTO TABLE liuwenhe.t fields terminated by ','  LINES TERMINATED BY '\n' ;

Query OK, 3 rows affected (0.03 sec)

Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

然后不commit!

session2

如下全部等待

root@localhost : liuwenhe 11:52:36>delete from t  where  id=101;

root@localhost : liuwenhe 11:52:36>delete from t  where  id=102;

root@localhost : liuwenhe 11:52:36>delete from t  where  id=103;

如下 不等待

delete from t  where  id=104

delete from t  where  id=100

结论:

load 在提交之前,会锁定所有刚load的数据!!!也间接的说明这是一个事务把三个数据

都load进去了,会不会是 mysql 默认把N行数据作为一个事务呢?采用大数据量来做验证

实验二:load是不是一个事务

1.文件/data/12.txt是26135101行数据的文件

2.然后开始load

root@localhost : liuwenhe 13:54:50>LOAD DATA LOCAL INFILE '/data/12.txt' INTO TABLE liuwenhe.t fields terminated by ','  LINES TERMINATED BY '\n' ;

3.另开一个会话,查询数据,发现再load完成之前一直是空,

root@localhost : liuwenhe 13:55:15>select  count(*) from  t;

+----------+

| count(*) |

+----------+

|        0 |

+----------+

1 row in set (0.66 sec)

这就进一步说明 load操作是一个事务的!!!

实验三:是否允许在同一个表上同时进行load?  只要没有冲突是可以并行的!

这里所说的冲突是指: 已经load 处理了的数据中和另一个会话要处理的数据有冲突,具体实验如下:

假如1.txt 文件 是id从1到2147483647这个范围的数据,而2.txt是id=2147483647的

一条数据,而3.txt是id从1到3的范围并且还有id=2147483646这条数据

具体如下:

[root@beijing-fuli-hadoop-04 liuwenhe]# cat  2.txt

26293013,liu  ,18

[root@beijing-fuli-hadoop-04 liuwenhe]# cat  3.txt

1,  liu  ,18

26293013,liu  ,18

具体实验过程:

实验1)

会话1:

执行这个,因为数据量比较大,所以会执行一会

root@localhost : liuwenhe 13:54:50>LOAD DATA LOCAL INFILE '/data/liuwenhe/1.txt' INTO TABLE liuwenhe.t fields terminated by ','  LINES TERMINATED BY '\n' ;

会话2:

[root@beijing-fuli-hadoop-04 liuwenhe]# cat  2.txt

26293013,liu  ,18

然后会话1还没有结束呢,执行如下操作,发现没有等待!确实进去了,

root@localhost : liuwenhe 13:54:50>LOAD DATA LOCAL INFILE '/data/liuwenhe/2.txt' INTO TABLE liuwenhe.t fields terminated by ','  LINES TERMINATED BY '\n' ;

root@localhost : liuwenhe 17:33:18>select * from  t where id =26293013;

+----------+-------+------+

| id       | name  | num  |

+----------+-------+------+

| 26293013 | liu   |   18 |

+----------+-------+------+

1 row in set (0.12 sec)

说明:load顺序执行,当执行到的id=1的数据到达innodb层,mysql就会把id=1的数据上锁gap锁,

这时候你再load=1的数据就会有锁等待,但是你没有执行到id=26293013的数据,也就没有给这条数据上锁,所以你并行执行另一个load (id=26293013)的数据就不会等待。

实验2)

会话1:

执行这个,因为数据量比较大,所以会执行一会

root@localhost : liuwenhe 13:54:50>LOAD DATA LOCAL INFILE '/data/liuwenhe/1.txt' INTO TABLE liuwenhe.t fields terminated by ','  LINES TERMINATED BY '\n' ;

会话2:

在会话1还没有结束的时候,执行如下发现等待,因为id=1的数据被会话1锁定,所以下面的操作是需要等待的,因为load  3.txt是先处理id=1的数据,但是它已经被锁定了,

[root@beijing-fuli-hadoop-04 liuwenhe]# cat  3.txt

1,  liu  ,18

26293013,liu  ,18

root@localhost : liuwenhe 13:54:50>LOAD DATA LOCAL INFILE '/data/3.txt' INTO TABLE liuwenhe.t fields terminated by ','  LINES TERMINATED BY '\n' ;

实验3)load 产生死锁:

会话1:

执行这个,因为数据量比较大,所以会执行一会;

root@localhost : liuwenhe 13:54:50>LOAD DATA LOCAL INFILE '/data/liuwenhe/1.txt' INTO TABLE liuwenhe.t fields terminated by ','  LINES TERMINATED BY '\n' ;

会话2:

在会话1还没有结束的时候,执行如下发现等待,因为id=1的数据被会话1锁定,但是id=26293013的数据没有被锁定呢,所以说load  4.txt的时候,能把第一条数据(id=26293013)load进innodb引擎层并且锁定,但是1这条数据却被锁定,进而会话1和会话2产生锁等待!

[root@beijing-fuli-hadoop-04 liuwenhe]# cat  4.txt

26293013,liu  ,18

1,  liu  ,18

root@localhost : (none) 18:13:10>LOAD DATA LOCAL INFILE '/data/liuwenhe/4.txt' INTO TABLE liuwenhe.t fields terminated by ','  LINES TERMINATED BY '\n' ;

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

注释:为什么会选择回滚会话2的事务?因为我开启了死锁检测,然后数据库选择插入更新或者删除的行数最少的事务回滚

MySQL 如何处理死锁?

MySQL有两种死锁处理方式:

  1. 等待,直到超时(innodb_lock_wait_timeout=50s)。

  2. 发起死锁检测,主动回滚一条事务,让其他事务继续执行(innodb_deadlock_detect=on)。

由于性能原因,一般都是使用死锁检测来进行处理死锁。

死锁检测

死锁检测的原理是构建一个以事务为顶点、锁为边的有向图,判断有向图是否存在环,存在即有死锁。

回滚

检测到死锁之后,选择插入更新或者删除的行数最少的事务回滚,基于 INFORMATION_SCHEMA.INNODB_TRX 表中的 trx_weight 字段来判断。

上述内容就是mysql load 相关实验过程是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql load 相关实验过程是怎样的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

CentOS安装mono配置系统相关编译器的过程是怎样的

这篇文章给大家介绍CentOS安装mono配置系统相关编译器的过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。对大家推荐很好使用的CentOS安装系统,像让大家对CentOS安装系统有所了解,然后对CentO
2023-06-16

Python程序的相关执行方案是怎么样的

Python程序的相关执行方案是怎么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。主要是以跟踪一个比较简单的Python程序的相关执行,来简单的讨论关于Py
2023-06-17

有效使用ADO操作相关实现是怎样的

本篇文章给大家分享的是有关有效使用ADO操作相关实现是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。其中路径名可以根据自己系统安装的ADO支持文件的路径来自行设定。当编译
2023-06-17

.NET Framework初始化相关实现技巧是怎样的

本篇文章给大家分享的是有关.NET Framework初始化相关实现技巧是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如何正确的应用.NET Framework,决定了
2023-06-17

VB.NET实现接口的相关操作方法是怎样的

VB.NET实现接口的相关操作方法是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。开发人员在应用VB.NET进行实际开发的时候,发现其中有不少跟其他语言不一样的地方,
2023-06-17

linux下安装mysql的过程是怎么样的

这篇文章给大家介绍linux下安装mysql的过程是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一 安装前准备1、检查是否已经安装过mysql,执行命令[root@localhost /]# rpm -qa
2023-06-28

SAP 基于采购订单的MIRO校验过程是怎样的

SAP 基于采购订单的MIRO校验过程是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、介绍发票校验是物料管理(MM)系统的一部分。它提供物料管理部分和财务会计,
2023-06-05

Linux系统中的Mysql安装过程是怎样的

这期内容当中小编将会给大家带来有关Linux系统中的Mysql安装过程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Mysql是 Oracle 旗下得一款产品,属于关系型数据库,在 WEB 应用方
2023-06-28

编程热搜

目录