慢查询日志记录的就是慢的语句
1.怎么样算是慢?
ong_query_time
:慢查询阈值,当查询时间多于设定的阈值时(s),记录日志。
log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
2.如何开启?
show variables like '%slow_query_log%';
set global slow_query_log=1
Variable_name | Value |
---|---|
slow_query_log | ON |
slow_query_log_file | /www/server/data/mysql-slow.log |
log_output
:日志存储方式。log_output=‘FILE’表示将日志存入文件,默认值是’FILE’。log_output='TABLE’表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。
3.工具 (复制自 https://www.cnblogs.com/saneri/p/6656161.html )
得到返回记录集最多的10个SQL。
mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log
得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log
得到按照时间排序的前10条里面含有左连接的查询语句。
mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log
另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。
mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more
同事跑过来找我解决的一个历史sql (count 条件统计)
原来是这个样子:
改为:
SELECT
min(wp.post_time),
max(wp.post_time),
count(wp.post_type = 1 or null),
count(wp.post_type = 2 or null),
count(wp.post_id)
FROM
weili_user AS u
JOIN weili_user_extend AS e ON u.user_id = e.user_id
left join weili_post as wp on wp.user_id = u.user_id
GROUP BY u.user_id
LIMIT 0,20