Просыпаюсь утром и слышу шуршит распбери пи. А это значит, что кто то его напрягает в мое отсутствие. Посмотрел нагрузку, mariadb часто сжирает одно ядро CPU.
Если MariaDB «съедает» одно ядро процессора даже в простое — первым делом проверьте, не выполняются ли частые запросы без индексов. Вот пошаговый пример из реальной практики.
SHOW FULL PROCESSLIST;
Если видите повторяющиеся SELECT с условием по полю (например, WHERE topic = '...'), но без индекса — это кандидат на full table scan.
SHOW CREATE TABLE your_table;
Убедитесь, что поля, используемые в WHERE, JOIN или ORDER BY, покрыты индексами.
Для запроса:
SELECT value FROM sensor_data
WHERE topic = '...'
ORDER BY timestamp DESC
LIMIT 1;
Оптимальный индекс — составной:
ALTER TABLE sensor_data ADD INDEX idx_topic_timestamp (topic, timestamp);
Такой индекс ускоряет и фильтрацию, и сортировку.
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).
Комментарии
Пока нет комментариев. Будьте первым!