Выполняем оптимизацию и анализ таблиц базы прямо из монитора производительности
Дата публикации: 24.06.2026

Выполняем оптимизацию и анализ таблиц базы прямо из монитора производительности

Хочу себе такие же кнопки
ccb9a536

Что вы сразу получите

  • Понимание, какие метрики в мониторе производительности указывают на проблемы с таблицами MySQL/MariaDB.
  • Пошаговый план оптимизации индексов и перестройки таблиц без остановки сайта.
  • Практический набор команд, которые можно выполнить из консоли или из встроенного SQL‑монитора в Битриксе.

1. Почему таблицы «запыхивают»?

Признак Что происходит Как это выглядит в мониторе
Высокий Rows_examined Система сканирует почти все строки, а не только нужные. Rows_examined_per_second → > 10 000
Низкий Rows_sent Запрос возвращает мало данных, но тратит много времени. Rows_sent_per_second → < 100
Большой Handler_read_rnd_next Случайный доступ к строкам без индекса. Handler_read_rnd_next_per_second → > 5 000
Slow_queries растёт Запросы превышают long_query_time. Slow_queries → > 50 за минуту

Эти цифры – сигналы, что таблица нуждается в реинженерии: добавить/перестроить индексы, разбить на партиции, очистить «мусорные» данные.


2. Как быстро увидеть проблемные таблицы

2.1. Встроенный «SQL‑монитор» в админке Битрикса

  1. Откройте Контроль → Мониторинг → MySQL.
  2. Сортируйте по колонке Rows_examined – вверху будут «тяжёлые» запросы.
  3. Нажмите на кнопку «Показать план выполнения», чтобы увидеть EXPLAIN.

2.2. Команда SHOW GLOBAL STATUS

SHOW GLOBAL STATUS LIKE 'Handler%';
SHOW GLOBAL STATUS LIKE 'Rows%';
SHOW GLOBAL STATUS LIKE 'Slow_queries';

Эти строки дают глобальную картину. Чтобы сузить область, используйте information_schema:

SELECT 
    TABLE_SCHEMA,
    TABLE_NAME,
    ENGINE,
    TABLE_ROWS,
    DATA_LENGTH/1024/1024 AS data_mb,
    INDEX_LENGTH/1024/1024 AS index_mb,
    (DATA_LENGTH+INDEX_LENGTH)/1024/1024 AS total_mb
FROM information_schema.TABLES
WHERE ENGINE='InnoDB'
ORDER BY total_mb DESC
LIMIT 10;

Топ‑10 самых «тяжёлых» таблиц сразу попадают в ваш список приоритетов.


3. Диагностика индексов

3.1. План выполнения (EXPLAIN)

Поле Что показывает Как интерпретировать
type Тип доступа к таблице ALL → полный скан, плохой; ref, eq_ref → индекс работает
key Какой индекс использован NULL → не используется
rows Оценка количества строк, которые будут прочитаны Большие числа → нужен лучший индекс
Extra Дополнительные детали Using filesort / Using temporary → можно улучшить

3.2. Проверка «мёртвых» индексов

SELECT 
    TABLE_SCHEMA,
    TABLE_NAME,
    INDEX_NAME,
    CARDINALITY,
    SUB_PART,
    INDEX_TYPE
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'your_db'
AND INDEX_NAME NOT IN (
    SELECT DISTINCT INDEX_NAME
    FROM information_schema.KEY_COLUMN_USAGE
    WHERE TABLE_SCHEMA = 'your_db'
);

Индексы, которые не попадают в KEY_COLUMN_USAGE, не участвуют в запросах и только занимают место.


4. Практические шаги оптимизации

4.1. Добавление недостающих индексов

  1. Определите столбцы из WHERE, JOIN, ORDER BY.

  2. Сформируйте индекс:

    ALTER TABLE `b_catalog_product`
    ADD INDEX `idx_price_category` (`price`, `category_id`);
  3. Проверьте, как изменился план: EXPLAIN SELECT ….

4.2. Перестройка существующих индексов

Если индекс фрагментирован (показатель STATISTICSINDEX_LENGTH сильно превышает DATA_LENGTH), выполните:

ALTER TABLE `b_catalog_product` ENGINE=InnoDB;

Эта команда перестраивает таблицу, создавая новые индексы и освобождая место. Делайте её в «тихие» часы, а в режиме ALGORITHM=INPLACE, LOCK=NONE (MySQL 5.6+), чтобы не блокировать запросы.

4.3. Разбиение (партиционирование)

Для таблиц с миллионами строк (например, b_sale_order) рекомендуется партиционирование по дате:

ALTER TABLE `b_sale_order`
PARTITION BY RANGE (YEAR(`date_insert`)) (
    PARTITION p2020 VALUES LESS THAN (2021),
    PARTITION p2021 VALUES LESS THAN (2022),
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p_future VALUES LESS THAN MAXVALUE
);

