【发布时间】:2008-12-09 13:38:45
【问题描述】:
我在一个 ASP.NET 应用程序中有这个过程:
- 开始连接
- 开始交易
- 使用包含特定 LoadId 的列的 SqlBulkCopy 类向表“LoadData”中插入大量值。
- 调用存储过程:
- 读取特定 LoadId 的表“LoadData”。
- 每行都会进行大量计算,这意味着读取数十个表并将结果写入临时 (#temp) 表(持续几分钟的过程)。
- 删除“LoadDate”中特定 LoadId 的行。
- 一切都完成后,将结果写入结果表中。
- 如果出现问题,提交事务或回滚。
我的问题是,如果我有 2 个用户启动该进程,第二个用户将不得不等待前一个用户完成(因为插入似乎在表上设置了排他锁)并且我的应用程序有时会超时(而且用户不乐意等待:))。
我正在寻找一种方法,让用户能够并行执行所有操作,因为没有交互,除了最后一个:编写结果。我认为阻止我的是“LoadData”表中的插入/删除。 我检查了其他事务隔离级别,但似乎没有任何帮助。
在插入完成但不结束事务的情况下,能够移除“LoadData”表上的排他锁(是否可以强制 SqlServer 只锁定行而不锁定表?)将是完美的.
有什么建议吗?
【问题讨论】:
标签: sql-server locking