【问题标题】:Exec <Stored procedure> extremely slowExec <存储过程> 非常慢
【发布时间】:2013-10-17 15:07:00
【问题描述】:

我有一个非常大的存储过程,它采用单个参数@date。当我突出显示 SQL 代码并点击执行时,查询会在大约 25 秒内运行。但是,如果我尝试使用以下命令在单独的窗口中运行存储过程:

Exec <Stored Procedure> @date = '2013-10-16'

存储过程大约需要一个半小时才能运行。关于为什么会发生这种情况的任何想法?我也在尝试通过 BIDS 运行它,存储过程需要同样长的时间才能运行。

注意:当我突出显示要执行的代码时,我使用

Declare @date as date = '2013-10-16'

设置参数。

【问题讨论】:

  • 我会检查 proc 中正在使用的源表,看看 1. 它们有多大和 2. 索引和索引碎片。
  • 尝试清除你的sql执行计划。 stackoverflow.com/questions/1288808/…
  • 用存储过程的create/alter语句高亮代码,将创建/保存存储过程。在第二个窗口中,您实际上是在执行过程以带来结果,如果花费太多时间,可能存在索引问题,或者处理的数据量过多,请使用执行计划检查哪里更慢
  • @Ashwin Chandran 不幸的是,我没有权限在我目前的位置上运行它,我会看看能不能找人来做。
  • @Juan Garcia 当我突出显示代码时,我不包括 Create/alter 部分,只是代码部分,它实际上确实返回了查询中预期的值表。我在哪里可以找到执行计划?我以前从未见过。

标签: sql sql-server stored-procedures ssms bids


【解决方案1】:

当你说如果你声明参数变量并手动运行 sql 它运行得很快,但是当你通过 BIDS 运行它时需要很长时间,我想到了参数嗅探。

尝试在您的 SP 中声明一个变量,然后您要做的第一件事就是将参数的值分配给这个新的局部变量,然后在您的 SP 中的任何地方使用该局部变量。

欲了解更多信息:http://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is-parameter-sniffing.aspx

【讨论】:

  • 哇,我从来没有想过,这行得通!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多