Утечки памяти Symfony2 Doctrine2 / превышение лимита памяти

на самом деле у меня много проблем с комбинацией symfony2 и доктрины2. Мне приходится иметь дело с огромными наборами данных (около 2-3 миллионов операций записи и чтения) и прилагать много дополнительных усилий, чтобы избежать нехватки памяти.

Я выяснил 2 основных момента, это "утечка" памяти (на самом деле они не совсем утекают, а выделяют много)

  1. Хранилище сущностей Entitymanager (я не знаю настоящего названия этого) он хранит все обработанные объекты, и вы должны регулярно очищать это хранилище с помощью

    $entityManager->clear()
  2. The Doctrine QueryCache — он кэширует все используемые запросы, и единственная конфигурация, которую я нашел, заключалась в том, что вы можете решить, что тип кеша, который вы хотите использовать. Я не нашел ни глобального отключения, ни полезного флага для каждого запроса, чтобы отключить его. Поэтому обычно отключайте его для каждого объекта запроса с помощью функции

    $qb = $repository->createQueryBuilder($a);
    $запрос = $qb->getQuery();
    $query->useQueryCache(false);
    $запрос->выполнить();
    

итак.. это все, что я понял прямо сейчас.. мои вопросы таковы:

Есть ли простой способ запретить доступ к некоторым объектам из Entitymanagerstorage? Есть ли способ установить использование кеша запросов в EntityManager? Могу ли я настроить это поведение кэширования где-нибудь в конфигурации доктрины Symonfony?

Было бы здорово, если бы кто-нибудь дал мне несколько полезных советов..в противном случае это может помочь некоторым новичкам..

cya

45
задан MonocroM 14 March 2012 в 10:25
поделиться