Гид по технологиям

mysqld.exe: высокая загрузка CPU — как исправить

6 min read Базы данных Обновлено 05 Dec 2025
mysqld.exe: высокая загрузка CPU — как исправить
mysqld.exe: высокая загрузка CPU — как исправить

Что такое mysqld в Диспетчере задач?

mysqld.exe — это исполняемый файл серверной части MySQL. Процесс отвечает за приём клиентских подключений, выполнение SQL-запросов и управление данными. На Windows он обычно находится в папке установки MySQL и запускается как служба при старте сервера.

Важно: высокий потребление CPU самим по себе не всегда означает ошибку — это может быть нормальная реакция на нагрузку. Проблема, если нагрузка внезапная или непропорциональна ожидаемой нагрузке вашей системы.

Почему mysqld.exe может сильно загружать CPU?

Основные причины:

  • Плохо оптимизированные запросы — длительные запросы с большими JOIN или без индексов.
  • Много одновременных подключений — высокое конкурентное число соединений увеличивает переключения контекста.
  • Недостаточно аппаратных ресурсов — мало ядер CPU, недостаточно ОЗУ для InnoDB buffer pool или медленные диски.
  • Неправильная настройка MySQL — слишком маленький или наоборот чрезмерно большой буфер, неуместные буферы на поток.
  • Плохие или отсутствующие индексы — сервер производит full table scans.
  • Временные таблицы на диске (tmp_disk) — создают I/O и процессорную нагрузку.
  • Программные ошибки, несовместимость плагинов или проблемы отдельной версии MySQL.

Короткая модель поведения: нагрузка = количество запросов × стоимость запроса / мощность CPU. Цель — снизить «стоимость запроса» и/или распределить нагрузку.

Методология диагностики (короткая)

  1. Наблюдайте и собирайте метрики (CPU, память, диск, сеть).
  2. Выделите тяжёлые запросы (Performance Schema, slow query log).
  3. Проанализируйте планы выполнения (EXPLAIN/ANALYZE).
  4. Оптимизируйте запросы/индексы.
  5. Подстройте конфигурацию MySQL.
  6. При необходимости увеличьте ресурсы или обновите сервер.

1. Используйте встроенные инструменты мониторинга MySQL

Важно: перед любыми правками соберите данные для воспроизводимого базиса.

Примеры инструментов и команд:

  • Performance Schema: табличные представления событий и агрегатов.
  • SHOW PROCESSLIST; — быстрый просмотр текущих соединений.
  • slow query log — сохранение медленных запросов.
  • pt-query-digest (Percona) — агрегация и анализ логов.
  • Внешние инструменты: MySQL Workbench, PMM, Zabbix, Grafana.

Пример запуска анализа через Performance Schema (выполните в клиенте MySQL):

SELECT DIGEST_TEXT AS query,
       COUNT_STAR AS exec_count,
       SUM_TIMER_WAIT AS total_time
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 25;

Этот запрос помогает увидеть «дорогие» запросы по суммарному времени.

Если Performance Schema не включён или данных мало — включите slow_query_log:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
SET GLOBAL long_query_time = 1; -- секунды
SET GLOBAL log_queries_not_using_indexes = 1;

Примечание: на Windows путь к логам отличается — указывайте корректный путь.

Полезные шаги:

  • Запустите SHOW PROCESSLIST a) найдите «Locked» или «Sending data» процессы
  • Используйте EXPLAIN SELECT … для проблемных запросов
  • Соберите метрики CPU/IO с момента возникновения проблемы

launch mysql client

performance schema

2. Анализ и оптимизация запросов

Шаги оптимизации запросов:

  • Найдите топовые запросы по суммарному времени и частоте.
  • Проверьте планы выполнения (EXPLAIN) и ищите full table scans.
  • Добавьте или скорректируйте индексы (индексация колонок, используемых в WHERE, JOIN, ORDER BY).
  • Разбейте тяжёлые запросы на несколько шагов или используйте материализованные промежуточные таблицы.
  • Ограничьте выборку — SELECT только нужные колонки, используйте LIMIT.
  • Пересмотрите ORM-генерацию запросов: N+1 проблемы и неэффективные JOIN.

Пример: если EXPLAIN показывает type = ALL — это full table scan. Попробуйте создать индекс:

ALTER TABLE orders ADD INDEX idx_orders_customer_created (customer_id, created_at);

После добавления индекса снова выполните EXPLAIN и измерьте влияние.

Контрпример/когда это не поможет: если нагрузку создаёт массовая транзакционная запись (INSERT/UPDATE) и узкое место — диск, а не CPU, то оптимизация SELECT не снизит общую нагрузку.

3. Настройка конфигурации MySQL

Файл конфигурации на Windows чаще всего: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

g to sql configuration file

Примерный рабочий подход:

  • innodb_buffer_pool_size — основной параметр для InnoDB. Для выделенного сервера ставьте 60–80% ОЗУ. Для смешанных систем уменьшите.
  • max_connections — установите контролируемый предел (например 100–500 в зависимости от нагрузки). Большое значение увеличивает потребление памяти на поток.
  • thread_cache_size — кэш потоков для ускорения повторных подключений.
  • tmp_table_size и max_heap_table_size — увеличьте, чтобы уменьшить создание временных таблиц на диске.
  • innodb_io_capacity и innodb_io_capacity_max — настройка под ваш диск (HDD/SSD).
  • querycache* — в новых версиях MySQL устарело/не рекомендуется.

Пошаговое редактирование my.ini (Windows):

  1. Откройте Проводник и перейдите в C:\ProgramData\MySQL\MySQL Server 8.0

my.ini

  1. Откройте my.ini через «Открыть с помощью» и выберите Notepad или другой редактор.

