这可确保两个用户不能同时更新行中的同一列。

在数据库中的数百或数千个用户可能会尝试访问的记录每秒 — 如数据库连接到 Internet,不必要的锁定可能会迅速导致应用程序中的性能下降。

要返回的锁定中使用的一种开放类型的属性中读取记录集对象。

若要确定在可用的实际锁定功能记录集对象,使用支持方法替换adUpdate和adUpdateBatch.

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

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

锁资源(Resource)

类型值:资源值。

fileid 与匹配file_id中的列sys.database_files目录视图。

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

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

该数字的格式为 fileid:pagenumber。

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

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

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

格式为 DbPrincipleId:<为 16 个字符的资源字符串的前两个 ><哈希运算值 >。

有关详细信息,请参阅的说明resource_description中的列sys.dm_tran_locks (TRANSACT-SQL)。

使用sys.dm_tran_locks改为动态管理视图。

使用sys.dm_tran_locks改为动态管理视图。

锁类型(锁粒度)(Type)

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

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

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

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

EXT:对某区的锁。

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

DB:数据库的锁。

FIL:数据库文件的锁。

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

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

SQL Server 中此信息不完整。

SQL Server 中此信息不完整。

锁模式(Mode)

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

用作占位符。

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

确保没有其他会话正在引用所指示的对象。

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

用于防止一种常见的死锁,这种死锁在多个会话锁定资源以便稍后对资源进行更新时发生。

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

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

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

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

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

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

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

用于大容量操作。

指示可串行范围扫描。

指示可串行更新扫描。

用于在将新键插入索引前测试范围。

由 RangeI_N 和 S 锁的重叠创建。

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

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

锁。

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

这是在更新范围中的键时使用的转换锁。

锁请求状态(Status)

WAIT:锁被另一个持有锁(模式相冲突)的进程阻塞。

)

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

当 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游标库管理通过选择适当的锁定选项的并发。

)

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

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

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

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

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

)

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

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

 

相关文章:

  • 2021-12-10
  • 2022-01-01
  • 2022-01-15
  • 2022-01-29
  • 2021-12-30
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-10-10
  • 2021-08-15
  • 2021-10-14
  • 2021-12-25
  • 2021-08-28
  • 2022-12-23
  • 2021-10-26
相关资源
相似解决方案