我注意到我的 Web 应用程序对本地托管的 SQL 服务器执行的第一个查询非常慢。有没有人有这方面的经验并且知道我可以做些什么来提高性能/延迟。
我有一个带有 CF9 的本地测试服务器,而活动服务器使用的是 CF8。在这两种情况下,SQL 都在同一台机器上,并且 SQL 版本略有不同:10.5 RTM 与 10.0.5 SP3。(虽然生产服务器也在不同的 IP 运行另一个 sql 数据库 9.0)
看起来查询很快,但初始连接很慢,有什么想法可以尝试改进吗?
我注意到我的 Web 应用程序对本地托管的 SQL 服务器执行的第一个查询非常慢。有没有人有这方面的经验并且知道我可以做些什么来提高性能/延迟。
我有一个带有 CF9 的本地测试服务器,而活动服务器使用的是 CF8。在这两种情况下,SQL 都在同一台机器上,并且 SQL 版本略有不同:10.5 RTM 与 10.0.5 SP3。(虽然生产服务器也在不同的 IP 运行另一个 sql 数据库 9.0)
看起来查询很快,但初始连接很慢,有什么想法可以尝试改进吗?
我们在这里遇到了同样的问题。每个请求的第一个查询都比任何下一个查询花费的时间要长得多。
我们在 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 上。
延迟很可能是由编译和创建执行计划造成的。我建议使用存储过程。
我的猜测是第一次连接速度慢的原因是那是第一次建立连接并检查凭据的时候。建立初始连接后,后续查询要快得多。虽然这只是一个理论...
这是更多信息:
Maintain Connections
- ColdFusion 为每个需要连接的操作建立与数据源的连接。启用此选项可通过缓存数据源连接来提高性能。
我不确定默认设置为什么,但可能值得进一步研究。