Высокая нагрузка при низкой загрузке процессора и низкой загрузке ввода-вывода в Solaris с ZFS и MySQL

У меня есть система Solaris 10 x86_64 под управлением MySQL 5.5. В условиях интенсивного использования мы получаем очень медленные ответы из базы данных: медленные запросы выполняются за минуты, которые обычно возвращаются за доли секунды. Загрузка ЦП находится в диапазоне 60-70%. Средняя нагрузка регулярно попадает в 20-е, нечасто в 40-е, и я видел это до 50-х годов. (Два четырехъядерных процессора с включенной функцией HyperThreading.) Он действует как проблема ввода-вывода, как будто он ожидает записи на диски, но я не вижу признаков того, что существует какая-либо реальная проблема ввода-вывода. Среднее время ожидания диска равно 0, среднее время ожидания в диапазоне 0,2-0,3, а процент занятости диска иногда ползет в область 15%. (Все это как согласно сар.)

Хранилище представляет собой zfs zpool из 5 зеркал zdev двух дисков SAS. У меня нет устройства регистрации намерений, но я не вижу в этом проблемы рабочей нагрузки.

Что мне не хватает?

2 ответа

Хотел дать вам более похожий на Solaris ответ:

В многопроцессорном / многоядерном корпусе вы не можете использовать нагрузку на процессор слишком долго. Изначально использовать mpstat скорее, чем prstat / top если вы хотите посмотреть, будет ли одно из ваших ядер время от времени полностью использоваться.

Если mpstat имеет 8 строк вывода, это означает, что у вас есть 8 процессорных ядер, а затем любой процесс, который вы видите в prstat Использование более 12,5% ресурсов ЦП (100/8), скорее всего, связано с ЦП. Чтобы проверить, действительно ли это так, вы можете использовать prstat -L -p <pid> чтобы увидеть, достигает ли какой-либо отдельный поток этого процесса 12,5%, потому что тогда вы точно знаете, что процесс связан с процессором. У вас достаточно нескольких доступных процессорных ядер, но вы всегда должны помнить, что любой отдельный поток обработки может жить только на одном ядре процессора. Для того, чтобы MySQL мог использовать вашу коробку, становится вопросом, насколько хорошо разделить работу на несколько потоков. Если в MySQL есть хоть одна горячая тема, то ваша мощная машина мало чем поможет.

Также вы можете найти немало людей, которые посоветуют отключить Intel HyperThreading при нагрузке на сервер Linux/Solaris, потому что на самом деле он работает лучше без него. YMMM. Из того, что я понимаю, Intel HyperThreading отлично подходит для рабочих нагрузок настольного типа, но для сервера, который должен выполнять только одну задачу и делать это так быстро, что может отрицательно сказаться на производительности.

Отсюда вы можете пройти не менее десятка маршрутов, поэтому вам будет сложно проконсультироваться, прежде чем вы получите больше фактов.

Вы упоминаете, что средняя нагрузка обычно составляет 20 с, а иногда - 40 или 50 с. Затем вы упомянули, что у вас есть 16 доступных процессоров ((2 процессора x 4 ядра) x 2), поэтому средняя загрузка в 20 с означает, что ваши процессы борются за процессорное время, а в 40 или 50 у вас большое ожидание.

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

Есть еще один пост, который хорошо объясняет среднюю нагрузку, используя сценарий трафика на мосту:

Понимание загрузки процессора Linux

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

Я, скорее всего, просто перегружен системой, а не проблемой ZFS или MySQL.

** Редактировать, я вижу, что был добавлен комментарий, в котором говорится, что вы наблюдаете 100% загрузку процессора. Это также соответствовало бы процессам, ожидающим процессорного времени.

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