优化SQL连接性能?

时间:2009-07-03 09:36:25

标签: c# .net sql performance sqlconnection

这不是关于优化SQL命令的问题。我想知道有哪些方法可以确保SQL连接保持打开并准备好尽可能高效地处理命令。

我现在看到的是我可以执行一个SQL命令,该命令需要大约1秒,额外的执行需要大约300毫秒。这是在先前针对SQL服务器(来自另一个应用程序实例)执行命令之后...因此在应用程序初始执行之前,应该为执行的查询完全填充SQL缓存。只要我不断重新执行查询,我就会看到大约300ms的时间,但如果我让应用程序空闲5-10分钟并返回下一个请求将返回到~1s(与初始请求相同)。

有没有办法通过连接字符串或SqlConnection上的某些属性指示框架保持连接水合并准备好有效地处理查询?

5 个答案:

答案 0 :(得分:2)

您是否已检查过程的执行计划。我认为执行计划被加载到服务器上的内存中,然后在一段时间后或根据过程中访问的表等进行清除。我们曾经遇到过这样的情况,即简化存储过程(可能会拆分它们)会减少数据库服务器在计算计划时必须完成的工作量......并最终减少第一次调用过程时...您可以发出命令强制存储过程每次重新编译以测试是否缩短了初始调用时间... 我们遇到过这样的情况,即存储过程的复杂性导致数据库服务器不断地根据不同的参数重新编译,这些参数大大减慢了它的速度,拆分SP或将大型select语句简化为多个更新语句等都有相当大的帮助。

其他想法可能会经常间歇性地调用一个简单的getDate()或类似的东西,以便sql服务器清醒(希望有意义)......就像在IIS中将asp.net应用程序保存在内存中一样。

答案 1 :(得分:2)

.NET连接池中打开连接的默认值为零。

您可以将连接字符串中的此值调整为1或更多:

"data source=dbserver;...Asynchronous Processing=true;Min Pool Size=1"

详细了解这些options in MSDN

答案 2 :(得分:0)

通过不关闭它来保持打开状态。 :)但这不建议,因为连接池将为您处理连接管理。你启用它吗?

答案 3 :(得分:0)

默认情况下,ADO .NET中启用了连接池。这将通过应用程序使用的连接字符串。 Using Connection Pooling with SQL Server

中的更多信息

答案 4 :(得分:0)

如果您使用多个数据库连接,则可能更有效。拥有一个数据库连接意味着最好的访问速度总是会被顺序限制。而拥有> 1连接意味着您的编译器有机会优化并发访问。我猜你在使用.NET?

此外,如果您重复发出相同的SQL语句,那么您的数据库服务器可能会在短时间内缓存结果,因此可以更快地返回结果集。