我注意到我的Web应用程序对本地托管的SQL服务器所做的第一个查询非常慢。有没有人有这方面的经验,知道我可以做些什么来改善性能/延迟。
我有一台带有CF9的本地测试服务器,而活动服务器正在使用CF8。在这两种情况下,SQL都在同一台机器上,并且存在轻微的SQL版本差异:10.5 RTM与10.0.5 SP3。 (虽然生产服务器也在另一个IP上运行另一个sql数据库9.0)
看起来查询速度很快,但初始连接速度很慢,我可以尝试改进这个问题的任何想法吗?
答案 0 :(得分:1)
延迟很可能是通过编译和创建执行计划来创建的。我建议使用存储过程。
答案 1 :(得分:1)
我们在这里遇到同样的问题。每个请求的第一个查询所花费的时间比任何下一个查询要长得多。
我们在SQL Server中创建了两个表来说明这种情况。表,tableA和tableB都是相同的。一个是另一个的副本。
如果我们执行此操作:
<cfquery datasource="test" name="queryA"><!--- This query takes 104 milliseconds --->
SELECT * FROM tableA WHERE id = 1
</cfquery>
<cfquery datasource="test" name="queryB"><!--- This query takes 3 milliseconds --->
SELECT * FROM tableB WHERE id = 1
</cfquery>
但是,如果我恢复更改查询的顺序,则较慢的查询仍然是第一个:
<cfquery datasource="test" name="queryB"><!--- This query takes 104 milliseconds --->
SELECT * FROM tableB WHERE id = 1
</cfquery>
<cfquery datasource="test" name="queryA"><!--- This query takes 3 milliseconds --->
SELECT * FROM tableA WHERE id = 1
</cfquery>
如您所见,差异很重要。
查询非常简单,主键查询和不超过10条记录的表。
我们在这里有ColdFusion 10,但它也在ColdFusion 9和MS SQL Server 2008中发生。
答案 2 :(得分:0)
我的猜测是,第一个连接速度慢的原因是首次建立连接时,会检查凭据。在建立初始连接之后,后续查询要快得多。这只是一个理论......
以下是更多信息:
Connecting to Microsoft SQL Server
Maintain Connections
- ColdFusion为每个需要一个操作的操作建立与数据源的连接。启用此选项可通过缓存数据源连接来提高性能。
我不确定默认设置是什么,但可能值得进一步研究。