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

luther · 2021-08-11 10:03:54 · 热度: 13
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对象,然后就可以使用上面的优化方法了,特别是将数据分解为多次的小查询进行操作!

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册