MySQL высокая загрузка процессора

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

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

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

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

3 ответа

Решение

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

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

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

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

SHOW PROCESSLIST;

Это покажет вам все запросы, которые в данный момент выполняются или находятся в очереди для выполнения, что это за запрос и что он делает (эта команда будет обрезать запрос, если он слишком длинный, вы можете использовать SHOW FULL PROCESSLIST, чтобы увидеть полный текст запроса),

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

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

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

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

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

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

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

Другие вопросы по тегам