Yandex Metrika
sanches.free

Журнал всех 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 дней гарантии