Это ускорит запросы, ограниченные диапазоном дат, и упростит очистку старых данных.

4.4. Очистка «мусорных» записей

DELETE FROM `b_log` 
WHERE `timestamp` < DATE_SUB(NOW(), INTERVAL 90 DAY);
OPTIMIZE TABLE `b_log`;

OPTIMIZE TABLE уплотняет файлы .ibd и уменьшает Data_length.


5. Мониторинг после изменений

Метрика Ожидаемый результат
Rows_examined_per_second Снижение в 2–5 раз
Handler_read_rnd_next_per_second Падение до < 500
Slow_queries Уменьшение на 70 % и более
Disk I/O (в монитороре сервера) Снижение записи/чтения на 30 %

Создайте алерт в системе мониторинга (например, Zabbix) на Slow_queries > 20 и Rows_examined_per_second > 5000. Это позволит быстро реагировать, если что‑то пошло не так.


6. Как автоматизировать проверку

#!/bin/bash
DB="bitrix"
HOST="localhost"
USER="monitor"
PASS="********"

mysql -h $HOST -u $USER -p$PASS -e "
SELECT 
    TABLE_SCHEMA,
    TABLE_NAME,
    ROUND((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2) AS total_mb,
    ROUND(DATA_LENGTH/1024/1024,2) AS data_mb,
    ROUND(INDEX_LENGTH/1024/1024,2) AS index_mb
FROM information_schema.TABLES
WHERE ENGINE='InnoDB' AND TABLE_SCHEMA='$DB'
ORDER BY total_mb DESC
LIMIT 5;
" | mail -s "Top 5 biggest tables on $(date)" admin@example.com

Скрипт отправит вам список самых «тяжёлых» таблиц каждый день. Подключите его к cron (0 2 * * * /path/to/script.sh).


7. Частые ошибки и как их избежать

Ошибка Почему происходит Как исправить
Создание индекса без анализа Индекс может быть слишком широким, занимать много места и не ускорять запрос. Сначала выполните EXPLAIN, посмотрите rows.
Перестройка таблицы в часы пик Блокировка может привести к падению сайта. Используйте ALGORITHM=INPLACE, LOCK=NONE и планируйте на low‑traffic.
Партиционирование без учёта запросов Если запросы не используют колонку партиционирования, выгода нулевая. Выбирайте колонку, часто встречающуюся в WHERE/ORDER BY.
Игнорирование innodb_buffer_pool_size Неподходящий размер кэша приводит к постоянным чтениям с диска. Установите innodb_buffer_pool_size ≈ 70 % ОЗУ сервера.

Практика для закрепления

  1. Определите «тяжёлую» таблицу на вашем сайте, используя запрос к information_schema.TABLES. Какие столбцы занимают больше 80 % места?

  2. Сформируйте план выполнения для запроса, который часто появляется в slow_query_log. Какие индексы задействованы? Что говорит поле type?

  3. Создайте недостающий индекс для выбранного запроса, затем сравните Rows_examined до и после изменения.

  4. Разбейте таблицу b_sale_order на партиции по году, если в ней более 5 млн записей. Как изменится время выполнения запроса SELECT * FROM b_sale_order WHERE date_insert BETWEEN '2022-01-01' AND '2022-12-31'?

  5. Автоматизируйте отчёт о самых больших таблицах и настройте email‑оповещение. Приведите пример скрипта (можно на Bash или Python) и объясните, как часто его следует запускать.


Полезные ссылки


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


Английский видеочат для путешествий
CamZamZam - онлайн фото с вебкамеры с эффектами
Чат рулетка 2026: Интерактивные элементы
Чат-рулетка: случайный собеседник в одно нажатие
Чат рулетка в 2026: будущие функции
Интерьер с использованием текстиля
Как настроить бэкапы для вашего сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как обновить PHP на хостинге Host.bg
Как решить проблемы с загрузкой сайта на Host.bg
Какие бывают ЛОР болезни у детей
Калькулятор зарплаты SEO-оптимизатора
Кассовые терминалы с оплатой картами
Монетизация через платные услуги
Мск: ИП или ООО — лучший старт для бизнеса?
Общение в интернете без риска
Общение вживую через экран
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Ошибки при настройке хостинга и их решения
Проблемы с доменами и их решения на хостинге Host.bg
Сколько стоит биткоин
Сравнение ценовых диапазонов хостинга Host.bg
Сумки с бусинами
Техника для строительства загородных трасс
Трубная продукция для трубопроводных конструкций
Узбекские фильмы фэнтези
Видео рулетка 18+
Видеочат с случайным собеседником онлайн
Видеообщения по всему миру
рейтинг хостингов 2026 Быстрые VDS серверы