Sql Server之旅——第十二站 对锁的初步认识
作为一个开发人员,锁机制也是我们程序员必须掌握的东西,很久之前在学习锁的时候,都是教科书上怎么说,然后我怎么背,缺少一个工具让我们眼见为实。。。如果这样的话,学习一个东西就很容易忘记。。。因为这些都是你背诵过来的。。。这篇的话我就来分享一个工具来帮助我们学习锁。
一:到底都有哪些锁
学习锁之前,必须要知道锁大概有几种???通常情况下作为码农我们只需知道如下几个锁即可。。。
1.S(Share)锁
为了方便理解,我们可以直接这么认为,当在select的时候在表,数据页,记录上加上共享锁。
2.X(Exclusive) 锁
我们在delete数据的时候会在记录上附加X锁,我们知道X锁并不与其他的锁兼容。如果其他的锁与其遭遇,就会处于等待,后续我们再说。
3.U(Update)锁
顾名思义,我们在Update的时候,在寻找记录的过程中,会逐一的给记录附加U锁,如果找到了目标记录的话,则会将U锁转化为X锁。。。
4.I (Intent)锁
这个就是所谓的意向锁,一般都是给表和数据页附加的锁,好处就是防止被其他连接修改表结构。
二:天下无敌的SqlServer Profile
这个工具我想大家都明白,它的监视能力真的是无所不能。。。锁的痉挛状态也全在它的掌握之中。
1. 首先我做一个Person表,Name字段设定4000字节,这样一个数据页可以容纳2条数据,如下图:
DROP TABLE dbo.Person
CREATE TABLE Person(ID INT IDENTITY,NAME CHAR(4000) DEFAULT 'aaaaa')
--插入6条,生成3个数据页
INSERT INTO dbo.Person DEFAULT VALUES
go 6
2. 下面我们看看数据在数据页的分布情况。
3. 然后我们开启Profile,在“事件选择”的Events中选择”Lock:Acquired“和”Lock:Released“ ,然后运行,如下图:
三:使用测试数据
1. 首先我执行一个简单的 SELECT * FROM dbo.Person,看看表/数据页/记录的加锁情况。
从图中可以看到,select执行的大概步骤如下:
第一步:给表(Object)加上IS(意向共享锁)。
第二步:先给1:78号数据页加IS锁,扫描78号数据页,然后释放IS锁。
第三步:同样的道理扫描之后的数据页。
第四步:最后释放表的IS锁,结束整个锁流程。
看完上面的一系列的Lock:Acquired 和 Lock:Released的话,你有没有发现一个问题,不是说好给记录(RID)加上S锁么???这里没加,
是因为引擎进入78号数据页的时候,未发现它存在IU锁或者IX锁。。。所以。。。这个属于锁的组合,后续会说。
2. 接下来用UPDATE dbo.Person SET NAME='bbbbb' WHERE ID=3来看看update的整个过程,乍一看,Profile捕获到的记录还是比较多的,下面具体看图:
第一步:给表(Object)加上IX锁,
第二步:给数据页(1:78)数据页分配IU锁。然后开始逐一扫描78号数据页的RID记录,进入前就Acquired,退出后就Released,当扫描完78号数据页的所有RID后描完78号数据页的所有RID后,再释放78号数据页的IU锁,进入下一个数据页。。。
第三步:我们发现ID=3是在89号数据页上,当引擎扫到该RID之后,我们观察到89号的数据页由IU锁变成了IX锁,并且把1:89:0(slot为0的记录)由U锁变成X锁,变成X锁后,就排斥了其他所有的锁,这时候就可以进行Update操作了。
第四步:后面就继续90号数据页,步骤类似,第二步和第三步。
不知道细心的你有没有发现,在Released Object之前我们才释放1:89:0的X锁,然后释放89号数据页的IX锁,这说明什么???说明这个 Update是贯穿于这个事务的,不像Select操作中,扫完一个数据页就释放一个数据页。
3. 最后再看一个DELETE FROM dbo.Person WHERE ID=3 的操作。
大概扫了一下上面的图,或许你感觉和Update操作大差不差,会扫描数据页中的每个记录并加上U锁。当在1:89:0槽位中找到了目标记录后,然后将U锁转化为X锁,具体可以参考Update。
好了,最最单纯的DML操作都展示给你看了...我们知道生产环境没有这么简单,但是你有此宝贝,再多动动脑子就????????了。。。
Sql Server之旅——第十二站 对锁的初步认识相关推荐
- Sql Server之旅——第十二站 sqltext的参数化处理
Sql Server之旅--第十二站 sqltext的参数化处理 原文:Sql Server之旅--第十二站 sqltext的参数化处理 说到sql的参数化处理,我也是醉了,因为sql引擎真的是一个无 ...
- Sql Server之旅——第十四站 深入的探讨锁机制
上一篇我只是做了一个堆表让大家初步的认识到锁的痉挛状态,但是在现实世界上并没有这么简单的事情,起码我的表不会没有索引对吧,,,还 有就是我的表一定会有很多的连接过来,10:1的读写,很多码农可能都会遇 ...
- Sql Server之旅——第十站 简单说说sqlserver的执行计划
我们知道sql在底层的执行给我们上层人员开了一个窗口,那就是执行计划,有了执行计划之后,我们就清楚了那些烂sql是怎么执行的,这样 就可以方便的找到sql的缺陷和优化点. 一:执行计划生成过程 说到执 ...
- SQL Server索引进阶第十篇:索引的内部结构
索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其 ...
- Sql Server之旅——第十一站 简单说说sqlserver的执行计划
原文:Sql Server之旅--第十一站 简单说说sqlserver的执行计划 我们知道sql在底层的执行给我们上层人员开了一个窗口,那就是执行计划,有了执行计划之后,我们就清楚了那些烂sql是怎么 ...
- Sql Server之旅——第五站 确实不得不说的DBCC命令
Sql Server之旅--第五站 确实不得不说的DBCC命令 原文:Sql Server之旅--第五站 确实不得不说的DBCC命令 今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干 ...
- 网络云存储技术Windows server 2012 (项目十二 为企业构建虚拟共享服务(工作组模式下的DFS))
网络云存储技术Windows server 2012 (项目十二 为企业构建虚拟共享服务(工作组模式下的DFS)) 前言 网络存储技术,是以互联网为载体实现数据的传输与存储,它采用面向网络的存储体系结 ...
- SQL Server 6.5 如何升级到SQL Server 2000—以前原创(二)
SQL Server 6.5升级到SQL SERVER 2000 前提条件: 一.SQL Server 6.5 一般安装在 Windows NT 4.0 平台下,要求NT 达到 SP4 SQL Ser ...
- 数据库技术与应用(SQL Server)——【SQL Server单表查询(二)】
单表查询(二) SQL函数: SQL 拥有很多可用于计数和计算的内建函数 SQL函数分类: SQL Aggregate函数和SQL Scalar函数 SQL Aggregate函数(聚合函数或合计函数 ...
最新文章
- Ubuntu下安装Stanford CoreNLP
- OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks
- 数据库的字段是date java里面能用timestamp吗_数据库中DATETIME,DATE和TIMESTAMP类型 的区别...
- 细节:以为字符串不为空
- ts文件编译后变量在vscode里报错
- 客户端相关知识学习(四)之H5页面如何嵌套到APP中
- 澳洲虚拟主机空间_澳洲空间|澳洲虚拟主机|澳洲主机|澳洲虚拟空间-万纵科技 www.xmwzidc.cn...
- 中科院遥感与数字地球研究所博士后招聘
- (3)机器学习_逻辑模型_决策树
- 基于SSM的购物商城系统(含文档)
- Windows手动搭建邮箱服务器教程,操作简单易上手
- realitycapture 3D建模软件
- Mac安装Xcode
- 华为荣耀magic2手机系统更新鸿蒙,华为荣耀Magic2怎么禁止系统更新功能_如何关闭和禁用系统更新...
- ubuntu 您不是所有者所以您不能更改
- 一起来找茬:记一起 clang 开启 -Oz 选项引发的血案
- 华为、字节跳动、蔚来、康师傅、法雷奥、AIG等公司高管变动
- hiho 1051 : 补提交卡
- Java一些七七八八的配置
- 商品规格sku算法应用
热门文章
- [转] ArcEngine 产生专题图
- 服务发现与健康监测框架Consul-DNS转发的应用
- 【模拟】【codeforces】599B Spongebob and Joke
- Xcode命令行生成Bitcode静态库
- IIS6文件权限不对触发了Windows身份认证问题解决方法
- 【小安翻唱】凉宫春日的忧郁--冒険でしょでしょ第五届外语歌曲大赛助兴节目~绫魂论坛送aya的生日礼物筹备开始~...
- mac共享单个磁盘_如何与您的所有设备共享酒店的单个Wi-Fi连接
- ios numlock_从“提示”框:默认情况下启用NumLock,无广告的iOS应用和立体声供电的派对灯...
- PHP-FPM 与 Nginx 的通信机制总结
- 单词计数WordCountApp.class