锁定义(Definition)

锁定是 DBMS 将访问限制为多用户环境中的行的过程。 以独占方式锁定行或列,不允许其他用户访问锁定的数据,直到锁被释放。 这可确保两个用户不能同时更新行中的同一列。

锁会从资源角度来看很高,应仅在需要时保持数据完整性。 在数据库中的数百或数千个用户可能会尝试访问的记录每秒 — 如数据库连接到 Internet,不必要的锁定可能会迅速导致应用程序中的性能下降。

设置LockType打开之前的属性记录集指定打开它时,应使用哪种类型的锁定该提供程序。 要返回的锁定中使用的一种开放类型的属性中读取记录集对象。

提供程序可能不支持所有的锁类型。 如果提供程序无法支持请求LockType设置,它将替换为另一种类型的锁定。 若要确定在可用的实际锁定功能记录集对象,使用支持方法替换adUpdate和adUpdateBatch.

AdLockPessimistic如果不支持设置CursorLocation属性设置为adUseClient。 如果设置不支持的值,不会产生错误;最接近的支持LockType将改为使用。

LockType属性为读/写时记录集打开时为已关闭,并且是只读的。

锁资源(Resource)

标识被锁定资源的值。 值的格式取决于在所标识的资源类型类型列:类型值:资源值。

RID:格式为 fileid:pagenumber:rid 的标识符,其中 fileid 标识包含页的文件,pagenumber 标识包含行的页,rid 标识页上的特定行。 fileid 与匹配file_id中的列sys.database_files目录视图。

KEY: 数据库引擎内部使用的十六进制数。

PAG:格式为 fileid:pagenumber 的数字,其中 fileid 标识包含页的文件,pagenumber 标识页。

EXT:标识区中的第一页的数字。 该数字的格式为 fileid:pagenumber。

选项卡上: 没有提供信息,因为表中已标识ObjId列。

DB: 没有提供信息,因为在已标识的数据库dbid列。

FIL: 文件匹配的标识符file_id中的列sys.database_files目录视图。

APP:被锁定的应用程序资源的唯一标识符。 格式为 DbPrincipleId:<为 16 个字符的资源字符串的前两个 ><哈希运算值 >。

MD:随资源类型而变化。 有关详细信息,请参阅的说明resource_description中的列sys.dm_tran_locks (TRANSACT-SQL)。

HBT:没有提供任何信息。 使用sys.dm_tran_locks改为动态管理视图。

AU:没有提供任何信息。 使用sys.dm_tran_locks改为动态管理视图。

锁类型(锁粒度)(Type)

锁的粒度,是锁所在资源的粒度。

RID :表中单个行的锁,由行标识符 (RID) 标识。

KEY:索引内保护可串行事务中一系列键的锁。

PAG:数据页或索引页的锁。

EXT:对某区的锁。

TAB:整个表(包括所有数据和索引)的锁。

DB:数据库的锁。

FIL:数据库文件的锁。

APP:指定的应用程序资源的锁。

MD:元数据或目录信息的锁。

HBT:堆或 B 树索引的锁。 在 SQL Server 中此信息不完整。

AU:分配单元的锁。 在 SQL Server 中此信息不完整。

锁模式(Mode)

当SQLServer请求一个锁时,会选择一个影响锁的模式。锁的模式决定了锁对其他任何锁的兼容级别。如果一个查询发现请求资源上的锁和自己申请的锁兼容,那么查询就可以执行下去,但如果不兼容,查询会被阻塞。直到所请求的资源上的锁被释放。

NULL:不授予对资源的访问权限。 用作占位符。

Sch-S:架构稳定性。 确保在任何会话持有对架构元素(例如表或索引)的架构稳定性锁时,不删除该架构元素。

Sch-M:架构修改。 必须由要更改指定资源架构的任何会话持有。 确保没有其他会话正在引用所指示的对象。

S:共享。 授予持有锁的会话对资源的共享访问权限。

U:更新。 指示对最终可能更新的资源获取的更新锁。 用于防止一种常见的死锁,这种死锁在多个会话锁定资源以便稍后对资源进行更新时发生。

X:排他。 授予持有锁的会话对资源的独占访问权限。

IS:意向共享。 指示有意将 S 锁放置在锁层次结构中的某个从属资源上。

IU:意向更新。 指示有意将 U 锁放置在锁层次结构中的某个从属资源上。

IX:意向排他。 指示有意将 X 锁放置在锁层次结构中的某个从属资源上。

