设为首页 收藏本站
查看: 842|回复: 0

[经验分享] SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)

[复制链接]

尚未签到

发表于 2015-6-29 15:51:54 | 显示全部楼层 |阅读模式
接上SQL SERVER的锁机制(一)——概述(锁的种类与范围)
  
  

二、完整的锁兼容性矩阵(见下图)
DSC0000.png
对上图的是代码说明:见下图。
DSC0001.png
三、下表列出了数据库引擎可以锁定的资源。


名称


资源


缩写


编码


呈现锁定时,描述该资源的方式


说明


数据行


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
  
图如下示:
DSC0002.png

另外的示例可以参见SQL SERVER的锁机制(一)——概述(锁的种类与范围)中的“示例代码二”相内容。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81612-1-1.html 上篇帖子: SQL Server 2008 高可用性视频(四)-- 故障转移群集 下篇帖子: 原创:通过VS 2010+SVN为SQL Server提供数据库版本管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表