Написать скрипт популярных запросов show processlist MYSQL
Добрый вечер
Нужно написать скрипт вывода ТОП популярных sql запросов по нашей базе в файл.
Для этого авторизуемся под рут в mysql и выполняем встроенную команду show processlist нашим скриптом раз в секунду.
В результате выдает типа:
mysql> show processlist;
+----+-------+-----------+---------+---------+------+--------------+-----------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+-----------+---------+---------+------+--------------+-----------------------------------------------------------------------------+
| 3 | admin | localhost | base| Execute | 0 | Sending data | SELECT POS_R FROM table WHERE ID_P_R = ? ORDER BY DATE_R DESC LIMIT 1 |
| 27 | root | localhost | NULL | Query | 0 | starting | show processlist |
+----+-------+-----------+---------+---------+------+--------------+-----------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Из этого мы выбираем столбец info и строку, начиная с ключевого слова SELECT, UPDATE, INSERT, DELETE и заканчивая первым словом после WHERE,
Пример:
SELECT POS_R FROM table WHERE ID_P_R
SELECT ROUND FROM name WHERE ID_USERS
SELECT DATE FROM date WHERE AUTH
и тд..
В результате склеиваем одинаковые запросы и делаем счетчик числа этих запросов, в результате в файле выводим что типо такого, сортируя по кол-ву убывания :
SELECT POS_R FROM table WHERE ID_P_R (3463)
SELECT ROUND FROM name WHERE ID_USERS (796)
SELECT DATE FROM date WHERE AUTH (232)
где числа 3463,796,232 это кол-во запросов, пока выполнялся наш скрипт.
Время выполнения скрипта, хорошо бы уметь при запуске определять, в секундах. Чтобы по истечении например 60сек, он прекращал работу и выдавал файл с результатами.
ОС:
Система Centos 6, Mysql 5.7