使用doctrine的内存耗尽解决办法

PHP Fatal error: Allowed memory size of xxx xxx xxx bytes exhausted

无论是插入大量数据或者查询大量数据时,都可能因为数据量太大而出现上面的问题。

首先肯定使用memory_get_usage()进行监控,然后通过优化查询,如使用完及时的unset()变量,或者置为null。将数量大的查询分解为多次较小的查询等等。

使用上面这些并不能带来明显的内存降低。特别是将数量大的查询分解为多次小的查询时,每一次查询后内存依然在线性增加。这时可以会想到使用无缓冲的查询(unbuffered queries)。这是一条正确的道路,但是如何在doctrine下面使用无缓冲查询呢?


经过查询还是没有找到实现无缓冲查询的方式,那只能退而求其次,使用PDO查询吧!

$conn = $this->getDoctrine()->getManager()->getConnection()->getWra‌​ppedConnection()
$conn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$conn就是个PDO对象,然后就可以使用上面的优化方法了,特别是将数据分解为多次的小查询进行操作!

原文地址:https://www.cnblogs.com/furzoom/p/7710164.html