2017-02-28 65 views
0

我们有一个运行SQL Server 2014 Web版的新数据库服务器。我恢复了来自SQL Server 2008 R2实例的数据库。我们使用将数据导入数据库的Web服务。该Web服务使用TransactionScopeWebservice在新的SQL Server 2014实例上遇到很多死锁

针对旧的数据库服务器我从来没有遇到麻烦,即使3或4个进程同时使用此Web服务,但是当我尝试对新的SQL Server 2014数据库进行尝试时,它立即出现死锁。

更改的事情是数据库服务器,但设置或多或少相同。

我试图设置的TransactionScope的IsolationLevel将到READCOMMITTED但这并不能帮助..

没有任何人有一个建议如何解决这个问题?

+0

您是如何恢复数据库的?你有多少数据?你的索引状态如何?服务器的大小是否相同? Web服务执行什么样的操作? –

+0

另外它对StackOverflow来说不是一个好问题,您可能在社区中的其他某些网站上运气更好。 –

+0

如果您将2008年数据库恢复到2014年的实例,则需要进行一些拆解。对索引进行碎片整理,更新统计信息等。您需要执行许多清理工作。 –

回答

0

TransactionScope类中有一个“特性”,其中默认构造函数在SERIALIZABLE隔离级别中创建连接。不幸的是,这个“功能”还会导致汇集连接泄漏到SERIALIZABLE隔离级别,因为它们没有完全重置。 https://blogs.msdn.microsoft.com/dbrowne/2010/06/03/using-new-transactionscope-considered-harmful/

您可以通过查看是否有会话以可序列化的隔离级别运行来了解是否遇到此问题。

select * 
from sys.dm_exec_sessions 
where transaction_isolation_level = 4