Вступление
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 [это руководство].