【问题标题】:Query runs fast in Query Analyzer but slow in C# application [duplicate]查询在查询分析器中运行速度很快,但在 C# 应用程序中运行缓慢 [重复]
【发布时间】:2012-09-11 01:47:14
【问题描述】:

可能重复:
sql runs fast in ssms slow in asp.net

使用 SQL Server 2005,在几个大表上有一个 sql 查询,它在程序中超时。但是,当我在查询分析器中运行它时,它会在大约 30 秒内完成。

为什么不一样?

【问题讨论】:

  • 你的意思是 Management Studio,对吧,不是 Query Analyzer?

标签: sql-server sql-server-2005 ssms query-analyzer


【解决方案1】:

通常这些是 SET 设置差异,导致不同的计划。在 Management Studio 中,该过程可能在其创建时使用相同的设置运行。

查看您的 ASP.Net 应用程序和 SSMS 会话的 sys.dm_exec_sessions。我会冒险猜测您的SET 设置中至少有一个是不同的。这可能会促成不同的计划(最终这归因于参数嗅探),并且应用程序端通常会变得更糟。

有关更多详细信息,请参阅这些其他问题:

还可以阅读 Erland Sommarskog 的文章,Slow in the Application, Fast in SSMS?

【讨论】:

  • 我们遇到了这个问题并经过验证,.net 和 ssms 中的参数相同。我什至验证了运行缓慢完全是在过程中的选择命令上。在 SSMS 中运行大约需要 2 秒(500 万条记录中有 15 条记录),而在 .NET 中运行需要 56 秒。重建索引也没有任何区别。我向随机列添加了索引,.NET 执行时间降至 200 毫秒。再次删除了相同的索引,执行时间仍然保持在 200 毫秒。我称之为 SQL 巫术魔法。如果你知道为什么,如果你能分享,不胜感激
  • @AaA 您根据文章中提到的一项或多项设置制定了不同的计划,这允许在统计数据可能不同时在不同时间编译不同的计划(我猜想.NET 应用程序有一个基于旧的、过时的统计数据的计划)。当您创建索引(并删除它)时,这会使现有计划无效,并且您会根据当前统计数据获得新计划,这些计划更好。没有巫毒或魔法。 :-)
  • 嗯,这些计划还在继续吗?这个问题发生了几天,我们多次重新启动了应用服务器和 sql 服务器。由于数据库自 2 年前启动以来没有任何变化(正常的 CRUD 除外),并且性能随着时间的推移而下降,我怀疑这与计划有什么关系。但作为你的建议,我很想试试。如何将这些计划重置为当前计划?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多