В этой статье я законспектирую подходи с одним из наборов инструментов, который позволяет выявить признаки проблем с производительностью MySQL. Это дальеко не исчерпывающий перечень утилит, а лишь их малая часть, с которой я познакомился в ходе штудирования литературы.
Эта публикация сугубо мой конспект прочитанной литературы. Информация может быть не очень структурирована и удобочитаема. Материал публикации предоставляется без каких-либо гарантий со стороны автора.
Список первоисточников
- O’Reilly High Performance MySQL 3rd Edition.
- How to read Vmstat output.
Утилиты для выявления проблем в производительности.
vmstat
Пример запуска утилиты:
vmstat -S M 5

Первая строка в выводе показывает среднее значение с момента перезагрузки сервера. Последующие строки показывают текущую оперативные данные. Новая строчка с текущими значениями будет выводиться каждые 5 секунд.
В таблице ниже приведено краткое описание каждого из группы столбцов.
| Столбец | Описание |
| procs | Столбец «r» показывает сколько процессов ожидают процессорного времени. Столбец «b» показывает сколько процессов находятся в режиме ожидания I/O (диск, сеть, пользовательский ввод и т.д.) |
| memory | Столбец «swpd» показывает сколько блоков выгружено в файл подкачки на диск. Столбец «free» показывает количество свободных блоков. Столбец «buff» показывает количество блоков, используемых в качестве буферной памяти. Столбец «cache» показывает количество блоков, которые используются в качестве кеша. |
| swap | Отображает информацию о том, сколько блоков выгружено на диск (столбец «so») или загружено с диска (столбец «si») при использовании файла подкачки. |
| io | Показывает сколько блоков в секунду было прочитано (столбец «bi») с блочных устройств, а также сколько блоков было записано (столбец «bo») на блочные устройства. |
| system | Отображает информацию и количестве прерываний (столбец «in») и переключений контекста (столбец «cs»). |
| cpu | Показывает время распределения процессорного времени на контекст пользователя (us), ядра системы (sy), время простоя (id) и ожидания устройство ввода/вывода (wa). Если сервер виртуальный, то будет отображен пятый стобец (st), который показывает гипервизор распределил на что-то другое, отличное от нужно самого виртуального сервера |
Как я уже говорил размер вывод для memory, swap, io отображается в блоках. Размер блока при использовании параметра -S M составляет 1 МБ. Без указания этого параметра размер блока будет составлять 1 КБ (1024 байт).
Не стоит беспокоиться о высоких значения в столбце «system — cs». По крайне мере при значения до 100000. Но даже большие значения далко не всегда признак наличия проблем с ресурсом CPU.
iostat
Пример запуска утилиты:
iostat -dx 5

Первая строка в выводе показывает среднее значение с момента перезагрузки сервера. Последующие строки показывают текущую оперативные данные.
Краткое описание столбцов приведено в таблице ниже.
| Столбец | Описаниеaqu-szСЗГ |
| rrqm/s и wrqm/s | Количество сгруппированных операций чтения и записи. Под группировкой понимается объединение нескольких логических запросов из очереди в единый запрос для отправки его на конечное устройство. |
| r/s и w/s | Количество операций чтения и записи в секунду. |
| rsec/s (rkB/ s) и wsec/s (wkB/s) | Скорость операций чтения и записи в секунду. В зависимости от ОС может отображаться либо в байтах, либо в килобайтах. |
| rareq-sz и wareq-sz | Средний размер запроса для чтения\записи. |
| aqu-sz (avgrq-sz) | Средняя длина очереди. |
| r_await и w_await | Количество миллисекунд, потраченных на нахождение запроса в очереди. |
| %util | Процент времени в течении которого хотя бы один запрос был активен. Не стоит путать этот параметр с процентом использования диска. |
Примеры определения проблем с производительностью
Для справки привожу пример вывода утилиты vmstat с незагруженной ВМ с только что установленным серверов MySQL:

Проблемы с ресурсами CPU
Основной инструмент для идентификации проблем с ресурсами CPU — утилита vmstat. Высокое значение (90 и более) в столбце «cpu — us». Также высокое значение в стоблце «cpu — sy» (более 20) свидетельствует о наличии недостатка ресурсов CPU.
Например:

Проблемы с подсистемой ввода/вывода
Если серверу приходится обслуживать много операций ввода-вывода, то при использовании утилиты iostat в столбцах «procs — b» должно быть далеко не нулевое значение. Хотя более однозначный признак — это далеко не нулевое значение в столбце «cpu — wa»:

При использовании утилиты iostat в таком случае можно будет наблюдать постоянную и полную загрузки дисковой подсистемы (%util):

Большое использование файла подкачки
Основной инструмент для диагностики — утилита vmststa. Если сервер очень сильно использует файл подкачки (swap), то в столбцах группы «swap» будут большие значения:

Ссылки на другие статьи этого цикла
Часть 1. Тестирование производительности MySQL.
Часть 2. Профилирование нагрузки сервера MySQL.
Часть 3. Базовая конфигурация и оптимизация настроек MySQL.
Часть 5. Полезные запросы для MySQL.
