专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

SQLSERVER的四个事务隔离级别到底怎么理解?

  一:背景1。讲故事
  在有关SQLSERVER的各种参考资料中,经常会看到如下四种事务隔离级别。READUNCOMMITTEDREADCOMMITTEDSERIALIZABLEREPEATABLEREAD
  随之而来的是大量的文字解释,还会附带各种脏读,幻读,不可重复读常常会把初学者弄得晕头转向,其实事务的本质就是隔离,落地就需要锁机制,理解这四种隔离方式的花式加锁,应该就可以入门了,那如何可视化的观察锁过程呢?这里借助SQLProfile工具。二:四种事务隔离方式1。测试数据准备
  还是用上一篇创建的post表,脚本如下:CREATETABLEpost(idINTIDENTITY,contentchar(4000))GOINSERTINTOdbo。postVALUES(aaa)INSERTINTOdbo。postVALUES(bbb)INSERTINTOdbo。postVALUES(ccc);INSERTINTOdbo。postVALUES(ddd);INSERTINTOdbo。postVALUES(eee);INSERTINTOdbo。postVALUES(fff);
  有了测试数据之后,我们按照隔离级别高低的顺序来观察吧。2。SERIALIZABLE事务
  事务串行化其实很好理解,如果要在C中找对应那就是ReaderWriterLock,读写事务是完全排斥的,接下来把SQLSERVER的隔离级别调整为SERIALIZABLE。SETTRANISOLATIONLEVELSERIALIZABLEGOBEGINTRANSELECTFROMdbo。postWHEREid3COMMIT
  打开profile,选择lock:Acquired,lock:Released,SQL:StmtStarting选项,开启观察。
  从图中可以清楚的看到,SQLSERVER直接对post附加了S锁,在COMMIT之后才真正的释放,在S锁期间,Insert和Update引发的X锁是进不来的,所以就会存在相互阻塞的情况,也许这就是串行化的由来吧。
  sqlserver是一个支持多用户并发的数据库程序,如果锁粒度这么粗,必定给并发带来非常大的负面影响,不过文章开头的那三个指标脏读,幻读,不可重复读肯定都是不会出现的。2。REPEATABLEREAD事务
  什么叫可重复读呢?简而言之就是同一个select查询执行二次,不会出现记录修改的情况,在真实场景中两次select查询期间,可能会有其他事务修改了记录,如果当前是REPEATABLEREAD模式,这是被禁止的,接下来的问题是如何落地实现呢?我们来看看SQLSERVER是如何做到的,参考sql如下:SETTRANISOLATIONLEVELREPEATABLEREADGOBEGINTRANSELECTFROMdbo。postWHEREid3COMMIT
  这个图可能有些朋友看不懂,我稍微解释一下吧,数据库由数据页Page组成,数据页由记录RID组成,有了这个基础就好理解了,SQLSERVER会在事务期间把1:489:0也就是id3这个记录全程附加S锁,直到事务提交才释放S锁,在事务期间任何对它修改的X锁都无法对其变更,从而实现事务期间的可重复读功能,如果大家不明白可以再琢磨琢磨。
  这里有一个细节需要大家注意一下,可重复读的场景下会出现幻读的情况,幻读就是两次查询出的结果集可能会不一样,比如第一次是3条记录,第二次变成了5条记录,为了方便理解我来简单演示一下。会话1SETTRANISOLATIONLEVELREPEATABLEREADGOBEGINTRANSELECTFROMdbo。postWHEREid3WAITFORDELAY00:00:05SELECTFROMdbo。postWHEREid3COMMIT会话2
  在会话1执行的5s期间执行会话2语句。BEGINTRANINSERTINTOdbo。post(content)VALUES(gggggg)COMMIT
  稍等片刻之后,会发现多了一个记录7,截图如下:
  3。READCOMMITTED
  提交读是目前SQLSERVER默认的隔离级别,它是以不会出现脏读为唯一目标,何为脏读,简而言之就是读取到了别的事务未提交的修改数据,这个数据有可能会被其他事务在后续回滚掉,如果真的被其他事务回滚了,那你读到了这样的数据就是错误的数据,可能会给你的系统带来非常隐蔽的bug,为了说明这个现象,我们用两个会话来测试一下帮助大家理解。会话1
  在这个会话中,将id3的记录修改成zzzzzBEGINTRANUPDATEdbo。postSETcontentzzzzzWHEREid3WAITFORDELAY00:00:05ROLLBACK会话2
  这个会话中,重复执行sql查询。BEGINTRANSELECTFROMdbo。postWITH(NOLOCK)WHEREid3脏读啦WAITFORDELAY00:00:05SELECTFROMdbo。postWITH(NOLOCK)WHEREid3正确的数据COMMIT
  为了实现脏读这里加了nolock关键词,从图中明显的看到,获取的zzzzz数据是错误的,在一些和钱打交道的系统中是被严厉禁止的。
  有了这些基础再理解可提交读可能会容易些,是不是很好奇SQLSERVER是如何实现的呢?参考sql如下:SETTRANISOLATIONLEVELREADCOMMITTEDGOBEGINTRANSELECTFROMdbo。postWHEREid3COMMIT
  从加锁流程看,SQLSERVER会逐一扫描数据页附加IS锁,扫完马上就释放,不像前面那样保持到COMMIT之后,如果找到记录所在的Page时,会对下面的所有记录附加S锁,这个时候X锁就进不来了,这就是它的实现原理,大家可以把刚才的脏读的sql中的nolock去掉试试看,两次读取结果都是一样的。4。READUNCOMMITTED
  本质上来说READUNCOMMITTED和nolock的效果是一样的,会引发脏读现象,主要是因为READUNCOMMITTED根本就不会对表记录使用任何锁,参考sql如下:SETTRANISOLATIONLEVELREADUNCOMMITTEDGOBEGINTRANSELECTFROMdbo。postWHEREid3COMMIT
  接下来观察sqlprofile的输出。
  可以看到READUNCOMMITTED只会对表和堆表结构这种架构附加锁,不会对表中记录附加任何锁,也就会引发脏读现象。三:总结
  其实SQLSERVER还有带版本的SNAPSHOT隔离级别,在真实场景中往往会给TempDB造成很大的压力,这里就不介绍了。
  相信通过Profile观察到的加锁动态过程,会让大家有更深入的理解。

