SQL2005中的事务与锁定(六)
全文阅读:SQL2005中的事务与锁定(六)
------------------------------------------------------------------------
-- Author : HappyFlyStone
-- Date : 2009-10-12 ――2009-10-17
-- Version: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)
-- Apr 14 2006 01:12:25
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
-- 转载请注明出处,更多请关注:http://blog.csdn.net/happyflystone
-- 关键字:锁定资源 锁定 应用程序锁定 绑定 锁生命周期 实体类型
------------------------------------------------------------------------
在前面一篇我开始说到锁,然后在说明可锁定资源并没有深入的解释资源这一块,所以没深入是想在大家对锁的模式有一定了解后再来学习资源。在前面的好多用例里我们使用sp_us_lockinf这个用户过程取回的锁的相关信息都有一栏资源类型,呵呵,还有印象吧。下面我们来稍深入理解一下,然后我们对个别类型的资源再来点实例,最后说点锁的本质及生存周期和所有者等等。
4、深入可锁定资源及特殊锁定
可资源资源有哪些呢,我在前面已经用
SELECT * FROM MASTER..SPT_VALUES WHERE TYPE = 'LR'
进行了列表,一共有12种之多,其实我们从本篇的开始到现在一直在接触的行锁(RID),键锁(KEY),分页(PAG)、表(TAB)及对象(OBJECT)都是我们可锁定的资源,这几类我们已经接触到很多了,下面我就不常关注的几个进行一下说明。
EXT 这是数据或索引页面扩展。这一块如果以后有时间整理表的数据存储或索引分页的结构时可以细细说说扩展,现在我们可以简单的理解为:扩展是一个64K的分配单元,是由连续的8个8K分页组成。SQLSERVER在表或索引分配扩展时会分配8个连续的8K空间,每一个扩展的首页号是8的倍数,但是扩展间本身不一定连续哦,这个不连续就是碎片了。在扩展上也可以加锁定,其实这也好理解,在不同的表或索引需要新的扩展时,系统为了让同一扩展不被错误使用(比如两个表同时得到一个扩展,那比较恐怖哦)而进行共享或排它锁定。不过是系统自发进行的,我们一般看不到。这种物理上的一致性我们在前面提到过一种闩锁,嘿嘿有印象不?我们也可以把这个当作一种事实上的闩锁。
DB数据库(DATABAES)。其实只要我打开一个连接,如果你使用sp_us_lockinfo一定得到一条相应当前连接的DB类型的锁定。结果如图61
select @@spid
go
exec sp_us_lockinfo
那么在DATABASE这种类型下有几种锁呢,为别对应哪些操作呢?能不能模拟出来呢?好,下面我们来模拟一些吧,比如删除库操作:
1、 先打开一个managerment studio,我们先创建一个数据库,库名为dblock,建好后运行一下我们前面那个工具sp_us_lockinfo
2、 打开另一个managerment studio,右击dblock进行删除操作,在弹出的窗口点确认
3、 在第二步操作后迅速切换到第一个managerment staido并运行如下代码 ,并得到图63
select @@spid
exec sp_us_lockinfo
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/happyflystone/archive/2009/10/19/4696884.aspx
PS:发帖真累,不能直接复制。