Как использовать Mytop для мониторинга производительности MySQL

Вступление

Mytop - это инструмент командной строки с открытым исходным кодом, используемый для мониторинга производительности MySQL. Он был вдохновлен инструментом мониторинга системы Linux с именем top и похож на него по внешнему виду. Mytop подключается к серверу MySQL и периодически запускает команды + show processlist + и + show global status +. Затем он суммирует информацию в полезном формате. Используя mytop, мы можем отслеживать (в режиме реального времени) потоки MySQL, запросы и время безотказной работы, а также видеть, какой пользователь выполняет запросы к какой базе данных, какие медленные запросы и многое другое. Вся эта информация может быть использована для оптимизации производительности сервера MySQL.

В этом руководстве мы обсудим, как установить, настроить и использовать mytop.

Предпосылки

Прежде чем приступить к работе с этим учебником, вы должны иметь следующее:

  • CentOS 7 64-bit Droplet (работает также с CentOS 6)

  • Пользователь без полномочий root с привилегиями sudo. Чтобы настроить пользователя этого типа, следуйте учебному руководству Initial Server Setup с CentOS 7. Все команды будут выполняться от имени этого пользователя.

  • MySQL сервер работает на Droplet. Чтобы установить MySQL, выполните шаг № 2 How. Установить Linux, Apache, MySQL, стек PHP (LAMP) на CentOS.

Шаг 1 - Установка Mytop

Давайте установим пакеты, необходимые для mytop.

Во-первых, нам нужно установить репозиторий yum EPEL (Extra Packages for Enterprise Linux) на сервере. EPEL - это специальная группа по интересам Fedora, которая создает, поддерживает и управляет высококачественным набором дополнительных программных пакетов с открытым исходным кодом для Enterprise Linux. Выполните следующую команду, чтобы установить и включить репозиторий EPEL на вашем сервере:

На CentOS 7:

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

На CentOS 6:

sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Прежде чем продолжить, убедитесь, что репо EPEL включено с помощью:

sudo yum repolist

Если включено, вы увидите следующее репо в списке:

epel/x86_64                                                            Extra Packages for Enterprise Linux 7 - x86_64

Далее давайте защитим базовые пакеты от EPEL с помощью плагина yum * protectbase *.

sudo yum install yum-plugin-protectbase.noarch -y

Целью плагина * protectbase * является защита определенных репозиториев yum от обновлений из других репозиториев. Пакеты в защищенных репозиториях не будут обновляться или переопределяться пакетами в незащищенных репозиториях, даже если незащищенный репозиторий имеет более позднюю версию.

Теперь мы готовы установить пакет mytop. Запустите следующую команду, чтобы установить его:

sudo yum install mytop -y

Это установит пакет mytop, а также все его зависимости, в основном модули perl.

Шаг 2 - Настройка Mytop

Перед использованием mytop создайте настроенный файл конфигурации для mytop с именем + .mytop +. Запустите команду:

sudo nano /root/.mytop

и добавьте следующее содержимое в файл, сохраните и выйдите.

/root/.mytop

host=localhost
db=mysql
delay=5
port=3306
socket=
batchmode=0
color=1
idle=1

Этот файл конфигурации будет использоваться, когда вы запускаете mytop напрямую от имени пользователя root и когда вы запускаете его с командой + sudo + перед ним как пользователь root без полномочий root.

Вы можете внести изменения в этот файл конфигурации в зависимости от ваших потребностей. Например, опция + delay + указывает количество времени в секундах между обновлениями дисплея. Если вы хотите обновлять отображение mytop каждые 3 секунды, вы можете отредактировать файл + / root / .mytop +, используя

sudo nano /root/.mytop

и измените следующее:

/root/.mytop

delay=

Параметр + idle + указывает, разрешать ли незанятым (спящим) потокам появляться в списке на экране отображения mytop. По умолчанию показываются пустые потоки. Если неиспользуемые потоки опущены, порядок сортировки по умолчанию меняется на противоположный, так что самые продолжительные запросы отображаются в верхней части списка. Если вы хотите сделать это, отредактируйте файл + / root / .mytop + и измените следующее:

/root/.mytop

idle=

Вы можете обратиться к справочным страницам mytop для получения информации обо всех параметрах в файле конфигурации - он содержит описание каждого параметра. Чтобы получить доступ к странице руководства, используйте команду:

man mytop

Вы можете набрать + q +, чтобы выйти из руководства.

Шаг 3 - Подключение к Mytop

