Назад | Перейти на главную страницу

Есть ли способ автоматически перезапустить MySQL, если он потребляет слишком много вычислительной мощности?

Из-за некоторых плохих сценариев с моей стороны MySQL иногда выходит из строя - потребляя много мощности процессора (средняя загрузка более 20 - у меня только 8 ядер)! Когда я перезапускаю, все снова в порядке.

Итак, мой вопрос: есть ли способ перезапустить MySQL, когда он занимает более 400% ЦП?

Желательно перезапустить только связанные учетные записи, которые вызывают проблему.

Сервер: Linux с WHM

В этом случае перезапуск mysql - плохая практика. Это приводит к перегрузке ваших буферов, и если ваша база данных достаточно велика, потребуется некоторое время, чтобы прогреться.

Я полагаю, у вас есть тяжелые запросы, которые потребляют слишком много процессора.

Использовать mysql> show full processlist выявлять долго выполняющиеся запросы и пытаться их оптимизировать: создавать индексы, переписывать запросы, чтобы они выполнялись быстрее и меньше сортировались.

Для немедленных результатов вы можете убить эти запросы, используя:

mysql> kill QUERYIDNUMBER

Чтобы напрямую ответить на ваши вопросы - вы можете безопасно перезапустить его с помощью service mysql restart, но это займет много времени. Перезапуск заблокирует все новые подключения к базе данных, но будет ждать, пока не закончатся все запущенные запросы. Вы можете убить тяжелые запросы, чтобы ускориться.

Также, если вам нужно ускорить перезапуск mysql, есть хороший способ сделать это.

Первый забег mysql> set global innodb_max_dirty_pages_pct = 0; затем подождите, пока все (или почти все) грязные страницы буфера не будут сброшены на диск, см. mysqladmin ext -i10 | grep dirty

Когда у вас есть такой вывод:

| Innodb_buffer_pool_pages_dirty | 12 |

Вы можете перезапустить свой сервер mysql, и это будет намного быстрее:

service mysql restart

Я могу только повторить, что пытаться решить эту проблему путем перезапуска mysql - действительно плохая идея. Вы должны попытаться идентифицировать и оптимизировать запросы, которые вызывают перегрузку вашего сервера.

Два совета, которые могут вам помочь:

  1. mysqltuner.pl проанализирует вашу текущую конфигурацию и покажет, где некоторые из очевидных убийц производительности.
  2. В журнал медленных запросов будет регистрировать все запросы, длящиеся дольше заданного времени. Затем вы можете проанализировать отдельные запросы, используя EXPLAIN Команда SQL.

monit сделает это за вас: http://en.wikipedia.org/wiki/Monit