Laravel SQL Chunk给出-902:从连接中读取数据错误


Laravel SQL Chunk gives -902: Error reading data from the connection

我目前正在查询一个巨大的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]: General error: -902 error read data from connection.

我已经尝试改变块大小,和不同的代码,但错误仍然出现。有时它发生在表的开头,有时在解析数十万甚至数百万行之后。问题是,我只需要解析这个事务中的行(所以我不能停止并重新打开脚本)。

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

在写这篇文章的时候,我重新检查了Firebird日志,发现了以下条目:

INET/inet_error: read errno = 10054

据我所知,这实际上不是一个火鸟问题,而是一个winsock重置错误,是正确的吗?如果是这样,我该如何防止在块查询期间发生这种情况?我如何检查这是windows还是防火墙的问题?

更新我

在PHP服务器上查找firebird2.5.log,发现如下错误:

INET/inet_error: send errno = 104

REMOTE INTERFACE/gds__detach: unsuccessful detach from database.

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

相关文章: