有没有人知道一个资源,它会告诉我在SQL Server 2005中的select / insert / update / delete期间将在表/ page / row / index上取出的锁序列以及不同的表提示和隔离级别会影响锁定吗?
我知道我在这里问了很多,但肯定这些信息必须记录在某处?
提前致谢,
汤姆
答案 0 :(得分:7)
SQL Server锁定基于Transaction Processing: Concepts and Techniques中的概念。本书详细解释了如何获取锁,需要什么锁以及为什么事物必须如此。
Marc链接的资源是对该主题的良好报道,但细节分散,您需要知道在哪里查看。这是一本启动你的入门书:
事务隔离级别仅影响读锁定。在正常read committed
下读取行时,会获取在读取后立即释放的S锁定。如果隔离级别提升到repeatable read
,则保持S锁直到事务结束。在较高的serializable
级range locks上放置而不是简单的行锁,并且它们一直保持到事务提交为止。快照模式的不同之处在于它们不一定会影响锁的类型,而是从版本存储中检索读取:行的源。
锁定顺序/层次结构始终相同:
锁定提示永远不会更改锁定的顺序,它们只能更改:
我没有太多关于插入/更新/删除的内容,因为它们非常无趣:它们需要X锁,就是这样。关于它的唯一有趣的事情是更新的工作方式,因为它首先获得一个U锁,后来转换为X锁。需要此行为来利用允许挂起S锁在更新进行之前耗尽的U-lock asymmetry。
有了这个,我希望你能找到链接的文章和书籍中遗漏的所有细节。
答案 1 :(得分:2)
这些怎么样:
更新:关于事务隔离级别和查询提示的更多内容如何:
如果您对这些相当高级的主题感兴趣,我强烈建议您阅读Kalen Delaney(和其他人)的SQL Server 2008 Internals书,其中包含所有这些细节 - 即使在本书中, “锁定”主题仅在第610页及以上开始: - )
马克