【问题标题】:why is DataAdapter.Fill() slower with SQL-Server-2014 than with SQL-Server-2000为什么 SQL-Server-2014 的 DataAdapter.Fill() 比 SQL-Server-2000 慢
【发布时间】:2014-12-12 05:41:09
【问题描述】:

我正在替换用 ASP.NET 1.0 编写的旧版 Web 应用程序。我的计划是在现有数据库模式之上使用 MVC5 重建一个新的 GUI。作为该过程的一部分,我将整个数据库从 SQL-Server 2000 迁移到 SQL-Server 2014,并将同一个 Web 实例指向新的数据库服务器。

虽然新服务器上的查询运行速度更快,但数据库升级导致我们的网站运行缓慢。我将缓慢追溯到“DataAdapter.Fill()”调用。连接到 SQL-Server 2014 时,来自 Web 应用程序的调用大约需要 10 秒,而不是旧数据库服务器的 3 秒(慢约 3 倍)。底层存储过程非常快,所以这不是瓶颈。

新的数据库服务器位于同一网络上,因此延迟应该不是问题。 Web 服务器可以在不到 10 毫秒的时间内 ping 旧服务器和 DB 服务器。

知道为什么数据库升级会导致如此显着的减速吗?

【问题讨论】:

  • 您的索引是否可能需要重建?
  • 索引不是问题。即使使用“SET ARITHABORT OFF”,底层存储过程也非常快。运行“DBCC DROPCLEANBUFFERS”和“DBCC FREEPROCCACHE”确实稍微加快了存储过程,但存储过程不是瓶颈。我目前的理论是,由于 SQL 版本之间的不匹配,DataAdapter.Fill() 调用速度较慢。由于我是通过 .NET 1.0 框架进行调用的,因此它可能依赖于较慢的旧版支持 API。我没有任何证据或专业知识,但这就是我在这里发帖的原因。

标签: asp.net sql-server vb.net sql-server-2000 sql-server-2014


【解决方案1】:

好的,问题解决了。缓慢不在于加载 DataAdapter,而在于对 DB 的普通调用。从 ADO.NET 调用数据库时,它默认关闭 ARITHABORT,即使 SSMS 默认打开它。很难捕捉到,因为即使我尝试通过调用“SET ARITHABORT OFF”来禁用 SSMS 中的默认 ARITHABORT 设置,它也没有效果(不知道为什么)。

我通过将“SET ARITHABORT ON”添加到我的应用程序调用时运行缓慢的存储过程的开头解决了这个问题。可以为整个数据库开启此功能,但有一些risks associated with doing that

我还发现this 很有帮助。

【讨论】:

    猜你喜欢
    • 2015-05-20
    • 2011-05-13
    • 1970-01-01
    • 2011-05-04
    • 2010-12-17
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    相关资源
    最近更新 更多