我有一个在服务器端使用 Linq2Sql 的网站。
时不时地(尚未确定触发器)整个网站由于未完成的交易而锁定。中可以看到阻塞进程master..sysprocesses
,从中可以识别出做加锁的进程ID是我网站的IIS进程,open_tran
为1,使用DBCC inputbuffer
可以看到查询,就是泛型select ... from MyTable
,就是SQL加载对象时由 Linq2Sql 生成。无论如何,这肯定不是我写的任何 SQL。
我已经扫描了我的整个代码库以查找任何旧的“BeginTransaction .. Commit/RollbackTransaction”块。纳达。一切都使用using (var ts = new TransactionScope()) { ... }
块。我已附加到 IIS 进程并在不同线程中的查询被阻止时捕获了超时异常。在事务块内我找不到其他线程。同时,阻塞过程根本不会消失。
有关如何进一步解决此问题的任何想法?