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()->getWrappedConnection()
$conn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$conn
就是个PDO对象,然后就可以使用上面的优化方法了,特别是将数据分解为多次的小查询进行操作!
暂无回复。