0

我有一个 SQL Server 表,该表将使用 backgroundworker 多线程调用每 5 分钟由一个批处理作业更新。当我通过批处理作业插入表格时,我也在使用线程锁。应用程序的用户可以同时访问相同的数据。我在 C# 中有我的业务逻辑。什么是最好的和优化的解决方案?我可以在这种情况下使用线程锁吗?

4

1 回答 1

1

你有什么问题(或你预期的问题)?

SQL Server为处理大量并发连接和用户更新、插入、读取数据而设计和优化。让它处理工作!

当您的后台工作线程更新表时,它将对它更新的那些行采取排他 (X) 锁——但仅限于那些行(只要您一次不更新超过 5000 行)。

在此期间,可以读取表中的任何其他行 - 完全没有问题,看不到死锁......

如果您在单个事务中更新超过 5000 行,则可能会出现问题- 然后 SQL Server 将执行锁升级以避免必须跟踪太多锁,并且它将使用 (X) 锁锁定整个表。直到该更新事务结束 - 不再可能读取 - 但这些是正常的事务锁 -不是死锁。

那么你的问题/你的问题在哪里?

于 2013-05-15T19:05:25.407 回答