Mysql定时记录慢查询SQL,解决SQL性能烦恼

思路比较简单,打开Mysql Event 定时任务框架,定时执行show processlist;并将结果存储至Mysql。

一、记录慢查询

1.1 打开Mysql Event管理器

SET GLOBAL event_scheduler = ON;

1.2 查询任务调度器是否已经打开

SHOW VARIABLES LIKE 'event_scheduler';

1.3 创建记录表

CREATE TABLE `processlist` (
  `ID` int(11) DEFAULT NULL,
  `USER` varchar(255) DEFAULT NULL,
  `HOST` varchar(255) DEFAULT NULL,
  `DB` varchar(255) DEFAULT NULL,
  `COMMAND` varchar(255) DEFAULT NULL,
  `TIME` bigint(20) DEFAULT NULL,
  `STATE` varchar(255) DEFAULT NULL,
  `INFO` text,
  `date` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;



1.4 新建定时任务

use iios_tmp;
DROP EVENT schedule_showprocess;
CREATE EVENT IF NOT EXISTS schedule_showprocess
ON SCHEDULE EVERY 2 SECOND
DO insert into iios_tmp.`processlist` ( select *, now() as `DATE`  from  information_schema.processlist where INFO is not null and DB is not null and HOST !="%" and STATE !="executing");

SHOW EVENTS 

1.6 查询事件执行结果

二、结果分析

明显看到存在很多超过60秒的全查询SQL语句,导致的DB死锁。fix it。