【发布时间】:2010-05-06 03:29:38
【问题描述】:
我有一个每天运行一次的计划任务,它构建了一个我传递给另一个组的 XML 文件。最近数据量大大增加,现在导致任务超时(我认为)。我试图尽可能优化我的脚本,但没有运气。它在一个小时前超时,我没有收到任何类型的 ColdFusion 错误。相反,我在运行后收到“找不到此页面”。
- 这可能是 Coldfusion 以外的其他地方的超时吗?
- 有没有更有效的方法来构建这个 XML 文件?
文件:
<cfsetting requesttimeout="7200">
<cftry>
<cfquery datasource="datasource" name="getPeople">
select PersonID, FirstName, LastName
from People
</cfquery>
<cfquery datasource="datasource" name="getDepartments">
select d.DepartmentID, DepartmentName, pd.PersonID
from Department d inner join PersonDepartment pd on d.DepartmentID = pd.DepartmentID
</cfquery>
<cfquery datasource="datasource" name="getPapers">
select PaperID, PaperTitle, PaperDescription, pp.PersonID
from Paper p inner join PersonPaper pp on p.PaperID = pp.PaperID
</cfquery>
<cfsavecontent variable="theXML"><?xml version="1.0" encoding="utf-8" ?><people>
<cfoutput query="getPeople"><cfsilent>
<cfquery dbtype="query" name="getPersonDepartments">
select DepartmentID, DepartmentName
from getDepartments
where PersonID = #getPeople.PersonID#
</cfquery>
<cfquery dbtype="query" name="getPersonPapers">
select PaperID, PaperDescription
from getpapers
where PersonID = #getPeople.PersonID#
</cfquery>
</cfsilent> <person>
<person_id>
#getPeople.PersonID#
</faculty_id>
<person_first_name>
#getPeople.Firstname#
</person_first_name>
<person_last_name>
#getPeople.LastName#
</person_last_name><cfif getPersonDepartments.recordcount gt 0>
<departments><cfloop query="getPersonDepartments">
<department>
<department_id>
#getPersonDepartments.DepartmentID#
</department_id>
<department_name>
#getPersonDepartments.DepartmentName#
</department_name>
</department></cfloop>
</departments></cfif><cfif getPersonPapers.recordcount gt 0>
<papers><cfloop query="getPersonPapers">
<paper>
<paper_id>
#getPersonPapers.PaperID#
</paper_id>
<paper_description>
#getPersonPapers.PaperDescription#
</paper_description>
</paper></cfloop>
</papers></cfif>
</person>
</cfoutput></faculty>
</cfsavecontent>
<!--- Generate the file that contains the RSS --->
<cffile action="write" file="#application.serverroot#/People.xml" output="#theXml#" nameconflict="overwrite">
<cfcatch>
<cfdump var="#cfcatch#">
</cfcatch>
</cftry>
Done!
【问题讨论】:
-
我会添加一些时间来查看您的大部分时间都花在了哪里。如果您将 85% 的时间花在查询查询上,那么优化原始数据库查询毫无意义。最简单的方法是使用 getTickCount() 创建一个计时器并记录它或使用 CFFLUSH 将其返回给客户端。
-
还没有。我正在尝试与我们的管理员合作以获得适当的访问权限,以便我可以提出您的一些建议
-
嘿,完全没有必要做这些事情......例如,您可以将写入文件更改为正常输出,使用不带 cfsavecontent 的 cfflush,如果它变得太长,那么我们就在右边追踪。我认为最重要的是找到真正的原因,是内存还是数据库或其他什么。
标签: xml sql-server-2005 coldfusion timeout