首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server存储过程RPC与SSMS

SQL Server存储过程RPC与SSMS
EN

Stack Overflow用户
提问于 2018-12-21 21:51:56
回答 1查看 317关注 0票数 0

我有一个带有1个参数的存储过程。当我从SQL Server Management Studio运行存储过程时,它在2-4秒内运行。当我使用控制台应用程序调用它时,它需要30+秒。SQL Server是远程的,SSMS和我的应用程序都是从我的本地机器上运行的,所以我不认为这是一个网络问题。

我已经运行了SQL Server事件探查器来尝试跟踪该问题,我看到的一件事是,当它从SSMS运行时,它会启动语句,重新编译它,然后重新启动它,然后完成它,如下所示:

代码语言:javascript
复制
SP:StmtStarting
SP:Recompile
SQL:StmtRecompile
SP:StmtStarting
SP:StmtCompleted

这2个重新编译的条目的EventSubClass为"2 -统计信息已更改“

在应用程序中,我只看到SP:StmtStarting和SP:StmtCompleted的条目,没有重新编译条目。

我使用相同的参数值调用完全相同的存储过程。为什么SSMS会根据统计数据重新编译,而我的控制台应用程序不会?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 03:18:41

经过研究和故障排除,这似乎完全是由于SET_ARITHABORT_ON。SSMS默认设置为'ON‘,而.net客户端默认设置为'OFF’,所以它使用了两个不同的执行计划,尽管我不完全确定为什么这两个计划有如此大的不同。

我重写了OpenConnection()方法以打开连接,并将其设置为ON,然后我的应用程序就具有了与SSMS相同的性能。我希望这对其他偶然发现这一点的人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53885929

复制
相关文章

相似问题

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