2

我有一个执行长时间运行查询的 ColdFusion 模板。我已将请求超时从 3600 增加到 6600,但我的模板继续超时。我想再次将请求超时从 6600 增加到 9600,但在这样做之前我想知道增加请求超时是否有任何缺点或风险?

基本上,我的 cfm 文件所做的是。它必须从表中获取记录并将它们插入到 Excel 工作表中。该表包含大约 30,000 条记录。cfm 文件一次获取每 1000 条记录并将它们插入 Excel,然后再获取下 1000 条,依此类推。为了完成整个过程,它有时会因为超时问题而突然停止。所以在我增加“requesttimeout”之前我想知道,如果我极大地增加 requesttimeout 会不会有任何问题(内存使用、性能)。

4

3 回答 3

5

在需要的地方增加超时很好。您应该使用 cfsetting requestTimeOut="xxx" 在需要的地方增加超时,而不是在管理员中增加它,因为这会影响所有模板。

缺点是有一个线程池来处理请求,当一个线程正在处理您的长时间运行的请求时,它不能做其他事情。只要您确信长时间运行的请求一次只能由一两个人运行,这很好,但如果有很多人可以运行它,就会出现问题。如果 CF 将同时运行 8 个请求并且所有 8 个请求都在处理您的长时间运行的请求,那么您的站点实际上处于离线状态。CF 会将请求排队到某个点,但您一开始不希望进入此状态。

我曾在应用程序中工作过,其中只有后台管理员任务可能需要长达一个小时,但我们确信不会再有 2 个人会运行它们。

您还可以考虑使用cfthread以在不阻塞页面的情况下运行查询,但是向用户提供反馈会更加困难。

于 2012-09-13T13:23:50.967 回答
1

我认为如果我们能更好地了解情况会有所帮助。这是否类似于夜间运行的工作?或者这是用户可能导航到的页面,在他们等待时会生成报告?给我们一些关于你的页面在做什么的基本信息。

此外,还有不同的方法可以增加请求超时;系统范围通过管理员或特定页面通过<cfsetting requestTimeOut="">标签。你增加哪一个?我建议您不要增加系统范围的设置,但可以在需要时增加页面级别设置。

<cfquery>该标签还有一个超时属性。你在用那个吗?

你能告诉我们<cfquery>是超时还是在cfquery之后和数据输出期间发生超时?

我还建议尝试尽可能优化您的查询。是否可以设置索引(如果尚未设置)?您真的只需要返回记录的子集吗?

也许您可以将这一页拆分为多个页面,每个页面运行得更快。

于 2012-09-13T12:26:43.253 回答
0

如果发起请求的用户不需要等待结果(即一天结束或隔夜报告),而不只是增加超时限制,那么我将使用超时设置为 0 的 cfthread(从不out) 并让它在后台运行直到它完成,或者设置一个极长的超时时间,比如 1 小时。我还将使用 cflock 来防止线程能够多次处理,否则您可能会因许多繁重的线程而使系统停止运行。

阅读这个-docs-看看你的想法

于 2012-09-13T14:34:05.737 回答