Категории

Как диагностировать и устранить 100% загрузку CPU MariaDB из-за отсутствия индексов

01.02.2026 | Статья из категории: mysql

Как диагностировать и устранить 100% загрузку CPU MariaDB из-за отсутствия индексов

Просыпаюсь утром и слышу шуршит распбери пи. А это значит, что кто то его напрягает в мое отсутствие. Посмотрел нагрузку, mariadb часто сжирает одно ядро CPU.
Если MariaDB «съедает» одно ядро процессора даже в простое — первым делом проверьте, не выполняются ли частые запросы без индексов. Вот пошаговый пример из реальной практики.

1. Посмотрите активные запросы

SHOW FULL PROCESSLIST;

Если видите повторяющиеся SELECT с условием по полю (например, WHERE topic = '...'), но без индекса — это кандидат на full table scan.

2. Проверьте структуру таблицы

SHOW CREATE TABLE your_table;

Убедитесь, что поля, используемые в WHERE, JOIN или ORDER BY, покрыты индексами.

3. Создайте подходящий индекс

Для запроса:

SELECT value FROM sensor_data 
WHERE topic = '...' 
ORDER BY timestamp DESC 
LIMIT 1;

Оптимальный индекс — составной:

ALTER TABLE sensor_data ADD INDEX idx_topic_timestamp (topic, timestamp);

Такой индекс ускоряет и фильтрацию, и сортировку.

4. Убедитесь, что индекс используется

EXPLAIN SELECT value FROM sensor_data 
WHERE topic = '...' 
ORDER BY timestamp DESC 
LIMIT 1;

В колонке key должен быть указан ваш индекс, а rows — минимальное число (не сотни тысяч!).

Итог

Отсутствие индекса на часто запрашиваемом поле при большом объёме данных → full table scan → 100% загрузка CPU. Решение: добавьте индекс. Эффект — мгновенный и стабильный.

Проверено на MariaDB 10.11, таблица с 500K+ строк, IoT-сценарий (Zigbee2MQTT + Home Assistant).

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA