Coldfusion 8 - cfquery insert语句超时

时间:2011-04-12 21:20:32

标签: sql-server coldfusion insert timeout cfquery

我正在构建一个使用cfhttp读取分隔日志文件的脚本。这些日志文件往往相当大,所以当我尝试将日志文件中的数据插入到我创建的表中时,我的cfquery insert语句超时。

所以,我想解决这个问题的方法是一次插入200到300条记录,然后以某种方式刷新插入语句计时器,然后导入下一组200-300条记录。

我不完全确定如何做到这一点。

每个人都处理从日志文件导入数千个条目?你是如何克服cfquery标签中的超时的。

4 个答案:

答案 0 :(得分:1)

我不是100%确定这对你有用,但是对于将日志文件数据存入数据库的核心任务,我会绕过ColdFusion完全解析数据的步骤。

直接从SQL中查看。

  1. 首先在本地复制文件,可能使用<cfftp/>

  2. 然后,将您的日志文件视为CSV文件,write a SP可以通过CF执行,只将日志数据读入临时表。这应该是快速的,避免任何超时。

  3. 然后,您可以进行单独的步骤(可能再次使用SQL),以便在数据位于临时表中时重新组织数据。

  4. 希望有所帮助。

答案 1 :(得分:0)

首先检查它是db time out而不是http请求。你是否在cfloop中一次插入1个rec?你有插入表的索引吗?尝试在一个insert语句中插入多个记录。

答案 2 :(得分:0)

如果可以将文件加载到会话变量中,则可以使用cfloop每次调用的startrow和endrow属性一次解析行。然后,您将设置脚本以设置计数器,执行第一次传递,更新计数器,然后使用cfhttp将信息再次发送到您的进程,并传入udpated计数器。然后,该过程将解析这些行并执行插入。

对于大量数据,并且根据数据库,您可以考虑创建一个可以一次传入整个块的存储过程,就像XML一样。然后,您的sproc将从XML字段向表中执行单个insert语句。

这将加快处理速度,不会导致CF超时。

答案 3 :(得分:0)

Cold Fusion可以传递SQL Server使用的批量插入命令,您只需要确保在您正在使用的dB服务器上允许该功能。我建议将文件放在本地,并使用SQL Server的批量插入功能。