首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么控制台应用程序受SSMS打开的影响?

为什么控制台应用程序受SSMS打开的影响?
EN

Stack Overflow用户
提问于 2018-01-15 11:54:42
回答 2查看 116关注 0票数 5

我有一个控制台应用程序(c#),它打开到sql数据库的连接,执行存储过程,然后退出。存储过程自己计时(使用getdate和datediff),并将时间返回到控制台应用程序。存储过程总是报告执行时间大约为100毫秒。

反复运行控制台应用程序会给出一致的时间集(包括ExecuteReader命令的300 ms )。

然而,我偶然发现并能够可靠地再现以下效果:如果打开SSMS并连接到数据库,然后运行两次控制台应用程序,那么控制台应用程序中的ExecuteReader在第二次运行时要快得多。

注意:您不必在SSMS中运行甚至打开存储过程,只需连接到数据库即可

控制台应用程序的第二次运行受到了很大影响,实际上,通过打开SSMS并连接到相同的数据库,它得到了很大的改进。

代码语言:javascript
运行
复制
ExecuteReader when SSMS is not open 300 ms
ExecuteReader when SSMS is not open 300 ms
ExecuteReader when SSMS is not open 300 ms
Open SSMS and connect to database
First ExecuteReader when SSMS is open and connected to same database 300 ms
Second ExecuteReader with SSMS open and connected 10 ms !!!
Third ExecuteReader with SSMS open and connected 10 ms
Fourth ExecuteReader with SSMS open and connected 10 ms
Close SSMS
ExecuteReader back to reporting 300 ms to execute

换句话说,为ExecuteReader报告的时间少于存储过程运行所需的时间。

注意,存储过程的运行时间总是相同的。

似乎SSMS有一种允许控制台应用程序使用的缓存。

有人能解释一下这件事吗?sys.dm_exec_connections显示所有不同连接之间没有区别。

SSMS是v17.3,连接到sql server 2008 R2 SP2数据库

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-15 13:44:58

请确保没有为数据库设置AUTO_CLOSE。根据聊天中的讨论,这似乎是设置为ON的。

引用自微软

设置AUTO_CLOSE时,由于每次连接后打开和关闭数据库的开销增加,会导致频繁访问的数据库的性能下降。AUTO_CLOSE还在每个连接之后刷新过程缓存。 最佳做法建议 如果数据库经常被访问,请将数据库的AUTO_CLOSE选项设置为OFF。

您可以通过运行以下查询(如AUTO_CLOSE建议的那样)来切换丹·古兹曼

代码语言:javascript
运行
复制
ALTER DATABASE YourDB SET AUTO_CLOSE OFF;
票数 4
EN

Stack Overflow用户

发布于 2018-01-15 12:38:37

我希望这种行为来自于连接池特性。您能在控制台应用程序中每次调用之后尝试一个SqlConnection.ClearAllPools吗?

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

https://stackoverflow.com/questions/48262494

复制
相关文章

相似问题

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