Webservice 在新的 SQL Server 2014 实例上出现大量死锁

Posted

技术标签:

【中文标题】Webservice 在新的 SQL Server 2014 实例上出现大量死锁【英文标题】:Webservice gets a lot of deadlocks on new SQL Server 2014 instance 【发布时间】:2017-07-19 14:05:34 【问题描述】:

我们有一个运行 SQL Server 2014 网络版的新数据库服务器。我恢复了来自 SQL Server 2008 R2 实例的数据库。我们使用将数据导入数据库的 Web 服务。 Web 服务使用TransactionScope

对于旧的数据库服务器,我从来没有遇到过问题,即使 3 或 4 个进程同时使用此 Web 服务,但是当我尝试对我们的新 SQL Server 2014 数据库进行此操作时,它会立即死锁。

改变的是数据库服务器,但设置大致相同。

我尝试将 transactionscope 的隔离级别设置为 readcommitted 但这没有帮助..

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

【问题讨论】:

您是如何恢复数据库的?你有多少数据?您的索引的状态如何?服务器的大小是否相似? Web 服务执行什么样的操作? 另外,这对 *** 来说不是一个好问题,您可能在社区中的其他一些网站上运气更好。 如果您将 2008 年的数据库恢复到 2014 年的实例,则需要进行一些分解。对索引进行碎片整理、更新统计信息等。您需要做一些内务处理。 你有相同的磁盘和相同的 IO 吗? 回答上面的问题:你是正确的 Derrick,这个问题对于这个论坛来说可能不是一个好问题。感觉有点介于dba和developer之间。无论如何,当我恢复数据库(重建索引,映射用户)时,我做了家务。 Web 服务在事务范围内的多个表上执行插入/更新和删除的方法。 Rom,我们得到的服务器有 2 个物理硬盘驱动器,它们不是 raid 配置。我将数据文件放在一个驱动器上,将日志文件放在另一个驱动器上。我认为这是正确的方法。 【参考方案1】:

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

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

select * 
from sys.dm_exec_sessions
where transaction_isolation_level = 4

【讨论】:

以上是关于Webservice 在新的 SQL Server 2014 实例上出现大量死锁的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 R2 根据WSDL访问WebService

在新的 BigQuery 标准 SQL 的数组中使用结构

由于登录失败,SQL Server 2012无法启动

Ubuntu下sql server基本操作命令

取webservice下目录路径

Sql Server 只允许每个用户使用一个活动图像