我正在运行下面的脚本,从我的DB中选择用户列表并将其传递给我的服务。
$qb = $this->getEntityManager()->createQueryBuilder(); $qb -> select('s') -> from('AppBundle\Entity\SubscriberDetails', 's') -> where($qb->expr()->not($qb->expr()->exists($qb1->getDQL()))) -> setMaxResults($numcampaigns) ; $subscribers = $qb->getQuery()->getResult();
哪里
$qb1 = $this->getEntityManager()->createQueryBuilder();
$qb1
->select('send')
->from('AppBundle\Entity\Subscribers', 'send')
->where('DATE_FORMAT(now(), \'%e-%b-%Y\') - DATE_FORMAT(FROM_UNIXTIME(send.last_campaign), \'%e-%b-%Y\') <=360')
->andwhere('send.bounced <> 1')
->andwhere('send.complaint <> 1')
->andwhere('s.emailaddress = send.emailaddress');下面的脚本适用于30k用户,而我则试图将其扩展为300 k用户选择。当运行300 k用户时,我得到以下错误:
6.0662 132446208 15. Doctrine\ORM\Internal\Hydration\ObjectHydrator->hydrateRowData()/Applications/MAMP/htdocs/mediaff/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php:165 6.0663 132448496 16. Doctrine\ORM\Internal\Hydration\ObjectHydrator->getEntity()/Applications/MAMP/htdocs/mediaff/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php:494 6.0663 132448496 17.原则\ORM\UnitOfWork->createEntity() /Applications/MAMP/htdocs/mediaff/vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php:273 6.0663 132449488 18. ReflectionProperty->setValue() /Applications/MAMP/htdocs/mediaff/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php:2586 6.0781 132445688 19. Symfony\Component\Debug\ErrorHandler::handleFatalError()/Applications/MAMP/htdocs/mediaff/vendor/symfony/symfony/src/Symfony/Component/Debug/ErrorHandler.php:0 6.0782 132434104 20. spl_autoload_call() /Applications/MAMP/htdocs/mediaff/vendor/symfony/symfony/src/Symfony/Component/Debug/ErrorHandler.php:613 6.0782 132434264 21。Symfony\Component\Debug\DebugClassLoader->loadClass()/Applications/MAMP/htdocs/mediaff/vendor/symfony/symfony/src/Symfony/Component/Debug/ErrorHandler.php:613
我认为第二列是使用的内存。
知道我能怎么克服这个问题吗。任何帮助都将不胜感激。
发布于 2017-06-26 15:02:35
如果您的数据处理允许这样做,您可以使用分页器并在页面上进行迭代,每次迭代都调用em->clear(),这样就可以使内存消耗保持不变。
https://stackoverflow.com/questions/44721269
复制相似问题