Notepad

  1. Измените innodb_buffer_pool_size на подходящее значение, например 1G для 1 гигабайта ОЗУ:

Set innob pool size

  1. Уменьшите max_connections до разумного значения (например 100) и сохраните файл.

max connections

  1. Сохраните изменения и перезапустите службу MySQL.

Save the file

Важно: изменения некоторых параметров применяются только после рестарта сервера.

Параметры — ориентиры, не догма: прежде чем менять, сделайте резервную копию my.ini и по возможности протестируйте изменения в staging.

4. Обновление MySQL

Обновление может исправить баги и улучшения производительности, но требует осторожности.

Рекомендации перед обновлением:

  • Создайте резервную копию баз данных (mysqldump, LVM-снапшот или другие инструменты).
  • Проверьте совместимость версий и changelog.
  • Тестируйте обновление в тестовой среде перед продакшеном.

Пример резервной копии с mysqldump:

mysqldump -u root -p --all-databases --single-transaction > alldb_backup.sql

Процесс обновления через MySQL Installer (Windows):

  1. Откройте «MySQL Installer» и обновите каталог.

MySQL Installer

  1. Нажмите Upgrade и следуйте подсказкам.

Upgrade

После обновления проверьте настройки и выполните тесты на корректность и производительность.

5. Аппаратные апгрейды и кластеризация

Когда программная оптимизация исчерпана, рассмотрите:

  • Увеличение числа CPU ядер и тактовой частоты.
  • Увеличение объёма ОЗУ, чтобы увеличить innodb_buffer_pool_size.
  • Переход на быстрые NVMe/SSD для уменьшения I/O задержек.
  • Горизонтальное масштабирование: репликация, шардинг, разделение ролей (мастер/ридеры).

Контекстное замечание: если проблема в массовых записи, ускорение дисковой подсистемы даёт большую отдачу, чем оптимизация SELECT.

Быстрый чек-лист по ролям

DBA:

  • Включил Performance Schema и slow_query_log.
  • Проанализировал топовые запросы и EXPLAIN.
  • Проверил индексы и состояние InnoDB.
  • Сохранил и проверил конфигурацию my.ini.

Системный администратор:

  • Проверил CPU, RAM, диск и сетевые метрики на хосте.
  • Сравнил нагрузку с историческим базисом.
  • Обновил или масштабировал ресурсы при необходимости.

Разработчик:

  • Проверил код, генерирующий запросы (ORM/цикл INSERT).
  • Переписал тяжёлые запросы, добавил пагинацию.
  • Написал тесты производительности для критичных операций.

Модель эвристики для быстрого решения

  • Если проблема CPU и много «копий» одного запроса — оптимизируйте запрос или кешируйте результаты.
  • Если медленные диски и много временных таблиц — увеличьте tmp_table_size и используйте SSD.
  • Если всплески соединений — ограничьте max_connections и используйте connection pool.

Диагностическое дерево принятия решения

flowchart TD
  A[Высокая загрузка mysqld.exe] --> B{Загрузка связана с CPU или IO?}
  B -->|CPU| C[Найдите тяжёлые запросы]
  B -->|IO| D[Проверить дисковую подсистему и временные таблицы]
  C --> E{Запросы с full table scan?}
  E -->|Да| F[Добавить/оптимизировать индексы]
  E -->|Нет| G[Посмотреть частоту и параллелизм запросов]
  G -->|Много повторов| H[Кеширование / агрегирование / connection pool]
  D --> I[Увеличить tmp_table_size / перейти на SSD]
  F --> J[Повторно проверить EXPLAIN и метрики]
  H --> J
  I --> J
  J --> K[Если не помогло — масштабирование/апгрейд]

Критерии приёмки

  • CPU-среднее значение mysqld.exe стабильно ниже ожидаемого уровня (например, снижен на X% от базового всплеска).
  • Время ответа критичных запросов уменьшилось и соответствует SLA.
  • Нет новых ошибок в логах, и slow_query_log показывает улучшение.

Примечание: конкретные числовые пороги устанавливайте под своё окружение и SLA.

Полезные инструменты и сниппеты (чек-лист)

  • SHOW PROCESSLIST;
  • EXPLAIN SELECT …;
  • Перечень медленных запросов: pt-query-digest/Percona Toolkit;
  • Резервное копирование: mysqldump, Percona XtraBackup.

Контроль рисков и откат

  • Всегда делайте резервные копии перед изменением конфигурации или обновлением.
  • Тестируйте изменения в staging.
  • При ухудшении ситуации — откатить my.ini к сохранённой версии и рестартнуть службу.

Короткое резюме

Высокая загрузка mysqld.exe обычно решается по методике: собрать данные, найти «дорогие» запросы, оптимизировать SQL и индексы, настроить параметры InnoDB и, при необходимости, увеличить ресурсы либо обновить MySQL. Применяйте изменения по шагам, измеряя эффект и сохраняя резервные копии.

Важно: если вы не уверены в изменениях, привлеките DBA или тестируйте в копии окружения. Поделитесь в комментариях, какое решение помогло вам — это поможет другим.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Исправление ошибки 0xc00000e в Windows 10
Windows 10

Исправление ошибки 0xc00000e в Windows 10

Wangiri: телефонное мошенничество и как от него защититься
Безопасность

Wangiri: телефонное мошенничество и как от него защититься

Изменить число листов по умолчанию в Excel
Excel

Изменить число листов по умолчанию в Excel

Отвязать Xbox Live от Epic Games Store
Игры

Отвязать Xbox Live от Epic Games Store

Как исправить ERROR_INVALID_UNWIND_TARGET
Разработка

Как исправить ERROR_INVALID_UNWIND_TARGET

Перезагрузка и выключение ПК через правила Outlook
IT

Перезагрузка и выключение ПК через правила Outlook