sql - 确定锁升级的阈值

标签 sql sql-server sql-server-2005

我有一个包含约250万条记录的表,并且将更新其中的约70万条记录,并且希望在更新这些记录的同时仍允许其他用户查看数据。我的更新语句如下所示:

UPDATE A WITH (UPDLOCK,ROWLOCK)
SET A.field = B.field
FROM Table_1 A
INNER JOIN Table2 B ON A.id = B.id WHERE A.field IS NULL
AND B.field IS NOT NULL

我想知道是否有什么办法可以解决sql server在什么时候升级对update语句的锁定(因为我不希望整个表都被锁定)?

我没有运行服务器跟踪的权限来查看如何应用锁,因此是否还有其他方法可以知道锁将在什么时候升级为覆盖整个表?

谢谢!

最佳答案

According to BOL一旦该语句在一个对象的单个实例上获得了5,000行或页面级别的锁,便会尝试升级这些锁。如果由于另一个事务具有冲突的锁而导致此尝试失败,则它将在每获得额外的1,250个锁之后再次尝试。

我不确定您是否真的可以将这些数字视为福音,或者是否还有其他一些微妙之处(我想您总是可以在任意数量的锁上达到实例的内存限制)

关于sql - 确定锁升级的阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679222/

相关文章:

mysql - 'dateAdded' 的默认值无效

java - 如何使用 JPA 将 SQL Server 2008 日期读取到 Java 中

php - 如何在php中比较2个字符串的部分

SQL - 调查数据,循环调查问题的表模式设计

SQL 选择然后删除

sql-server - 如何在 Report Builder 3.0 中将 Excel 公式插入单元格?

sql-server - Terraform - Azure - 一起使用 "azurerm_windows_virtual_machine"和 "azurerm_mssql_virtual_machine"- 但 SQL 存储未配置

database - 存储过程的缺点

sql - 百分比行占总计,其中每行由 group by 子句确定

php - PDO查询不转到表SQL