🧠 Отключайте логирование SQL при тяжёлых запросах🧠 Суть проблемыКогда вы выполняете много
SQL-запросов, особенно в пакетных операциях (импорт больших объёмов данных, миграции, мигрейт-скрипты), ORM может
логировать каждый запрос.
Такое логирование полезно при отладке, но в рабочих сценариях оно:
⚡ генерирует огромное количество записей в памяти,
⚡ может привести к
утечкам памяти (memory leak) при Doctrine, если логгер накапливает записи,
⚡ увеличивает время выполнения операции, так как обработка логов сама по себе не бесплатна.
Почему отключать логирование полезно🔹 При больших импортных задачах или миграциях сотни тысяч запросов могут накапливаться в логере — это вызывает
рост потребления памяти и может привести к «зависанию» процесса.
🔹 Если логирование не нужно в этом контексте, его отключение убирает ненужную нагрузку и
ускоряет выполнение операций.
🔹 Это особенно важно на
production-задачах, где производительность имеет приоритет над подробным аудитом запросов.
🛠️
Как отключить логирование в разных экосистемах🟦 Laravel (Eloquent / Query Logging)Laravel логирует запросы, если включён режим отладки или уровень логов очень подробный.
Чтобы
уменьшить SQL-логирование, в
.env:
APP_DEBUG=falseLOG_LEVEL=infoЭто снизит объём логов, не выводя SQL-запросы по умолчанию (они обычно логируются на уровне debug).
Если же вы используете кастомный логгер запросов — отключите его в продакшене.
🟩 Symfony / Doctrine ORMDoctrine по умолчанию может логировать SQL через SQLLogger (особенно в dev-режиме).
Для отключения логгера Doctrine:
$emConfig = $entityManager->getConnection()->getConfiguration();$emConfig->setSQLLogger(null);Это
полностью выключит SQL-логирование для этого соединения.
Такой подход особенно полезен при массовых операциях, например в консольных командах или миграциях.
💡 Значение
null удаляет логгер, и Doctrine перестаёт накапливать записи о каждом выполненном SQL.
⚠️ В более новой версии Doctrine SQLLogger был заменён системой middlewares, и для полного отключения придётся убирать middleware-логгеры — см. документацию.
📌
Пример использования в консоли (Symfony)Если у вас есть импорты/массовая обработка в консольной команде — отключите логгер в начале:
public function execute(InputInterface $input, OutputInterface $output): int
{
$config = $this->entityManager->getConnection()->getConfiguration();
$config->setSQLLogger(null);
// дальнейшая обработка
}
Такой трюк помогает избежать накопления большого количества логов в памяти и снижает риски OOM (Out Of Memory).
🧠 Когда это стоит делать
✅
Тяжёлые операции с данными: импорт/экспорт больших таблиц, миграции
✅
Длительные фоновые задачи в очередях/консоли
✅
Прод-окружение, где логи не нужны для каждого SQL-запроса
⚠️ Когда
не стоит отключать
❗ Если вы на этапе
отладки и хотите видеть каждый запрос для оптимизации
❗ Если нужно собирать подробную аналитику SQL-вызовов
❗ Если у вас разработка и подробные логи помогают тестировать логику
Библиотека пхпшника