В этом разделе мы обсудим, как подключиться к mytop и использовать его для просмотра запросов MySQL.

Mytop требует учетные данные для доступа к базе данных, которые могут быть предоставлены через приглашение, в командной строке или сохранены в файле конфигурации. Для большей безопасности мы будем использовать опцию + - prompt + для mytop, которая запрашивает пароль каждый раз. + Позвольте нам подключиться к mytop используя:

sudo mytop --prompt

и введите пароль root MySQL в командной строке. Вы также можете использовать несколько аргументов командной строки с командой + mytop +. Пожалуйста, обратитесь к странице руководства для получения полного списка. Например, если вы хотите использовать другого пользователя mysql, такого как * sammy *, для подключения к mytop, выполните команду:

sudo mytop -u sammy --prompt

Для подключения и мониторинга только конкретной базы данных вы можете использовать команду:

sudo mytop -d  --prompt

Чтобы выйти из mytop и вернуться в командную строку, введите + q +.

Шаг 4 - Просмотр и интерпретация дисплея Mytop

В этом разделе мы увидим, как интерпретировать отображение mytop и различные функции, предлагаемые инструментом.

Как только мы подключимся к mytop с помощью + mytop --prompt +, мы перейдем к представлению * thread *. Это покажет что-то похожее на:

Output of mytopMySQL on localhost (5.5.41-MariaDB)                    up 0+00:05:52 [01:33:15]
Queries: 148  qps:    0 Slow:     0.0         Se/In/Up/De(%):    09/00/00/00
            qps now:    2 Slow qps: 0.0  Threads:    6 (   5/   0) 67/00/00/00
Key Efficiency: 2.0%  Bps in/out:  14.7/320.7k   Now in/out: 192.5/731.8k

     Id      User         Host/IP         DB      Time    Cmd Query or State
      --      ----         -------         --      ----    --- ----------
       2      root       localhost      mysql         0  Query show full processlist
      16      root       localhost                    0  Sleep
      17      root       localhost     testdb         0  Query SELECT * FROM dept_emp
      18      root       localhost     testdb         0  Query SELECT * FROM dept_emp
      19      root       localhost     testdb         0  Query SELECT * FROM dept_emp
      20      root       localhost     testdb         0  Query SELECT * FROM dept_emp

Вы можете вернуться к этому представлению, если находитесь в другом представлении, набрав + t +.

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

  • Первая строка идентифицирует имя хоста сервера и версию MySQL, на которой он работает. Правая часть показывает время работы процесса сервера MySQL в формате дни + часы: минуты: секунды, а также текущее время.

  • Во второй строке отображается общее количество запросов, обработанных сервером (в нашем случае 148), среднее количество запросов в секунду, количество медленных запросов и процент запросов «Выбрать», «Вставить», «Обновить» и «Удалить».

  • Третья строка показывает значения в реальном времени с момента последнего обновления mytop. Обычное время обновления (задержки) для mytop составляет 5 секунд, поэтому, если за последние 5 секунд после обновления было выполнено 100 запросов, число + qps now + будет равно 20. Первое поле - это количество запросов в секунду (+ qps сейчас: 2 +). Второе значение - это количество медленных запросов в секунду. Сегмент + Threads: 6 (5/0) + указывает на то, что всего 6 подключенных потоков, 5 активных (один спящий) и 0 потоков в кеше потоков. Последнее поле в третьей строке показывает процент запросов, как в предыдущей строке, но с момента последнего обновления mytop.

  • В четвертой строке отображается эффективность буфера ключей (как часто ключи считываются из буфера, а не с диска) и количество байтов, отправленных и полученных MySQL, как в целом, так и в последнем цикле mytop. + Key Efficiency: 2.0% + показывает, что 2% ключей читаются из буфера, а не с диска. + Bps in / out: 14.7 / 320.7k + показывает, что с момента запуска MySQL в среднем набирал 14,7 кбит / с входящего трафика и 320,7 кбит / с для исходящего трафика. + Now in / out + снова показывает трафик, но с момента последнего обновления mytop.

