Журнал всех SQL-запросов (general_log) для отладки MySQL
Зачем логировать каждый запрос
Когда профайлер PHP и my.cnf на уровне приложения уже не отвечают на вопрос «кто спамит базу», на короткое время можно включить general query log — текстовый журнал всех команд, прилетевших в сервер, включая ошибочные соединения (в зависимости от настроек и версии). Для сайта на 1С‑Битрикс это полезно при поиске лишних SELECT из кастомных модулей, агрессивных агентов или тяжёлого постфильтра в компоненте.
Важно: на нагруженном продакшене полный лог быстро раздувает диск и даёт CPU на запись. Включайте точечно, на копии стенда или в узком окне, сразу продумывая ротацию и выключение.
Включение без перезапуска (динамически)
На работающем инстансе достаточно сессии с правами на изменение глобальных переменных:
SET GLOBAL general_log_file = '/var/log/mysql/all-queries.log';
SET GLOBAL general_log = ON;Путь выберите в разделе, куда пишет пользователь mysql, с достаточным местом. Проверить текущие значения можно так:
SHOW GLOBAL VARIABLES LIKE '%general_log%';Чтобы снять трассу, верните состояние обратно:
SET GLOBAL general_log = OFF;Статический режим через конфиг
Если нет возможности менять код приложения, но есть доступ к конфигурации сервера, задайте лог в секции [mysqld] и перезапустите демон (для MySQL 5.6 и новее обычно пара переменных):
[mysqld]
general_log = on
general_log_file = /var/lib/mysql/all-queries.logВ очень старых выпусках до 5.6 вместо пары general_log* встречался устаревший ключ log=... — сверьтесь с документацией вашей ветки, прежде чем копировать параметр дословно из вики.
После правок перезапустите службу (systemctl restart mysqld или эквивалент).
Как читать лог
Формат похож на классический медленный лог: метка времени, идентификатор соединения, тип команды и текст. Короткий абрис:
Time Id Command Argument
151217 12:10:20 2 Connect user@host …
2 Query show databasesСопоставляйте «вал» одинаковых запросов с конкретными страницами, включив параллельно нормальный slow query log или диагностики на уровне Битрикса — иначе легко утонуть в шуме.
Связка с задачами Битрикс
Используйте общий лог как временный детектор лишних вызовов вокруг кеша и ORM: если одна загрузка каталога порождает сотни однотипных SELECT, возвращайтесь к оптимизации запроса или кешированию результата. Не оставляйте general_log=ON на длительные часы на бою без мониторинга свободного места.
Итог
General log — мощный, но тяжёлый инструмент. Для окружения с 1С‑Битрикс держите его как короткую «рентгеновскую» сессию: включили, поймали гипотезу, выключили и перешли к точечной оптимизации.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии