SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)
接上SQL SERVER的锁机制(一)——概述(锁的种类与范围)
二、完整的锁兼容性矩阵(见下图)
对上图的是代码说明:见下图。
三、下表列出了数据库引擎可以锁定的资源。
名称 |
资源 |
缩写 |
编码 |
呈现锁定时,描述该资源的方式 |
说明 |
数据行 |
RID |
RID |
9 |
文件编号:分页编号:Slot编号 |
用于锁定堆中的单个行的行标识符。 |
索引键 |
KEY |
KEY |
7 |
6字节哈希值 |
索引中用于保护可序列化事务中的键范围的行锁。 |
分页 |
PAGE |
PAG |
6 |
文件编号:分页编号 |
数据库中的 8 KB 页,例如数据页或索引页。 |
范围 |
EXTENT |
EXT |
8 |
文件编号:范围的第一个分页的编号 |
一组连续的八页,例如数据页或索引页。 |
HoBT |
堆或 B 树。 用于保护没有聚集索引的表中的 B 树(索引)或堆数据页的锁。 |
||||
数据表 |
TABLE |
TAB |
5 |
数据表ID(OBJID字段) |
包括所有数据和索引的整个表。 |
文件 |
FILE |
FIL |
3 |
文件编号 |
数据库文件。 |
应用程序 |
APPLICATION |
APP |
10 |
6字节哈希值 |
应用程序专用的资源。 |
METADATA |
元数据锁。 |
||||
ALLOCATION_UNIT |
分配单元。 |
||||
数据库 |
DATABASE |
DB |
2 |
数据库代码(DBID字段) |
整个数据库。 |
索引 |
IDX |
4 |
Db_id:object_id:index_id相关的其他资源 |
索引中的数据行锁定, |
四、SQL SERVER要锁定资源时,默认是从最底级开始锁起,例如,索引键值,数据行,以避免大范围锁定,以避免影响其他人同时访问该范围内的其他数据,但是当内存不足时,SQL SERVER会自动扩大锁定范围以减低管理锁定的负荷。下面我们来看一个示例。
--建立SP_LOCK输出缓存表 if exists( select * from tempdb..sysobjects where name like '#temp%' and type ='u') begin drop table #temp create table #temp(spid int,dbid int ,objid int,indid int,type varchar(3),resource varchar(20) ,mode varchar(20),status varchar(5)) end begin tran update WBK_PDE_head set [COP_EMS_NO]='abcde' where wbook_no='BE404942850177' insert #temp exec sp_lock @@spid commit tran -----获取dbid --select DB_ID('Test') --只查看定制的数据库的相关资源,sql 2008 select spid,数据库=DB_NAME(dbid),对象=OBJECT_NAME(objid), 索引=(select name from sysindexes where ID=OBJID and indid=t.indid ), TYPE,resource,mode,status from #temp t where dbid=28 order by dbid,objid,indid --- ---以SQL 2005的sys.indexes表查询相关数据 select spid,数据库=DB_NAME(dbid),对象=OBJECT_NAME(objid), 索引=(select name from sys.indexes where object_id=OBJID and index_id=t.indid ), TYPE,resource,mode,status from #temp t where dbid=28 order by dbid,objid,indid
说明:
1.建立临时表#Temp用以存储系统存储过程sp_lock输出的数据
2.开启事务,然后更新数据(update),但不去确认事务,数据库会锁定相关对象,将sp_lock所呈现的相关数据插入到#Temp表中,并将结果查询出来。
在查询分析器中执行以下代码
select a.*,b.name from #temp a left join sysobjects b on a.objid=b.id order by a.type
图如下示:
相关文章
- NETs相关基因构建预后模型干湿结合发12分+SCI
- 用 Minio 快速启动 Velero 实现 Kubernetes资源备份
- MySQL(1) - 用户管理及root密码修改
- Jmeter系列(40)- 详解 Jmeter 图形化 HTML 压测报告
- Jmeter系列(39)- 详解 Jmeter CLI 模式
- Jmeter系列(38)- Jmeter 分布式测试
- Jmeter系列(37)- 跨平台运行 Jmeter,CSV 文件路径设置
- Jenkins操作手册 - 巨详细,一篇足矣!
- 【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康
- 【Spring专题】「开发指南」夯实实战基础功底之解读logback-spring.xml文件的详解实现
- 精华推荐 |【深入浅出Sentinel原理及实战】「原理探索专题」完整剖析Alibaba微服务架构体系之轻量级高可用流量控制组件Sentinel(1)
- 【深入浅出Spring原理及实战】「源码原理实战」从底层角度去分析研究PropertySourcesPlaceholderConfigurer的原理及实战注入机制
- 精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景
- 深度剖析 | 【JVM深层系列】[HotSpotVM研究系列] JVM调优的"标准参数"的各种陷阱和坑点分析(攻克盲点及混淆点)「 1 」
- 【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
- 【深入浅出SpringCloud原理及实战】「SpringCloud-Alibaba系列」微服务模式搭建系统基础架构实战指南及版本规划踩坑分析
- 【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析
- 作者推荐 | 【分布式技术专题】「架构设计方案」图解学习法总结集群模式下的各种软负载均衡策略实现及原理分析
- 【分布式技术专题】「架构设计方案」盘点和总结秒杀服务的功能设计及注意事项技术体系
- Kafka技术专题之「性能调优篇」消息队列服务端出现内存溢出OOM以及相关性能调优实战分析