BCP任务在执行时挂起

时间:2010-05-25 22:06:27

标签: c# bcp hpc

我们有一个HPC节点,它在其中运行我们的一些任务。我的.net项目中有一个任务,它在HPC节点上启动bcp实用程序,并将查询的输出运行到9 Mb。

当HPC节点运行此任务时,查询的输出被转储到一个文件中,然后在它转储大约5mb的数据后,它突然停止转储任何更多的数据,这种情况一直发生。 (请注意,这不是任何数据问题,因为它每次都不会在特定行上崩溃)。这可能有意义,也可能没有意义,但我将数据转储到具有足够权限的不同服务器中。

我在hpc节点和其他comps上直接运行了相同查询的命令,它给出了正确的输出。

我正在运行bcp命令,如下所示:

var processInfo = new ProcessStartInfo(“bcp.exe”,参数)                                   {                                       RedirectStandardOutput = true,                                       RedirectStandardError = true,                                       CreateNoWindow = true,                                       UseShellExecute = false                                   };

        var proc = new Process { StartInfo = processInfo, EnableRaisingEvents = true };
        proc.Exited += new EventHandler(bcp_log);
        proc.Start();
        proc.WaitForExit();

所以我的代码实际上等待每个bcp任务在它继续运行之前运行,因为我多次调用它。

仅供我们再次提醒您,只有当我的o / p超过某个字节数时才会失败,大约5mb。

非常感谢任何帮助。

P.S:我想在所有hpc节点上添加bcp实用程序

2 个答案:

答案 0 :(得分:2)

如果您将RedirectStandardOutput=true更改为RedirectStandardOutput=false,它仍会挂起吗?

如果上述更改避免了挂起,则可能遇到尝试通过.NET Process类重定向stdout和stderr流时可能发生的死锁情况。下面的MSDN文章更详细地解释了这一点,并提供了示例代码以异步读取stderr并避免死锁条件。

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandarderror.aspx

答案 1 :(得分:2)

嘿,这里的问题是HPC节点无法将bcp命令的输出重定向到标准输出。在这种情况下,标准输出具有最小值,在我们的情况下,当表中的行数超过50000时,它不再能够重定向到标准输出。在某些时间间隔明确刷新标准输出时,您仍然可以重定向到标准输出而没有任何问题