SIU:共享意向更新。 指示对有意在锁层次结构中的从属资源上获取更新锁的资源进行共享访问。

SIX:共享意向排他。 指示对有意在锁层次结构中的从属资源上获取排他锁的资源进行共享访问。

UIX:更新意向排他。 指示对有意在锁层次结构中的从属资源上获取排他锁的资源持有的更新锁。

BU:大容量更新。 用于大容量操作。

RangeS_S:共享键范围和共享资源锁。 指示可串行范围扫描。

RangeS_U:共享键范围和更新资源锁。 指示可串行更新扫描。

RangeI_N:插入键范围和 Null 资源锁。 用于在将新键插入索引前测试范围。

RangeI_S:键范围转换锁。 由 RangeI_N 和 S 锁的重叠创建。

RangeI_U:由 RangeI_N 和 U 锁的重叠创建的键范围转换锁。

RangeI_X:由 RangeI_N 和 X 锁的重叠创建的键范围转换锁。

RangeX_S:由 RangeI_N 和 RangeS_S 锁的重叠创建的键范围转换锁 锁。

RangeX_U:由 RangeI_N 和 RangeS_U 锁的重叠创建的键范围转换锁。

RangeX_X:排他键范围和排他资源锁。 这是在更新范围中的键时使用的转换锁。

锁请求状态(Status)

CNVRT:锁正在从另一种模式进行转换,但是转换被另一个持有锁(模式相冲突)的进程阻塞。
GRANT:已获取锁。
WAIT:锁被另一个持有锁(模式相冲突)的进程阻塞。

锁升级(Upgrade)

锁升级是将许多较细粒度的锁转换成数量更少的较粗粒度的锁的过程,这样可以减少系统开销,但却增加了并发争用的可能性。

当 SQL Server 数据库引擎获取低级别的锁时,它还将在包含更低级别对象的对象上放置意向锁:

  1. 当锁定行或索引键范围时,数据库引擎将在包含这些行或键的页上放置意向锁。
  2. 当锁定页时,数据库引擎将在包含这些页的更高级别的对象上放置意向锁。

除了对象上的意向锁以外,以下对象上还需要意向页锁:非聚集索引的叶级页、聚集索引的数据页、堆数据页。

锁升级的阈值:

  1. 单个 Transact-SQL 语句在单个无分区表或索引上获得至少 5,000 个锁。
  2. 单个 Transact-SQL 语句在已分区表的单个分区上获得至少 5,000 个锁,并且 ALTER TABLE SET LOCK_ESCALATION 选项设为 AUTO。
  3. 数据库引擎实例中的锁的数量超出了内存或配置阈值。

锁应用场景(Application scenario)

共享锁用于所有的只读数据操作。共享锁是非独占的,允许多个并发事务读取其锁定的资源。

修改锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。

独占锁是为修改数据而保留的。它所锁定的资源,其他事务不能读取也不能修改。

结构锁分为结构修改锁(Sch-M)和结构稳定锁(Sch-S)。执行表定义语言操作时,SQL Server采用Sch-M锁,编译查询时,SQL Server采用Sch-S锁。

意向锁说明SQLServer有在资源的低层获得共享锁或独占锁的意向。

批量复制数据时使用批量修改锁。

在数据源和ADO游标库管理通过选择适当的锁定选项的并发。

锁优点(Advantage)

使用锁解决数据完整性和一致性问题:

脏读(dirty read):当事务读取一条记录,而该记录是另一事务尚未完成的一部分时,就会发生脏读。

不可重复读(No-Repeatable Read):当在一个事务中两次读取记录,并且在两次读取之间,另一个单独的事务修改了该数据,这是会导致不可重复读。

幻读(phantom):同一事务中,用同样的操作读取两次,得到的记录数不相同。

丢失更新:当成功将一个更新写入数据库中,但是又被另一个事务意外的覆盖了,就会发生丢失更新的现象。

锁缺点(Disadvantage)

多个主体对于资源的争用容易造成死锁。

锁使用不当造成资源锁定时间过长,无法进行其它操作。

