在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

一致性非锁定读与一致性锁定读的大数据分析

119次阅读
没有评论

共计 2100 个字符,预计需要花费 6 分钟才能阅读完成。

本篇文章为大家展示了一致性非锁定读与一致性锁定读的大数据分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

背景

innodb 存储引擎实现了两种标准的行级锁:S 锁和 X 锁,S 锁被称为共享锁,允许事务读一行数据,X 锁被称为排它锁,允许事务删除或更新一行数据。

一致性非锁定读指的是如果一条记录被加了 X 锁,其他事务还能读取这条记录。

一致性锁定读指的是一个事务可以通过 SELECT 语句给某条记录加 X 锁或者 X 锁。

一个小栗子

我们假设有一个表和两个事务,表名字为 mytest,事务名字为 t1 和 t2:

t1t2t3t4abbbbccc

t1 和 t2 的执行时序如下:

这里我先抛出两个问题:

上面 Mark A 处显然 t1 已经给记录加了 X 锁,并且在事务内修改了数据,此时 t2 看到的数据是什么?

上面 Mark B 处事务 t1 已经提交此时 t2 看到的数据是什么?

行多版本控制

行多版本将的是 innodb 为每个行记录存储了多个版本,记住,这里是多个版本不是两个版本,在刚开始接触多版本的时候,我的疑问是 innodb 对每个行要存储多个版本是多么浪费存储空间呀? 然而进一步了解,原来所谓的多版本只是 innodb 聪明地撒了个谎,多个版本是通过 undo 日志实现的,这里可以理解为既然 undo 日志包括了所有用来恢复历史版本数据的信息,那么我们只要将“不同版本”指针指向不同时间节点的 undo 日志即可,这样读取的时候通过对不同时间节点的 undo 日志进行恢复从而得到不同的版本数据。同时对于 undo 日志的读取是不需要加锁的,因此这极大地提高了数据库的并发性。

这里回答了上面的 *** 个问题:t2 此时看到的应该是历史版本的数据,也就是 t1 修改之前的数据,如下:

mysql  select * from mytest where t2= bb  +------+------+------+------+ | t1 | t2 | t3 | t4 | +------+------+------+------+ | a | bb | bb | ccc | +------+------+------+------+ 1 row in set (0.00 sec) READ COMMITTED  与  REPEATABLE READ

这里复习一下 SQL 标准定义的四个隔离级别分别为:

READ UNCOMMITTED

READ COMMITTED

REPEATABLE READ

SERIALIZABLE

innodb 默认的隔离级别为 REPEATABLE READ 且使用 next key locking 技术解决的幻读的问题,READ  COMMITTED 值的是一个事务可以读取其他事务已经提交的数据,而 REPEATABLE  READ 要求一个事务在事务内可以重复读取一条记录,因此上面第二个问题的答案是此时 t2 看到的是什么跟此时数据库的隔离级别有关系,比如此时的隔离级别为:

mysql  select @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in set (0.00 sec)

因此 t2 在 Mark B 的地方看到的应该是老数据:

mysql  select * from mytest where t2= bb  +------+------+------+------+ | t1 | t2 | t3 | t4 | +------+------+------+------+ | a | bb | bb | ccc | +------+------+------+------+ 1 row in set (0.00 sec) mysql

如果此时的事务隔离级别为 READ COMMITTED,则 t2 在 Mark B 处看到的应该是新数据。

一致性锁定读

一致性非锁定读的情况下即使记录因为 UPDATE 而被加了 X 锁,其他事务仍然能够读取记录,不会阻塞。而如果一个事务希望在读取的时候就把记录锁住,不允许其他事务进行修改应该怎么做呢? 那就是 SELECT   hellip; FOR UPDATE,SELECT hellip; FOR UPDATE 显式地给一条记录加 X 锁,因此其他事务不能获取该记录的任何锁。我们也可以使用 SELECT hellip;  LOCK IN SHARE MODE 来给记录显式地加 S 锁,因此其他事务能够获取该记录的 S 锁而不能获取该记录的 X 锁,这两种语句都是有特定的应用场景的。

再总结一下,一致性非锁定读讲的是一条记录被加了 X 锁其他事务仍然可以读而不被阻塞,是通过 innodb 的行多版本实现的,行多版本并不是实际存储多个版本记录而是通过 undo 实现。一致性锁定读讲的是我可以通过 SELECT 语句显式地给一条记录加 X 锁从而保证特定应用场景下的数据一致性。

上述内容就是一致性非锁定读与一致性锁定读的大数据分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计2100字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 99热这里只有精品国产在热久久 | 国产日韩综合一区二区性色av | 成人欧美一级毛片免费观看 | 欧美人与动欧交视频 | 特级毛片在线大全免费播放 | 一级特黄a免费大片 | 久久6免费视频 | 欧美视频在线看 | 韩国在线精品福利视频在线观看 | 全部免费毛片在线播放 | 国产人成亚洲第一网站在线播放 | 孕妇奶水仑乱a级毛片免费看 | 国产av一区二区精品久久 | 午夜婷婷| 成年人午夜视频 | 日本第一页 | 久久爱一区 | 久久www免费人成看国产片 | 一区二区福利视频 | 综合自拍亚洲综合图不卡区 | 成年无码av片在线狼人 | 杨幂国产精品福利在线观看 | 国产真人性做爰久久网站 | 亚洲精品久久久久久无码色欲四季 | 特级毛片在线大全免费播放 | 久久久国产这里有的是精品 | 国产成人午夜视频 | 国产麻豆精品 | 亚洲色欲色欲www在线播放 | 人妻少妇边接电话边娇喘 | 久久亚洲伊人 | 精品综合网 | 国产精品视频第一页 | 国产特级毛片aaaaaa视频 | 精品亚洲成av人在线观看 | 欧美成人一区二区三区不卡视频 | 久久99热精品免费观看k影院 | 被伴郎的内捧猛烈进出h视频 | 精品国产污污免费网站入口 | 国产麻无矿码直接观看 | 黄色软件在线播放 |