Поиск по сайту:

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


Введение

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

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

Предпосылки

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

  • CentOS 7, 64-разрядная капля (также работает с CentOS 6)
  • Пользователь без полномочий root с привилегиями sudo. Чтобы настроить пользователя этого типа, следуйте руководству по начальной настройке сервера с CentOS 7. Все команды будут выполняться от имени этого пользователя.
  • Сервер MySQL, работающий на дроплете. Чтобы установить MySQL, выполните шаг 2 из статьи Как установить стек Linux, Apache, MySQL, PHP (LAMP) на CentOS.

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

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

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

В CentOS 7:

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

В CentOS 6:

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

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

  1. sudo yum repolist

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

epel/x86_64                                                            Extra Packages for Enterprise Linux 7 - x86_64

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

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

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

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

  1. sudo yum install mytop -y

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

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

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

  1. sudo nano /root/.mytop

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

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

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

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

  1. sudo nano /root/.mytop

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

delay=3

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

idle=0

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

  1. man mytop

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

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

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

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

  1. sudo mytop --prompt

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

  1. sudo mytop -u sammy --prompt

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

  1. sudo mytop -d databasename --prompt

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

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

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

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

Output of mytop
MySQL 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. Эффективность ключей: 2,0% показывает, что 2% ключей считываются из буфера, а не с диска. Bps in/out: 14,7/320,7k показывает, что с момента запуска MySQL в среднем 14,7 кбит/с для входящего трафика и 320,7 кбит/с для исходящего трафика. Now in/out снова показывает трафик, но с момента последнего обновления mytop.

Во второй части экрана перечислены текущие потоки MySQL, отсортированные по времени простоя (сначала наименее простаивающие). Вы можете изменить порядок сортировки, нажав O, если это необходимо. Идентификатор потока, имя пользователя, хост, с которого подключается пользователь, база данных, к которой подключен пользователь, количество секунд простоя, команда, которую выполняет поток (или состояние потока), и первая часть запроса. информация вся отображается здесь. Если поток находится в состоянии запроса (т. е. Cmd отображает запрос), то в следующем столбце запрос или состояние будет показана первая часть выполняемого запроса. Если команда находится в состоянии 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 (представлении по умолчанию), показанном выше, запросы усекаются. Чтобы просмотреть весь запрос, вы можете нажать 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. Есть много других доступных. Чтобы просмотреть полный список параметров, нажмите клавишу ? key во время работы mytop.

Заключение

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