Laravel SQL Chunk给出-902:从连接

时间:2015-09-28 19:35:29

标签: php laravel firebird laravel-5.1

我目前正在查询一个巨大的Firebird(v2.5)表(包含数百万行),以便执行一些行级操作。为了实现这一点,代码使用Laravel 5.1中的分块,有点像这样:

DB::connection('USER_DB')
    ->table($table->name)
    ->chunk(min(5000, floor(65500/count($table->fields))), function($data) {
        // running code and saving
    });

出于某种原因,我一直收到以下错误:

  

SQLSTATE [HY000]:常规错误:-902从连接读取数据时出错。

我已经尝试更改块大小和不同的代码,但错误仍然存​​在。有时它发生在表的开头,有时在解析几十万甚至几百万行之后。问题是我只需解析此事务中的行(因此我无法停止并重新打开脚本)。

对服务器上的内存进行测试(在与数据库不同的地方运行),并且几乎没有使用任何内容。

写这篇文章的时候,我重新检查了Firebird日志并找到了以下条目:

  

INET / inet_error:读取errno = 10054

据我所知,这实际上并不是Firebird问题,但是一个winsock重置错误,这是正确的吗?如果是这样,我怎么能防止在块查询期间发生这种情况?如何检查Windows或防火墙是否存在问题?

更新我

在PHP服务器上挖掘firebird2.5.log,发现了这个错误:

  

INET / inet_error:发送errno = 104

     

REMOTE INTERFACE / gds__detach:与数据库无关联。

1 个答案:

答案 0 :(得分:1)

我找到了问题的根源。问题是服务器正在重置连接。为了避免这种情况,我添加了一个"心跳"查询每隔几分钟运行一次。通过这种策略,我能够防止重置连接。