1.登录mysql 使用

1
2
3
4
SELECT id, user, host, db, command, time, state, info
FROM information_schema.processlist
WHERE command IN ('Query', 'Execute')
AND time >= 10;

查询当前当前执行时间超过10秒的sql,发现一直在变动,无法定位问题.

2.查询慢sql日志
show variables like 'slow_query%';

+———————+——————————–+
| Variable_name | Value |
+———————+——————————–+
| slow_query_log | ON |
| slow_query_log_file | /opt/mysql/logs/mysql-slow.log |
+———————+——————————–+

查询是否开启慢sql
没有的话开启慢sql
set global slow_query_log=ON;
前往slow_query_log_file的目录查看慢sql
tailf mysql-slow.log
发现打不开
看一下文件大小发现,文件大小太大导致的问题,情况紧急直接
>mysql-slow.log
清空历史日志
继续tailf mysql-slow.log
发现有很多Query_time很小的sql也被记录了,
查询配置的sql语句超时时间
show variables like 'long_query_time';

+—————–+———–+
| Variable_name | Value |
+—————–+———–+
| long_query_time | 10.000000 |
+—————–+———–+

之前记录的sql Query_time远远小于10
查询
show variables like 'log_queries_not_using_indexes';
发现开启了未使用索引查询的sql语句记录

+——————————-+——-+
| Variable_name | Value |
+——————————-+——-+
| log_queries_not_using_indexes | ON |
+——————————-+——-+

直接关闭.
set global log_queries_not_using_indexes=OFF;
ps: 如果不方便关闭可以设置set global log_throttle_queries_not_using_indexes=300;限制每分钟记录300条
然后开始tailf mysql-slow.log
发现有Query_time>60的慢sql,定位sql,搜索该sql的关键信息,找到执行点,发现是定时任务
将执行该sql的定时任务临时停止掉,发现数据库CPU下降.等着开会批评.完美解决.