Я работал над сценариями миграции, которые выбирают данные из одной базы данных MySQL и импортируют через доктрину в другую базу данных MySQL. Проблема заключалась в том, что после каждого куска созданных объектов мои скрипты замедлялись.
первые 100 статей занимают около 5 секунд для импорта, следующие 100 статей занимают 7 секунд, следующие 10 секунд и так далее. Это действительно большая проблема, потому что мне нужно импортировать около 1.500.000 статей.
Я узнал, что php> = 5.3 имеет уборщик сборщиков мусора. Итак, когда я импортирую кусок статей, я вызываю gc_collect_cycles (); чтобы очистить память от всех объектов, для которых сценарий больше не понадобится. Сценарий замедляется!
Если вы используете фреймворк, проверьте, имеет ли он свою собственную систему кеша. Если вы используете доктрину, отключите SQL-журнал
/** @var $em EntityManager */ $em = $this->getContainer()->get('doctrine')->getEntityManager(); $em->getConnection()->getConfiguration()->setSQLLogger(null);
а затем очистить кэш доктрины после импорта каждого куска
$em->clear();