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. Latex 编辑数学公式——快速上手

    参考链接: https://blog.csdn.net/fansongy/article/details/45368915 特殊符号: https://blog.csdn.net/caiandyong ...

  2. 2017-2018-2 20165325 实验二《Java面向对象程序设计》实验报告

    一.面向对象程序设计-1 1.检查点要求 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 参考 http://www.cnblo ...

  3. C# 如何进行图像的压缩

    从网上找的非常有效.图片3M到500k private static ImageCodecInfo GetEncoderInfo(String mimeType) { int j; ImageCode ...

  4. FAT文件系统规范v1.03学习笔记---3.根目录区之FAT目录项结构

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  5. Node.js安装和简介

    Node.js是基于Chrome的V8 JavaScript引擎构建的JavaScript运行平台.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.js 的包 ...

  6. zookeeper3.4.6配置实现自动清理日志【转】

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

  7. vue 选城市三级联动

    <div id="example"> <select v-model="prov"> <option v-for="op ...

  8. vc++基础班[22]---文件的基本操作2

      MFC 中的 CFile 及其派生类中没有提供直接进行文件的复制操作,因而要借助于SDK API: SDK中的文件相关函数常用的有CopyFile().CreateDirectory().Dele ...

  9. 题解-AtCoder Code-Festival2017qualA-E Modern Painting

    Problem CODE-FESTIVAL 2017 qual A 洛谷账户的提交通道 题意:有一个\(n\)行\(m\)列的方格,在边界外有可能有机器人(坐标为\((0,x),(n+1,x),(x, ...

  10. 洛谷 P4948 拉格朗日多项式插值(杜老师板子)

    https://www.luogu.org/problemnew/show/P4948 这篇博客主要目的是存一下的dls的神奇板子,本来应该是推公式或者二分做的 但是dls的插值板子直接写好了这个特殊 ...