2014-03-19 2 views
3

Я работал над сценариями миграции, которые выбирают данные из одной базы данных MySQL и импортируют через доктрину в другую базу данных MySQL. Проблема заключалась в том, что после каждого куска созданных объектов мои скрипты замедлялись.Почему скрипт php замедляется?

первые 100 статей занимают около 5 секунд для импорта, следующие 100 статей занимают 7 секунд, следующие 10 секунд и так далее. Это действительно большая проблема, потому что мне нужно импортировать около 1.500.000 статей.

ответ

3

Я выяснил, что php> = 5.3 имеет уборщик сборщика мусора. Поэтому, когда я импортирую кусок статей, я вызываю gc_collect_cycles();, чтобы очистить память от всех объектов, для которых сценарий больше не понадобится. Сценарий замедляется!

Если вы используете фреймворк, проверьте, имеет ли он свою собственную систему кеша. Если вы используете доктрину отключить SQL регистратор

/** @var $em EntityManager */ 
$em = $this->getContainer()->get('doctrine')->getEntityManager(); 
$em->getConnection()->getConfiguration()->setSQLLogger(null); 

, а затем очистить кэш доктрины после того, как каждый кусок импортируются

$em->clear(); 
+0

Я имел проблемы вызова ясно, потому что thows в Exeption ... сортировать его используя $ em-> persist ($ e), $ em-> flush ($ e) и $ em-> clear ($ e), вызывающие в строке. – Cactux

+0

да, это то, что я имел в виду под «после каждого куска импортируется» вы также можете $ em-> detach ($ e); после флеша –

Смежные вопросы