SQLServer之锁简介的更多相关文章

  1. 并发系列(3)之 CLH、MCS 队列锁简介

    这篇博客主要是作为 AbstractQueuedSynchronizer 的背景知识介绍:平时接触也非常的少,如果你不感兴趣可以跳过:但是了解一下能更加的清楚 AQS 的设计思路: 一.自旋锁简介 通 ...

  2. sqlserver被锁的表以及如何解锁

    查看sqlserver被锁的表以及如何解锁   查看被锁表: select   request_session_id   spid,OBJECT_NAME(resource_associated_en ...

  3. 禁用sqlserver的锁升级

    锁升级 SQLSERVER.DB2中的锁是内存里面实现的,这就有个资源消耗问题,当锁的数量达到一个阀值或内存有压力时,就会引发锁升级.实际的情况是从row lock直接升级到table lock,而不 ...

  4. Oracle和sqlserver关于锁和隔离级别的差异

    事务属性:ACID(原子性.一致性.隔离性.持久性) 隔离级别:主要针对的是共享锁的持有时间和范围 SQL标准定义了以下四种事务隔离级别 READ UNCOMMITTED     允许脏读.  不可重 ...

  5. MySQL · 引擎特性 · InnoDB 事务锁简介

    https://yq.aliyun.com/articles/4270# zhaiwx_yinfeng 2016-02-02 19:00:43 浏览2194 评论0 mysql innodb lock ...

  6. sqlserver锁机制详解(sqlserver查看锁)

    简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于 大多数数据库来说是需要同时处理多个查询 ...

  7. 001.SQLServer高可用简介

    一 SQLServer高可用集群相关概念 1.1 Windows故障转移群集 Windows故障转移群集是由多个服务器组成的共同提供某高可用服务,该服务用于防止单台服务器故障导致服务失效.故障转移群集 ...

  8. mssql sqlserver 数据类型sql_variant简介说明

    转自: http://www.maomao365.com/?p=9712  摘要: 下文讲述sqlserver中sql_variant数据类型定义.赋值.应用的相关说明,如下所示: 实验环境:sql ...

  9. SqlServer查看锁表与解锁

    某些情况下,sqlserver的表会被锁住,比如某个会话窗口有数据一直没提交,窗口又没关闭,这时表就会被锁住 其他任何连接查询表数据时都不会返回 这时需要手工杀掉产生死锁的会话ID,才能恢复正常 查看 ...

随机推荐

  1. 设计模式 | 抽象工厂模式(abstract factory)

    定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...

  2. DataPipeline | PayPal庞姬桦:大数据在小微企业贷款上的运用

    庞姬桦女士毕业于北京大学和美国哥伦比亚大学,目前担任PayPal公司消费者风险管理总监,负责通过大数据实现对互联网金融风险的侦测.跟踪.管控和防范.在加入PayPal之前,曾任职于渣打银行(中国)和美 ...

  3. 数据库原理 - 序列3 - 事务是如何实现的? - Redo Log解析

    6.5 事务实现原理之1:Redo Log 介绍事务怎么用后,下面探讨事务的实现原理.事务有ACID四个核心属性:A:原子性.事务要么不执行,要么完全执行.如果执行到一半,宕机重启,已执行的一半要回滚 ...

  4. python3.6+selenium3.13 自动化测试项目实战一(增加自动发送邮件报告接口)

    说明: 继实战项目一的基础上添加自动发送报告邮件接口,代码有部分调整,可以结合实战一和上篇文章学习 变动: 1.增加文本文档SendToUserinfo.txt 用来保存邮件接收者的信息 2.修改测试 ...

  5. 终于等到你:CYQ.Data V5系列 (ORM数据层,支持.NET Core)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  6. 重新发现MATLAB

    现场编辑 创建不仅捕获代码的脚本 - 它们讲述了可以与他人共享的故事.自动化的上下文提示可让您在编程时快速移动,并将结果和可视化与代码一起显示. 学到更多 访问MATLAB实时脚本库         ...

  7. oracle 常用索引分析,使用原则和注意事项

    本文参考: https://www.cnblogs.com/wishyouhappy/p/3681771.html https://blog.csdn.net/weivi001/article/det ...

  8. shell read的用法

    1. Read的一些选项 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项. -a :将内容读入到数值中 echo -n "Input muliple ...

  9. 5G网络与4G相比,有什么区别?

    5G 是 2018 年移动通信领域的热词.从中兴的芯片卡脖事件,联想 5G 投票风波再到华为频遭威胁.这些事件都引起了大家对于 5G 的关注,那么 5G 到底是什么,它和 4G 有什么区别呢? 今天就 ...

  10. 一个用来爬小说的简单的Node.js爬虫

    小说就准备点天下霸唱和南派三叔的系列,本人喜欢看,而且数据也好爬.貌似因为树大招风的原因,这两作者的的书被盗版的很多,乱改的也多.然后作者就直接在网上开放免费阅读了,还提供了官网,猜想作者应该是允许爬 ...