实验前先介绍下 sp_lock
SP_LOCK报告有关锁的信息。
spid | dbid | ObjId | IndId | Type | Resource | Mode | Status |
51 | 5 | 0 | 0 | DB | S | GRANT |
spid:进程id
dbid:数据库id
objid:数据库内对象id
IndId: 持有锁的索引的标识号。
type:锁的资源类型
RID = 表中单个行的锁,由行标识符 (RID) 标识。
|
KEY = 索引内保护可串行事务中一系列键的锁。 |
PAG = 数据页或索引页的锁。 |
EXT = 对某区的锁。 |
TAB = 整个表(包括所有数据和索引)的锁。 |
DB = 数据库的锁。 |
FIL = 数据库文件的锁。 |
APP = 指定的应用程序资源的锁。 |
MD = 元数据或目录信息的锁。 |
HBT = 堆或 B 树索引的锁。在 SQL Server 中此信息不完整。 |
AU = 分配单元的锁。在 SQL Server 中此信息不完整。 |
Resource:syslockinfo.restext 中的值对应的锁资源的位置。
Mode:请求的锁的类型
主要的有:
共享锁 (S) 用于不更改或不更新数据的操作(只读操作),如SELECT语句。
更新锁 (U) 用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。
排它锁 (X) 用于数据修改操作,例如INSERT、UPDATE或DELETE。确保不会同时对同一资源进行多重更新。
意向锁 (I+_) 用于建立锁的层次结构。意向锁的类型为:意向共享(IS)、意向排它(IX)以及与意向排它共享(SIX)。
架构锁 在执行依赖于表架构的操作时使用。架构锁的类型为:架构修改(Sch-M)和架构稳定性(Sch-S)。
大容量更新锁 (BU)向表中大容量复制数据并指定了TABLOCK提示时使用。
详细的: