gpt4 book ai didi

sql-server - TABLOCK 与 TABLOCKX

转载 作者:行者123 更新时间:2023-12-01 17:24:56 24 4
gpt4 key购买 nike

TABLOCKTABLOCKX 有什么区别?

http://msdn.microsoft.com/en-us/library/ms187373.aspx声明 TABLOCK 是共享锁,而 TABLOCKX 是独占锁。第一个可能只是某种索引锁?那么共享锁是什么概念呢?

最佳答案

很大的区别,TABLOCK 将尝试获取“共享”锁,而 TABLOCKX 会尝试获取独占锁。

如果您处于事务中并且您获取了表上的独占锁,EG:

使用 (TABLOCKX) 从表中选择 1

没有其他进程能够获取表上的任何锁,这意味着所有尝试与表通信的查询都将被阻止,直到事务提交。 p>

TABLOCK 仅获取共享锁,如果您的事务隔离为 READ COMMITTED(默认),则在执行语句后会释放共享锁。如果您的隔离级别is higher ,例如:SERIALIZABLE,共享锁将一直保持到事务结束。

<小时/>

共享锁是,嗯,共享的。这意味着如果 2 个事务都持有表上的 S 或 IS 锁(通过 TABLOCK),则它们可以同时从表中读取数据。但是,如果事务 A 持有表上的共享锁,则事务 B 将无法获取独占锁,直到所有共享锁都被释放。了解哪些锁与哪些锁兼容 at msdn .

<小时/>

这两个提示都会导致数据库绕过更细粒度的锁定(例如行或页级锁定)。原则上,更细粒度的锁可以让您获得更好的并发性。例如,一个事务可能会从两个事务中同时更新表中的第 100 行和另一行 1000(页锁会变得很棘手,但我们可以跳过这一点)。

一般来说,粒度锁是您想要的,但有时您可能希望减少数据库并发性以提高特定操​​作的性能并消除死锁的机会。

一般来说,您不会使用 TABLOCKTABLOCKX 除非您绝对需要某些边缘情况。

关于sql-server - TABLOCK 与 TABLOCKX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5102152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com