2016-07-27 4 views
0

Я работаю над большим приложением с БД, которое иногда требует огромного импорта данных. Данные импортируются из таблиц Excel и в начале процессов (около 500 строк) данные обрабатываются относительно кратковременно, но последние значительно замедляются. Импорт генерирует 6 связанных сторон в строке excel, которые очищаются после обработки каждой строки. Я предполагаю, что все эти сущности получают кеширование по доктрине и просто накапливаются. Моя идея состоит в том, чтобы очистить все эти кеш каждые 200 строк, но я не мог найти, как очистить его от кода (на данном этапе консоль не является опцией). Любая помощь или ссылки будут высоко оценены.Кэширование доктрины

ответ

0

Я полагаю, что причина может быть не в Доктрине, а в базе данных transaction log buffer size. В документации указано

Большой буфер журнала позволяет запускать большие транзакции без необходимости записи журнала на диск до совершения транзакций. Таким образом, если у вас большие транзакции, делая буфер журнала большим, он сохраняет дисковый ввод-вывод.

Скорее всего, вы вставляете свои данные в одну крупную транзакцию. Когда буфер заполнен, он записывается на диск, который обычно медленнее.

Существует несколько возможных решений.

  • Увеличьте размер буфера, чтобы транзакция помещалась в буфер.
  • Разделите транзакцию на несколько частей, которые вписываются в буфер.

Во втором случае имейте в виду, что каждая транзакция также требует времени, поэтому упаковка каждой вставки в отдельной транзакции также снизит производительность.

Я рекомендую обернуть около 500 строк в транзакции, потому что это похоже на размер, который подходит в буфере.

+0

Вы проверили, помогает ли это? –

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