过大的表导致“允许的内存大小x字节已用尽”错误


Extra big table causes a Allowed memory size of x bytes exhausted error

我有一个实体,它连接到一个巨大的表:200000行。

我面临的问题是,当我将实体对象绑定到表单中时,我会得到以下错误:

致命错误:允许的内存大小134217728字节已用完(已尝试分配85字节)//public_html/application/vender/doctory/orm/lib/Doctory/orm/Internal/Hydration/AbstractHydrator.php在线296

注释为:

/**
 * @ORM'OneToMany(targetEntity="This'Entity'Table", mappedBy="id")
 **/
private $sometable;

我认为正在发生的是,Doctrine试图将表格加载到内存中,而这正是扼杀这个过程的原因。

当我对表格进行评论时,一切都如预期。

我读到了关于延迟加载的文章,并试图将其添加到注释中:

 fetch="EXTRA_LAZY"

然而,它并没有解决问题。

我通过服务加载实体:

$object = $this->someRepository->find($id);
// And bind..
$this->form->bind($object);

处理这样的事情的正确方法是什么?

很抱歉,200k表并不庞大,事实上,无论在哪里,MySql都应该在第二次内返回这样的查询。因此,我认为问题在于你的映射和索引或缺乏。您还应该研究数据库缓存,但首先要对索引和查询进行排序。

用更多代码更新您的问题。

相关文章: