【发布时间】:2019-12-06 16:42:03
【问题描述】:
我一直在对旧版 Web 应用程序进行一些维护,该应用程序使用 ASP.NET Web 窗体、VB.NET 实现,并使用 LINQ-to-SQL 进行数据访问。
我们最近将应用程序从 SQL Server 2005 迁移到 SQL Server 2016。从那时起,以前需要几秒钟才能生成的报告现在需要几分钟。
报告生成的设计有些欠佳。为了生成单个摘要报告,我们运行了大约 100 个查询,然后将结果拼凑到最终报告的代码中。我会更喜欢一种设计,让一个查询完成数据库中的所有工作。
我们让我们的数据库管理员在测试时运行了一个分析工具。在他提供的跟踪表中,我看到了大约 200 个与报告生成相关联的条目。使用 sp_executesql(由 LINQ-to-SQL 生成)的数据访问查询只有一百多个,每个查询最多只需要几毫秒。 sp_reset_connection 的调用次数大致相同,但 DB 管理员断言这并没有什么意外。而且他自己对跟踪表的检查也没有发现任何危险信号。
很遗憾,在我们进行测试时,Web 服务器的管理员没有可运行的分析工具,我无法在本地计算机上运行该应用程序来进行自己的分析。
关于我们的配置的更多细节:
- Windows Server 2016
- IIS 10
- .NET Framework 4.6.2
- SQL Server 2016 (13.0.5366.0)
对我们如何解决这个问题有什么建议吗?
【问题讨论】:
-
2014 年基数估计发生了很大变化;有很多关于这个主题的文章。#
-
@Larnu 您是否认为基数估计器的变化会导致速度缓慢,即使每个单独的查询都在几毫秒内运行?查询之间的时间似乎占报告生成所需总时间的很大一部分。
-
@Micheal;如果有帮助,请标记答案,如果有帮助,请发表评论。
标签: sql-server vb.net linq-to-sql webforms