2013-04-23 33 views
2

我对SQL很陌生。我正在使用SQL Server 2008 R2。我有以下问题;有没有办法检查事务授予的锁

(1)

事务已启动,但尚未达到其提交点。

UPDATE Student 
SET subject = 'Technology' 
WHERE subjectCode = 'tech'; 

当该正在执行什么类型的锁定的由具有全表/行?

(2)

是否有一种方式来获得由事务持有的锁?

+0

参见http://dba.stackexchange.com/q/12810/5203。 – GSerg 2013-04-23 20:20:04

回答

2

答案(1):

如果交易没有被阻止任何预先存在的锁,然后在Student表中的所有行与subjectCode = 'tech'现在对他们有(X)(独家)锁。

在页面和表级别上,将会有(IX)(intent exclusive)锁定 - 表明在“层次结构”(表格 - >页面 - >行)的更下方的某处存在排它锁。

如果您要更新超过5000行,然后锁升级将被踢入,并且SQL Server已使用单个表级别排他锁来取代5000多个单独的行级排他锁。这意味着基本上没有人能够对这张桌子做任何事情。

对于你的问题(2) - see the answers to this other SO question

+0

问题1的好解释。谢谢。 – 2013-04-24 05:56:22

相关问题