Аналіз slow query log для 1С-Бітрікс
Slow query log — журнал MySQL/MariaDB, у який сервер записує запити, які виконувалися довше заданого порога. Це перший інструмент діагностики, коли сайт Бітрикс працює повільно, а конкретні винуватці невідомі.
Включення та налаштування
У my.cnf (або my.ini на Windows):
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 0.5
log_queries_not_using_indexes = 1
min_examined_row_limit = 100
long_query_time = 0.5 — запити довше 500 мс. Для активної діагностики ставте 0.1 або навіть 0. log_queries_not_using_indexes = 1 — ловить запити без індексів незалежно від часу. min_examined_row_limit = 100 — не логувати швидкі запити по маленьким таблицям.
Без перезавантаження MySQL можна включити динамічно:
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 0.5;
SET GLOBAL log_queries_not_using_indexes = 1;
Аналіз через mysqldumpslow та pt-query-digest
Сирий лог читати неручно. Використовуйте утиліти агрегації:
mysqldumpslow — вбудований у MySQL:
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
-s t — сортування за суммарним часом, -t 10 — топ 10 запитів. Показує шаблон запиту та суммарний/середній час.
pt-query-digest (Percona Toolkit) — значно інформативніше: показує процентиль часу виконання, кількість унікальних запитів, навантаження на сервер.
Що шукаємо у логу Бітрикса
Типові паттерни повільних запитів у Бітриксі:
-
SELECT ... FROM b_iblock_element WHERE IBLOCK_ID=Nбез індекса або зORDER BY SORTбез складного індекса -
SELECT ... FROM b_iblock_element_property WHERE VALUE LIKE '%текст%'—LIKEз ведучим%не використовує індекс -
SELECT COUNT(*) FROM b_sale_order WHERE ...при кількох мільйонах замовлень - Запити до
b_search_contentбезFULLTEXT-індекса при повнотекстовому пошуку - Пересоздання фасетного індекса (
b_iblock_find_*) при кожній зміні елемента
Після знаходження конкретного запиту наступний крок — EXPLAIN, який покаже, який план виконання вибрав оптимізатор та де додати індекс.







