Использование MySQL с большим использованием процессора

Недавно мой серверный процессор был очень высоким.

Средние значения загрузки процессора 13,91 (1 мин) 11,72 (5 минут) 8,01 (15 минут), и мой сайт только немного увеличил трафик.

После запуска верхней команды я увидел, что MySQL использует 160% CPU!

Недавно я оптимизировал таблицы, и я переключился на постоянные соединения. Может ли это заставлять MySQL использовать большие объемы процессора?

Ответ 1

Сначала я бы сказал, что вы, вероятно, хотите отключить постоянные соединения, поскольку они почти всегда приносят больше вреда, чем пользы.

Во-вторых, я бы сказал, что вы хотите дважды проверить своих пользователей MySQL, просто чтобы убедиться, что никто не может подключаться с удаленного сервера. Это также важная вещь для проверки.

В-третьих, я бы сказал, что вы хотите включить MySQL Slow Query Log, чтобы следить за любыми запросами, которые занимают много времени, и используйте это, чтобы убедиться, что у вас нет запросов, блокирующих ключевые таблицы слишком долго.

Некоторые другие вещи, которые вы можете проверить, - это запустить следующий запрос, когда загрузка процессора высока:

SHOW PROCESSLIST;

Это покажет вам какие-либо запросы, которые в настоящее время запущены или запущены в очереди, что такое запрос и что он делает (эта команда будет обрезать запрос, если он слишком длинный, вы можете использовать ПОКАЗАТЬ ПОЛНЫЙ ПРОЦЕССЛИСТ, чтобы увидеть полный текст запроса).

Вы также захотите следить за такими вещами, как ваши размеры буфера, кеш таблиц, кеш запросов и innodb_buffer_pool_size (если вы используете таблицы innodb), поскольку все эти распределения памяти может повлиять на производительность запросов, что может заставить MySQL есть процессор.

Вы также, вероятно, захотите прочитать следующее, поскольку они содержат некоторую хорошую информацию.

Также очень полезно использовать профилировщик. Что-то, что вы можете включить, когда захотите, покажет вам, какие запросы выполняются вашим приложением, если дублируются запросы, сколько времени они берут и т.д. И т.д. Пример такого типа - это тот, который я работал над вызываемым PHP Profiler, но их много. Если вы используете часть программного обеспечения, такого как Drupal, Joomla или Wordpress, вы захотите спросить вокруг сообщества, поскольку там, возможно, доступны модули для них, которые позволяют вам получать эту информацию без необходимости вручную интегрировать что-либо.

Ответ 2

Поскольку это верхний пост, если вы используете Google для загрузки или загрузки большого количества MySQL, добавлю дополнительный ответ:

1 июля 2012 года к текущему UTC-времени была добавлена ​​секунда прыжка, чтобы компенсировать замедление вращения Земли из-за приливов. При запуске ntp (или ntpd) эта секунда была добавлена ​​к часам вашего компьютера/сервера. MySQLd, похоже, не нравится эта дополнительная секунда на некоторых ОС и дает высокую загрузку процессора. Быстрое исправление (с правами root):

$ /etc/init.d/ntpd stop
$ date -s "`date`"
$ /etc/init.d/ntpd start

Ответ 3

Если этот сервер виден во внешнем мире, стоит проверить, есть ли у него много запросов для подключения из внешнего мира (т.е. люди пытаются вломиться в него)