Doctrine查询执行内存问题

时间:2015-02-04 08:37:31

标签: php postgresql symfony memory-leaks doctrine-orm

我在循环中运行一个doctrine查询,绑定参数并执行多次。查询执行正常,问题是每组循环的内存使用量跳跃大约3mb。看起来垃圾收集并没有开始,最终服务器内存不足。

foreach () { .....
    foreach () { .....
        $conn = $this->getEntityManager()->getConnection();

        if ($this->sql == null) {
            $this->sql = $conn->prepare(
                "INSERT INTO table (l_id, a_id) VALUES (:lId, :aId);"
            );
        }
        //Memory usage 200
        foreach($lo as $l) {
            $this->sql->bindParam('lId', $l->getId());
            $this->sql->bindParam('aId', $aId);
            $this->sql->execute();
        }
        //Memory usage ++3mb
    }
}

整个脚本也嵌套在一个循环中。所以它会被多次调用。但上面的foreach循环似乎是内存增加的地方。

我正在调用直接插入数据库,因此实际管理器甚至没有被用作最初我认为这可能会减慢它的速度。

编辑: 我已经尝试将bindParam更改为bindValue但是会出现同样的问题。并在循环外移动第二个bindParam;

1 个答案:

答案 0 :(得分:2)

通过关闭doctrine中的SQL日志记录,考虑到在此应用程序中触发的查询量,解决了内存泄漏问题,

$conn = $this->getEntityManager()->getConnection();
$conn->getConfiguration()->setSQLLogger(null);