【发布时间】:2018-04-27 23:10:21
【问题描述】:
我从一个 AS400(IBM iSeries 数据库)表中选择 19 列。查询运行良好,总行数少于 17,000。 但是,一旦我运行
$row = $statement->fetch(PDO::FETCH_NUM)
PHP 内存不足(512 兆)。脚本甚至不需要一秒钟就崩溃 - 某些东西会立即耗尽所有内存。
我可以从不同的表中获取更多列,总共返回 150,000 行(使用相同的 fetch() 命令),并且内存消耗保持在 500 KB 左右。 然而,关于其他选择提取的某些东西完全消灭了这个过程。
我在 64 位 Linux 上使用 IBM 的 iSeries ODBC 驱动程序。 任何有关进一步故障排除的建议将不胜感激。
更新:我已将问题隔离到导致此问题的列 - 它是一个长度为 4 的 CHARACTER 字段。打破提取的记录实际上在该字段中有一个空值。可能是驱动程序对如何处理空值有一些误解。
【问题讨论】:
-
你在用
$row做什么? -
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY设置为什么? php.net/manual/en/mysqlinfo.concepts.buffering.php -
您确定表中没有占用大量内存的列?一些存储在 blob 或类似文件中的二进制对象?
-
@Don'tPanic 对此无能为力 - php 在该行的内存不足。
-
@erg,好主意,但列只是 varchars、小数和整数
标签: php pdo odbc ibm-midrange