有时调用后台存储过程很慢,但更新一下存储过程就好了,反反复复,不知是何原因

wzh1215 2010-07-10 08:45:06
ASP.NET调用SQL后台存储过程时,有时突然就变得很慢,在后台直接执行存储过程没问题,但在前台调用存储过程时就是很慢,而且在前台调用成功后,再次调用还是一样的慢,但更新一下存储过程再调用就很快了。但这始终不能彻底解决问题,过段时间又会出来同样的问题。环境(NET2.0+SQL2005)
...全文
527 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jisuanjizhang 2011-01-05
  • 打赏
  • 举报
回复
顶下
with recompile真的解决了我的问题
bancxc 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sql77 的回复:]
引用 10 楼 wzh1215 的回复:
加上with RECOMPILE对存储过程的执行效率有多大影响?

简单的举个例子吧,一个表数据里面ID列 1000行,1 个1 其余全部是2 在ID上有索引

你过程以ID为参数,第一次传入ID为1,执行索引查找,
而第二次你以2为参数,这样如果还是查找的话,效率显然不怎么好,不如表扫描了

这是性能调优里面一个例子好像,不知道记错没
[/Quote]领教了,谢谢各位!
wzh1215 2010-07-10
  • 打赏
  • 举报
回复
领教了,谢谢各位!
SQL77 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wzh1215 的回复:]
加上with RECOMPILE对存储过程的执行效率有多大影响?
[/Quote]
简单的举个例子吧,一个表数据里面ID列 1000行,1 个1 其余全部是2 在ID上有索引

你过程以ID为参数,第一次传入ID为1,执行索引查找,
而第二次你以2为参数,这样如果还是查找的话,效率显然不怎么好,不如表扫描了

这是性能调优里面一个例子好像,不知道记错没
Garnett_KG 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wzh1215 的回复:]

加上with RECOMPILE对存储过程的执行效率有多大影响?
[/Quote]

看你的CPU负载有多大,一般来说影响很小。
wzh1215 2010-07-10
  • 打赏
  • 举报
回复
加上with RECOMPILE对存储过程的执行效率有多大影响?
永生天地 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 garnett_kg 的回复:]
引用 4 楼 wzh1215 的回复:

加上option(recompile)有什么意义?
正常情况下,存储过程中的语句执行都很快,只是存储过程中有6个条件判断,不知是否有影响·


存储过程执行时传的参数不同,可能会导致执行的效能出现差异,原因是存储过程的编译时在首次调用时发生,以后的执行,不管传的什么参数都是以第一次产生的执行计划来执行。

你更新存储过程后,会以导致再次编译……
[/Quote]
支持,
加上 with RECOMPILE
试试效果
ChinaITOldMan 2010-07-10
  • 打赏
  • 举报
回复
Good post,learning
Garnett_KG 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wzh1215 的回复:]

加上option(recompile)有什么意义?
正常情况下,存储过程中的语句执行都很快,只是存储过程中有6个条件判断,不知是否有影响·
[/Quote]

存储过程执行时传的参数不同,可能会导致执行的效能出现差异,原因是存储过程的编译时在首次调用时发生,以后的执行,不管传的什么参数都是以第一次产生的执行计划来执行。

你更新存储过程后,会以导致再次编译,所以会快。 加option(recompile)的目的是以传的参数再次编译你的语句。
SQL77 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wzh1215 的回复:]
加上option(recompile)有什么意义?
正常情况下,存储过程中的语句执行都很快,只是存储过程中有6个条件判断,不知是否有影响·
[/Quote]
那样是重新编译了一下存储过程,将执行计划更新了

创建存储过程时在其定义中指定 WITH RECOMPILE 选项,表明 SQL Server 将不对该存储过程计划进行高速缓存;该存储过程将在每次执行时都重新编译

  • 打赏
  • 举报
回复
这问题高深,如果楼主用with RECOMPILE解决了,就我就算是学习了
wzh1215 2010-07-10
  • 打赏
  • 举报
回复
加上option(recompile)有什么意义?
正常情况下,存储过程中的语句执行都很快,只是存储过程中有6个条件判断,不知是否有影响·
SQL77 2010-07-10
  • 打赏
  • 举报
回复
新编译存储过程
在用诸如添加索引或更改索引列中的数据等操作更改数据库时,应通过重新编译访问数据库表的原始查询计划使其得到重新优化。在重新启动 Microsoft® SQL Server™ 2000 后第一次运行存储过程时自动发生该优化。当存储过程使用的基础表更改时也会发生优化。但是如果添加了存储过程可能从中受益的新索引,将不发生自动优化,直到下一次 SQL Server 重新启动后再运行该存储过程时为止。

SQL Server 提供三种重新编译存储过程的方法:

sp_recompile 系统存储过程强制在下次运行存储过程时进行重新编译。


创建存储过程时在其定义中指定 WITH RECOMPILE 选项,表明 SQL Server 将不对该存储过程计划进行高速缓存;该存储过程将在每次执行时都重新编译。当存储过程的参数值在各次执行间都有较大差异,导致每次均需创建不同的执行计划时,可使用 WITH RECOMPILE 选项。此选项并不常用,因为每次执行存储过程时都必须对其进行重新编译,这样会使存储过程的执行变慢。


在执行存储过程时指定 WITH RECOMPILE 选项,可强制对存储过程进行重新编译。仅当所提供的参数不典型,或者自创建该存储过程后数据发生显著更改时才应使用此选项。


说明 如果删除或重命名了存储过程所引用的对象,那么在执行该存储过程时会返回错误。但如果用同名对象替换了存储过程中引用的对象,则可以不进行重新编译而继续执行该存储过
Garnett_KG 2010-07-10
  • 打赏
  • 举报
回复
改改你的SP,在可能比较耗时的语句后面加上option(recompile)
Garnett_KG 2010-07-10
  • 打赏
  • 举报
回复
execution plan cache的问题。


34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