经典牛仔风,看Diesel2023春季成衣教你牛仔风搭配(上)Diesel的格伦马滕斯在预展时声称,横跨在巨大跑道中间的四个充气人形已被吉尼斯世界纪录认证为有史以来最大的。这并不是他们值得注意的全部很难得到一个概览,但从我的角度来看,他们似乎客户成交再也不回复了?是你没掌握这些回访话术新手纹绣师们千万不要觉得纹完眉毛之后,就对顾客不管不顾,我们除了纹眉功底要好,还要做好售后服务,让老顾客真心觉得你好才会转介绍新顾客,顾客的口碑才是最重要的一环!!今天小聚就给大家浙江教育观察大学生为啥在宿舍楼道里走秀?该校学生在楼道里走秀温州职业技术学院供图中新网杭州10月30日电题浙江教育观察大学生为啥在宿舍楼道里走秀?记者童笑雨把楼道当T台,穿上自己搭配的衣服,配合专业动作,高级感满满。近日性能提升颜值拉垮?实战篮球鞋NikeAirZoomG。T。Cut2EP头条创作挑战赛我在头条搞创作第二期秋日生活打卡季nike想给男朋友买一双篮球鞋,请问有推荐的吗轻薄的鞋面带来轻巧的感受,虽说鞋面感觉上轻薄,但是得益于鞋面材料的使用,耐久度和强度得归家的路,温暖的情,从某康事件看人间大道今天,看到从某康外跑的少男少女,一身疲倦,一身慌恐,仍然坚定不移地向家乡出发,我内心震惊了!我不知道他们是怎样出来的,有人说他们是冲破门岗跑来的,有人说他们是翻越了高高带刺的栅栏跳当你累了,感到孤独,看看这些人怎么说?当你感到孤独,当你累了,不妨给自己的心放个假。一直很欣赏的一段名言,与你共勉除了贫穷和饥饿,世界上最大的问题是孤独和冷漠。物质的丰富,无法掩盖精神的贫穷。有的人通常不讲道理没有逻辑也许是使命吧你拼命努力工作的动力是什么每个个体都有存在的价值,虽然不知道500年后这个世界会怎样?我们的子子孙孙又会怎样?我们也不用去想象。最近经常看到关于宇宙中的事情,慢慢地改变了我的认知,两个人在一起,有这种感觉的,才叫做真爱文墨然在感情的世界里,真正的爱应该是让人感觉到舒服自在的,你可以无忧无虑地做自己,不需要去迎合,委屈自己。越是爱你的人,越会给你尊重。爱是一种感觉,是一种发自内在最真实的情感。只有感恩的心,行动的腿常言道人穷不入众,言轻莫劝人马瘦不走兵,人穷不走亲。中国人的道,逐渐转变为金钱上的道,美帝的道德秩序的转化。今天还是穷人,这就位卑言轻了,连道都称不上,穷生奸计,更别说是道德靠后了饮酒之我见偶感许多文章把酒吹得天花乱坠,似乎没有了酒世间就缺了无数美好许多人能找出喝酒的益处,好像善饮是一种美德。我自己却是个坚决的否酒派!议论酒的名句很多,我觉得最中肯的当属酒能乱性。说何摘抄分享一下人民日报金句(学习共勉)(二)1是朋友,是好朋友,是我的靠山,是精神支柱,是站在我身边听我说,是替我撑腰的人。人民日报2很少和你说谢谢,因为觉得太过官方,但就在此刻真的好想跟你说谢谢,谢谢你让我人生的大多时候都
MyBatis官方文档阅读笔记(三)MyBatis映射文件前言demo的项目地址httpsgitee。comshuashuaworldshuashuablogtreemasterdemomybatissimplede梅花香自苦寒来作为作家,对文如其人我是深以为然的。和国画家严木华先生聊他的画他的人生,欣赏他的画作之后,对画如其人,人如其画的说法,我更十分地相信了。木华是南粤地界上较少见的高挑个子,却略显瘦弱光威复材前三季度净利7。5亿元同比增长21。36中证网讯(王珞)光威复材10月24日晚间披露2022年三季度报告。公司前三季度实现营业收入19。4亿元,同比下降1。14归属于上市公司股东净利润7。5亿元,同比增长21。36。其中油价调整消息今天10月25日,全国各地加油站9295汽油价格本年度第二十次油价调整正式落幕,此次油价上调0。14元升,这也是今年以来油价第十二次上调,此次上调后各地的95号汽油油价将会再次恢复到九元时代,同时新一轮的油价调整也来开了帷幕。华刘维伟快哭了,CBA潜力新星爆发,他才23岁,帮助浙江队压制辽篮刘维伟快哭了,CBA潜力新星大爆发,他才23岁,帮助浙江男篮压制辽宁队,能否冲击总冠军?CBA新赛季的比赛继续进行,从目前积分榜来看有几支球队取得了一鸣惊人的成绩,他们分别是浙江男孕期营养大全孕期各个阶段营养怎么补随着生活水平的提高和营养知识的普及,孕期进补从简单的供能物质的补充,到多种维生素和矿物质的补充可谓是面面俱到。到底每个阶段怎么补,需要哪些营养素能有效促进胎儿发育,今天小爱就为你一拒做炫娃党从小被父母炫耀长大的孩子,大多有三大缺点刚刚过去的这个周末,玲玲的妈妈带她参加了一场朋友聚会,大家约好一起带孩子出来玩一玩。上午的欢乐趴是在儿童游乐场,孩子们尽情玩耍,气氛非常轻松愉快。中午时分,大家相约又一起来到一家网每一个巨婴背后,都有一个巨婴家长凭啥不给我娃提裤子虽然同为家长,但我们有时候也难以理解一些家长。每个家长在真正成为家长之前,也许都对长辈这么说过我娃如果出生,就让他自生自灭去,我工作这么忙,可没工夫管他这管他那的,爱长成啥样长成啥不要摧毁孩子的自信今天,对于小诺来说,日子多少有点晦暗,因为他满怀热情地向远方的妈妈要钱打算买一本喜欢的书看,可是妈妈怀疑不久前买给小诺的书他没看完,无论儿子怎么说,妈妈就是不信。小诺伤心地哭了,妈S12奇迹诞生!EDG落后一万翻盘,Deft偷家最后一刻,水晶突然复活各位LPL的观众和英雄联盟召唤师大家好,这里是天下游戏汇。S12最后一场淘汰赛的第二局比赛诞生了英雄联盟电子竞技历史上最让人意想不到的名场面,EDG在落后一万经济的情况下,通过顽强双11预售今日全面开启!除省钱攻略之外,一加还为原神迷带来惊喜每年的双十一都会提前几天拉开帷幕,今年也不例外,当下最主流的两大电商平台已经早早的开启了预售活动,其中京东为20日,天猫则是在24日。在这段时间已经有不少人开始将心仪的产品加入购物
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网