2015-08-15 32 views
0

我的asp.net WEB API应用程序处理请求。每个请求都可以对数据库进行多次调用。 同一用户可以呼叫来自不同IP地址的请求。MS SQL Server - 使用事务处理雾化操作

我需要开发针对用户的请求等待链,使同一个用户的请求将等待前一个请求完成。

以前我通过运行在一个事务范围的要求使得它: 隔离级别= ReadCommited为了锁定该行以DB更新用户排记录 第一个请求,让其他请求应该在这里等着,而先前的事务中运行。

i之后由具有多个不同的用户,在同一时间不相同的负荷试验中,我想通了,它们在某种程度上dealocking海誓山盟:

事务(进程ID 119)中的死锁的锁资源与另一个进程并被选为死锁受害者。重新运行交易。

我的问题是:这将是我的情况,制定一个用户级等待链的应用要求最好的方法?

预先感谢您!

+0

你想放弃你的方法。相反,你应该修复bug(死锁)。另一方面,使用数据库锁作为队列不是完全可扩展的。同时会有多少个排队请求? – usr

回答

0

如果你说I need to develop wait chain for requests,你为什么不使链?您可以接收所有请求,将它们存储在任何队列(或数据库)中,然后逐个处理它们。

为了达到THI与交易,你必须非常小心,并按照一些规则来minimize deadlocks

  • 访问对象以相同的顺序
  • 保持事务简短
  • 使用绑定连接

Som修改您的代码,使用数据库进行操作。

+0

这也是一个选项。但我想知道是否有一个很好的方法来实现我的sql交易目标。 –

+0

@OlexanderKorenyuk更新了答案 – Backs