Определите медленный запрос без журналов медленных запросов на сервере MySQL
-
26-09-2020 - |
Вопрос
Мне интересно, есть ли другой способ проверить наши медленные запросы без регистрации медленных запросов.Предположим, у меня очень загруженный сервер, который не может позволить себе много журналировать для экономии памяти и операций ввода-вывода.Тогда есть ли другой способ проверить, медленный ли у меня запрос?Я знаю, что мы можем выполнить профилирование запроса, но до сих пор не знаю, что именно делать, чтобы определить, какой запрос занимает больше всего времени и памяти.
Только начал администрировать MySQL и не знаю, как с этим справиться.Любое руководство будет высоко оценено.
Решение
Если вы вообще не хотите включать журнал медленных запросов, у меня есть предложение.
Вы можете использовать pt-запрос-дайджест в течение интервала времени.
Я предлагал это несколько раз в DBA StackExchange.
Nov 24, 2011
: Эффекты производительности общего журнала запросов MySQLApr 24, 2012
: Исследование пиковой пропускной способности MySQLJul 26, 2012
: Что сейчас работает?
Если ты посмотришь на мою Nov 24, 2011
связь, Я предоставил сценарий оболочки, который вы можете запустить с помощью crontab. pt-запрос-дайджест.
ПОПРОБУЙТЕ!!!
Другие советы
Вы можете запустить следующее оператор в цикле в сценарии, который вызывает оператор каждые 10 секунд, например.
mysql -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where time>10 and command<>"Sleep"'
Вы можете настроить его, чтобы дать вам более или менее информацию в зависимости от выпуска вашего запроса.
mysql> desc INFORMATION_SCHEMA.PROCESSLIST;
+---------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| ID | bigint(21) unsigned | NO | | 0 | |
| USER | varchar(16) | NO | | | |
| HOST | varchar(64) | NO | | | |
| DB | varchar(64) | YES | | NULL | |
| COMMAND | varchar(16) | NO | | | |
| TIME | int(7) | NO | | 0 | |
| STATE | varchar(64) | YES | | NULL | |
| INFO | longtext | YES | | NULL | |
| TIME_MS | bigint(21) | NO | | 0 | |
| ROWS_SENT | bigint(21) unsigned | NO | | 0 | |
| ROWS_EXAMINED | bigint(21) unsigned | NO | | 0 | |
+---------------+---------------------+------+-----+---------+-------+
11 rows in set (0.00 sec)
.
Для того, чтобы не сохранять тот же запрос много раз, вы можете использовать хеш запроса как уникальный ключ.