sql-server – SQL Server,这个误导的XLOCK和优化
从最近的一些测试和阅读我已经做了,似乎XLOCK的“X”(独家)名称的一部分是误导.实际上它不会锁定UPDLOCK.如果它是排他的,它会阻止外部SELECT,而不是它.
我看不到从阅读或测试和两者之间的区别. XLOCK创建独占锁的唯一时间是与TABLOCK一起使用.我的第一个问题是“为什么只有这样的粒度? 此外,我遇到了一个blog,其中指出:
有没有人遇到这种现象? 根据我所看到的,似乎这个提示应该被忽略. 解决方法X锁与U锁的独家性在lock compatibility matrix below中可以看出,X锁仅与架构稳定性和“插入范围 – 空”锁类型兼容. U与以下附加共享锁类型S / IS / RS-S / RI-S / RX-S兼容 lock compatibility matrix http://i.msdn.microsoft.com/ms186396.LockConflictTable(en-us,SQL.105).gif X锁的粒度 这些都被罚款在各级.下面的脚本和剖析器跟踪表明它们在行级别被成功地取出. CREATE TABLE test_table (id int identity(1,1) primary key,col char(40)) INSERT INTO test_table SELECT NEWID() FROM sys.objects select * from test_table with (rowlock,XLOCK) where id=10 但行仍然可以读! 事实证明,在读取提交的隔离级别,SQL Server将不会总是取出S锁,it will skip this step if there is no risk of reading uncommitted data without them.这意味着不保证发生锁定冲突. 但是,如果初始选择与(paglock,XLOCK)一起使用,则会停止读取事务,因为页面上的X锁定将阻止读者始终需要的IS页面锁定.这当然会对并发产生影响. 其他注意事项 即使您锁定行/页,这并不意味着您阻止对表中该行的所有访问.聚簇索引中的行上的锁不会阻止查询从覆盖非聚簇索引中的相应行读取数据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |