SqlServer需要在执行操作前对目标资源获取所有权,那么久发生锁定,是一个逻辑概念。为了保证事务的ACID特性设计的一种机制。

在多用户并发操作数据时,为了出现不一致的数据,锁定是必须的机制。使用锁可保证数据一致性,但这也致使你在编码、设计时要把锁定考虑进去。如果锁的数量太多,持续时间过长,对并发和系统性能都没有好处。

在SQL Server支持的隔离级别中,级别越高,严格性也就越高,这就增加了阻塞甚至死锁的机会。

锁资源:行、页、或者表(如果有分区、可能还有分区锁)

锁模式:共享锁、排他锁、更新锁、意向锁、

锁的所有权:锁的范围。绝大部分锁的范围是事务范围的

锁定的元数据:使用sys.dm_tran_locks这个DMV解锁。

SQLServer可以在用户数据的行(RID/KEY锁)、页(PAGE锁)或者表(OBJECT锁)级别上锁定资源。SQLServer会尽可能申请行级锁、以便获取最高的并发度。

SQL Server锁住一个索引上的行时,在sys.dm_tran_locks中会显示Key;如果是锁住了堆表上的数据行,则会显示RID,如果堆上有非聚集索引,实际上是锁住了整个索引行,而不仅仅是索引键。当会话运行在SERIALIZABLE隔离级别下,还可能会锁住索引行的一个范围

根据不同的隔离级别,可以支持两种Key锁,如果事务的隔离级别为READ COMMITTED/REPEATABLE READ,会锁住查询需要的索引行,如果数据表上有聚集索引,实际的数据行在叶子节点中,显示KEY锁,如果表为堆表,SQL Serer会把锁加到非聚集索引中,也叫KEY锁,或者加在堆的数据行上,叫RID锁

隔离级别为SERIALIZABLE,为了避免幻读,SQL Server 会锁住一个范围,如果所查询的是范围值,那么需要锁住足够的部分,确保另外一个事务不会在这个事务扫描的过程中插入值,这种说在DMV中显示key-range锁。

幻读:如果事务A中有两个相同的查询,而且带有了限定词(如WHERE条件)在第一次查询之后,会锁住查询所需的数据范围,而事务B这时插入了一行满足WHERE条件的数据,在第一次查询中没有这条数据,没有锁住,插入是成功的,当事务A进行第二次查询时,就会出现这条新数据,于是就出现了幻读。

SQLServer锁的基础问题探究的更多相关文章

  1. sqlserver锁表、解锁、查看锁表

    sqlserver锁表.解锁.查看锁表 http://www.cnblogs.com/zfanlong1314/p/3698566.html http://www.cnblogs.com/chjf20 ...

  2. SQLserver锁和事务隔离级别的比较与使用(转)

    SQLserver锁和事务隔离级别的比较与使用(转) http://www.cnblogs.com/chenlulouis/archive/2010/12/06/1898014.html http:/ ...

  3. SQLServer锁的机制

    SQLServer锁的机制:共享锁(S)排它锁(X)更新锁(U)意向共享 (IS)意向排它 (IX) 意向排它共享 (SIX)架构修改(Sch-M) 架构稳定性(Sch-S)大容量更新(BU)

  4. SQLServer锁的概述

    SQLServer锁的概述   锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了 ...

  5. 并发王者课-铂金1:探本溯源-为何说Lock接口是Java中锁的基础

    欢迎来到<并发王者课>,本文是该系列文章中的第14篇. 在黄金系列中,我们介绍了并发中一些问题,比如死锁.活锁.线程饥饿等问题.在并发编程中,这些问题无疑都是需要解决的.所以,在铂金系列文 ...

  6. sqlserver锁表、解锁、查看销表 (转载)

    sqlserver中怎么锁表.解锁.查看销表呢,下面我以三个不同的实例给各位朋友详细介绍一下有需要的朋友可参考一下. 更多详细内容请查看:http://www.111cn.net/database/O ...

  7. SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

    Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   ...

  8. 掌握SQLServer锁的相关概念

    一.为什么要引入锁 当多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: ◆丢失更新 A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 ◆脏读 ...

  9. HIT Software Construction Lab6引发出来对锁的问题的探究

    前言 做完lab5开始做lab6了鸭,哈工大计算机学院的学生永不停歇.在做lab6的时候,我在想移动猴子是锁一整个ladder(ADT)还是只锁一个ladder的一个域Monkey数组呢?这两个好像差 ...

随机推荐

  1. SQL Server - NOLOCK

    NOLOCK 一般用于此类语句中:select * from t with(NOLOCK)nolock是不加锁查询,可以读取被事务锁定的数据,也称为脏读.说明:使当前会话的查询,不受其它会话的事务所阻 ...

  2. 题解-PKUWC2018 Slay the Spire

    Problem loj2538 Solution 在考场上当然要学会写暴力,考虑如果手上已经有了\(a\)张攻击牌和\(b\)张强化牌: 首先强化牌会在攻击牌之前用(废话),其次要将两种牌分别从大往小 ...

  3. Ubuntu16.04用源安装Nginx+PHP5.6+MySQL5.6

    安装Nginx 1.首先添加nginx_signing.key(必须,否则出错) $ wget http://nginx.org/keys/nginx_signing.key $ sudo apt-k ...

  4. cryptsetup文件系统加密

    今天做了SYC攻防题的文件系统挂载部分,在找到挂载最内层的final文件时发现mount无法识别,这也许就是一个加密的文件系统吧,还好-在龟速的 网络环境下查阅到了losetup循环挂载系统命令,但是 ...

  5. LabVIEW--为控件添加说明信息

    之前只知道为VI添加说明信息(在VI的属性里面添加,快捷键ctrl+I 打开),今天知道了控件也可以添加说明信息,这样就方便了许多,极大的提高了程序的可读性.

  6. springboot 文件上传大小配置

    转自:https://blog.csdn.net/shi0299/article/details/69525848 springboot上传文件大小的配置有两种,一种是设置在配置文件里只有两行代码,一 ...

  7. 【原创】大数据基础之Kerberos(1)简介、安装、使用

    kerberos5-1.17 官方:https://kerberos.org/ 一 简介 The Kerberos protocol is designed to provide reliable a ...

  8. HomeBrew 安转beta版软件

    今天想装测试版的cocoapods,用 brew install cocoapods 后,总是安装稳定版,就是1.1.0,不是最新的beta版,发现用下面这个命令可以装最新beta版 brew ins ...

  9. 洛谷P4859 已经没有什么好害怕的了 [DP,容斥]

    传送门 思路 大佬都说这是套路题--嘤嘤嘤我又被吊打了\(Q\omega Q\) 显然,这题是要\(DP\)的. 首先思考一下性质: 为了方便,下面令\(k=\frac{n+k}{2}\),即有恰好\ ...

  10. a href=#与 a href=javascript:void(0) 的区别(转)

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP <a href="javascript:void(0)" onCl ...