Вторая часть экрана отображает текущие потоки MySQL, отсортированные по времени простоя (сначала меньше всего простоя). Вы можете изменить порядок сортировки, нажав * O *, если это необходимо. Идентификатор потока, имя пользователя, хост, к которому подключается пользователь, база данных, к которой подключен пользователь, количество секунд простоя, команда, выполняемая потоком (или состояние потока), и первая часть запроса информация все отображаются здесь. Если поток находится в состоянии * Query * (т.е. + Cmd + отображает * Query *), затем в следующем столбце + Query or State + будет показана первая часть запроса, который выполняется. Если состояние команды * Sleep * или * Idle *, столбец + Query or State + обычно будет пустым. В приведенном выше примере вывода поток с идентификатором * 2 * на самом деле является mytop, выполняющим запрос + show processlist + для сбора информации. Поток с идентификатором * 16 * находится в спящем режиме (не обрабатывает запрос, но все еще подключен). Поток с идентификатором * 17 * выполняет запрос SELECT для базы данных * testdb *.

Теперь, когда мы поняли базовое отображение mytop, мы увидим, как использовать его для сбора дополнительной информации о потоках и запросах MySQL. Давайте посмотрим на следующий экран mytop:

[secondary_output Output of mytop]
MySQL on localhost (5.5.41-MariaDB)                    up 0+00:13:10 [23:54:45]
Queries: 2.8k   qps:    4 Slow:    51.0         Se/In/Up/De(%):    45/00/00/00
            qps now:   17 Slow qps: 0.0  Threads:   52 (  51/   0) 96/00/00/00
Key Efficiency: 100.0%  Bps in/out: 215.4/ 7.6M   Now in/out:  2.0k/16.2M

     Id      User         Host/IP         DB      Time    Cmd Query or State
      --      ----         -------         --      ----    --- ----------
      34      root       localhost     testdb         0  Query show full processlist
    1241      root       localhost                    1  Sleep
    1242      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1243      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1244      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1245      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1246      root       localhost     testdb         1  Query SELECT * FROM dept_emp
    1247      root       localhost     testdb         1  Query SELECT * FROM dept_emp

В представлении mytop * thread * (представление по умолчанию), показанном выше, запросы усекаются. Чтобы просмотреть весь запрос, вы можете нажать * F *, и он спросит:

Full query for which thread id:

Введите идентификатор потока для запроса, который вы хотите увидеть. Например, введите + 1244 +. Тогда он покажет следующее:

Thread 1244 was executing following query:

SELECT * FROM dept_emp WHERE ...

-- paused. press any key to resume or (e) to explain --

Мы можем набрать + e +, чтобы объяснить запрос. Это объяснит запрос, который выполняется, чтобы мы могли выяснить, оптимизирован ли запрос. EXPLAIN - один из самых мощных инструментов для понимания и оптимизации проблемных запросов MySQL. Например:

EXPLAIN SELECT * FROM dept_emp:

*** row 1 ***
         table:  dept_emp
          type:  ALL
 possible_keys:  NULL
           key:  NULL
       key_len:  NULL
           ref:  NULL
          rows:  332289
         Extra:  NULL
-- paused. press any key to resume --

Вы можете нажать любую клавишу, чтобы выйти из этого режима, или набрать + t +, чтобы вернуться к виду потока по умолчанию.

Другое полезное представление, доступное в mytop, является представлением команды. Чтобы получить доступ к командной строке, введите + c +. Это будет выглядеть примерно так:

          Command      Total  Pct  |  Last  Pct
          -------      -----  ---  |  ----  ---
           select       1782  55%  |   100   8%
      show status        723  22%  |   533  45%
 show processlist        708  22%  |   532  45%
        change db          2   0%  |     0   0%
   show variables          1   0%  |     0   0%
      Compression          0   0%  |     0   0%

Столбец + Command + показывает тип выполняемой команды или запроса. Столбец + Total + обозначает общее количество команд этого типа, запущенных с момента запуска сервера, а столбец + Pct + показывает то же самое в процентах. С другой стороны вертикальной линии у нас есть столбец + Last +, в котором указывается номер команды такого типа, выполненной с момента последнего обновления mytop. Эта информация дает нам представление о том, что сервер MySQL делает в краткосрочной и долгосрочной перспективе.

Мы обсудили некоторые важные и полезные функции mytop в этом уроке. Есть много других доступных. Чтобы просмотреть полный список опций, вы можете нажать клавишу *? * Во время работы mytop.

Заключение

Теперь вы должны хорошо понимать, как использовать mytop для мониторинга вашего сервера MySQL. Это также отправная точка для поиска проблемных SQL-запросов и их оптимизации, что повышает общую производительность сервера. Вы можете получить больше информации о том, как оптимизировать запросы и таблицы MySQL на вашем сервере, в https://www.digitalocean.com/community/tutorials/how-to-optimize-queries-and-tables-in-mysql-and-mariadb -on-a-vps [это руководство].

Related