并行/并发更新在MS SQL Server语言 - 如何执行?(绕过锁)



我想要多个连接到MS SQL Server数据库,以便对单个表进行并行/并发更新,因为速度/减少执行所需的总时间。

更新是基于查找主键/唯一键进行的。

当前,这抛出一个错误"事务在另一个进程的锁资源上死锁"。我认为这是因为在第一个连接在表上运行更新事务后,表被锁定。所有后续连接都遇到一个正在更新的锁表,并发生——错误。

是否有一种方法在MS SQL Server允许并行/并发更新到单个表?

注意:任何传入的更新都不会同时"使用"同一行——它们都是唯一的。然而,他们将使用同一张表。然而,如果我能以某种方式切换到"行锁定"而不是表锁定,这将解决问题吗?或者,如果我可以切换到"螺丝任何锁定,周期"(这是指未提交的写吗?)——我也会这样做,因为它不会影响我的进程的数据完整性。

让我知道你的想法。谢谢!

PS……如果我只做"行锁",我的"提交大小"在锁方面会有任何影响吗?

如果更新的序列化不是绝对必要的,我建议无论如何都切换到行锁定。此外,您应该检查涉及表的读事务的隔离级别和锁定顺序,因为它们也可能是死锁场景的一部分。

由于表锁定比行锁定更具限制性,因此发生死锁的概率更高。此外,使用多个连接不会提高速度,因为表锁会再次序列化并发事务。

最新更新