gpt4 book ai didi

sql-server - 为什么在更新语句中使用 "with (rowlock)"时整个表被锁定

转载 作者:太空狗 更新时间:2023-10-30 01:49:42 25 4
gpt4 key购买 nike

我使用 WITH (ROWLOCK) 更新了表的一行,但是通过执行“sp_lock”我可以看到整个表都被锁定了。所以,在事务提交之前,其他事务不能更新表的其他行。为什么“WITH(ROWLOCK)”不生效?

我正在使用以下带有行锁的查询:

DELETE FROM DefDatabaseSession  WITH (ROWLOCK) WHERE ProcessName='test';

同时从任何其他事务对同一表中的不同行运行相同的删除操作我得到异常

[SQLServer JDBC Driver][SQLServer]Lock request time out period exceeded.; nested exception is java.sql.SQLException: [newscale][SQLServer JDBC Driver][SQLServer]Lock request time out period exceeded.: com.newscale.bfw.udkernel.kernel.UdKernelException: udconfig.defdbsession.delete; uncategorized SQLException for SQL [DELETE FROM DefDatabaseSession WHERE ProcessName = ?]; SQL state [HY000]; error code [1222]; [newscale][SQLServer JDBC Driver][SQLServer]Lock request time out period exceeded.; nested exception is java.sql.SQLException: [newscale][SQLServer JDBC Driver][SQLServer]Lock request time out period exceeded.

最佳答案

这里的原因是优化器忽略了您的行锁提示 [WITH (ROWLOCK) 向优化器提供查询提示]。这将在您遇到大量行的情况下发生,在这种情况下,优化器发现在您的表上进行堆扫描并因此获得表锁更可行。

有关详细讨论,您可以访问此链接:http://social.msdn.microsoft.com/Forums/sqlserver/en-US/60238304-04e8-4f98-84d1-3ddf1ed786a9/why-the-entire-table-is-locked-while-with-rowlock-is-used-in-a-update-statement

关于sql-server - 为什么在更新语句中使用 "with (rowlock)"时整个表被锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18042739/

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