SQL Server中的锁序列

Tom*_*son 6 sql-server

有没有人知道一个资源,它将告诉我在SQL Server 2005中的select/insert/update/delete期间将在表/ page/row/index上取出的锁序列以及不同的表提示和隔离级别将如何影响锁采取?

我知道我在这里问了很多,但肯定这些信息必须记录在某处?

提前致谢,

汤姆

Rem*_*anu 7

SQL Server锁定基于事务处理:概念和技术中的概念.本书详细解释了如何获取锁,需要什么锁以及为什么事情必须如此.

Marc链接的资源是对该主题的良好报道,但细节分散,您需要知道在哪里看.这是一本入门的入门读物:

事务隔离级别仅影响读锁定.在正常read committed情况下,当读取行时,获取在读取之后立即释放的S锁.如果提升隔离级别,repeatable read则保持S锁直到事务结束.在更高serializable级别的范围内放置而不是简单的行锁,并且它们一直保持到事务提交为止.快照模式的不同之处在于它们不一定会影响锁的类型,而是从版本存储中检索读取:行的源.

锁定顺序/层次结构始终相同:

  • 在任何DML操作开始时,都会在元数据上放置一个Sch-S锁.DDL操作需要Sch-M锁并因此发生冲突,因此DML可以确保其运行的模式的"稳定性"(对象模式,而不是数据库模式......).
  • 行的锁层次结构路径是table-page-row.引擎决定的实际粒度是动态的.通常是行.
  • 无论粒度如何,实际锁定资源的路径都受意图锁保护.IE浏览器.要锁定S行,读者必须在表和页面上获取IS锁定.要S锁定页面,它需要在表上进行IS锁定.
  • 单个分区操作在扫描中获取更多5000个锁可能会触发锁升级.升级始终是一种尝试(即,如果失败则永远不会阻止).实践中的升级总是从行级锁定到表(2008中的分区)级别锁定.

锁提示永远不会改变锁的顺序,它们只能改变:

  • 锁的类型(当需要S锁时,U型锁或X锁)
  • 粒度(强制表,或页面或行)
  • 持续时间(持S锁)
  • 阻塞行为(readpast跳过不兼容的行).

我没有过多谈论插入/更新/删除,因为它们非常无趣:它们需要X锁,就是这样.关于它的唯一有趣的事情是更新的工作方式,因为它首先获得一个U锁,后来转换为X锁.需要此行为来利用U锁定不对称性,允许挂起的S锁在更新进行之前消耗.

有了这个,我希望你能找到链接的文章和书籍遗漏的所有细节.