首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从web调用时存储过程速度较慢,从Management调用时速度较快

从web调用时存储过程速度较慢,从Management调用时速度较快
EN

Stack Overflow用户
提问于 2011-07-05 15:46:50
回答 8查看 79K关注 0票数 110

我有存储过程,每次从web应用程序调用它时,都会疯狂地超时。

我启动了并跟踪了那个时间的调用,最后发现了以下情况:

  1. 在中执行语句时,参数相同(实际上,我从SQL跟踪复制了过程调用并运行它):它在5~6秒内完成。
  2. 但是当从web应用程序调用时,它需要超过30秒(在跟踪中),所以我的网页实际上在那时超时了。

除了我的web应用程序有自己的用户之外,每件事情都是一样的(数据库、连接、服务器等),我也尝试着与web应用程序的用户直接在工作室中运行查询,它不超过6秒。

我怎么才能知道发生了什么?

我假设这与我们使用BLL > DAL层或表适配器这一事实无关,因为跟踪清楚地表明延迟在实际过程中。这就是我所能想到的。

编辑--我在此链接中发现,ADO.NET将ARITHABORT设置为true --这在大多数情况下都是好的,但有时会发生,建议的解决办法是向存储的proc添加with recompile选项。在我的例子中,它不起作用,但我怀疑它与此非常相似。有人知道ADO.NET还做了什么或者我在哪里可以找到规范吗?

EN

Stack Overflow用户

发布于 2012-12-11 15:29:01

我还体验到,查询在web上运行得很慢,在SSMS中运行得很快,我最终发现问题是什么叫做参数嗅探。

我的修正是将sproc中使用的所有参数更改为局部变量。

例如:改变:

代码语言:javascript
运行
复制
ALTER PROCEDURE [dbo].[sproc] 
    @param1 int,
AS
SELECT * FROM Table WHERE ID = @param1 

至:

代码语言:javascript
运行
复制
ALTER PROCEDURE [dbo].[sproc] 
    @param1 int,
AS
DECLARE @param1a int
SET @param1a = @param1
SELECT * FROM Table WHERE ID = @param1a

听起来很奇怪,但它解决了我的问题。

票数 59
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6585417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档