找到要优化的sql,慢查询日志是mysql自带的一项功能,可以记录执行超过指定时间的sql语句。
service mysqld restart#开启慢查询日志
slow_query_log=ON
#耗时多长会记录到慢查询日志中(秒)
long_query_time=0.5
#慢查询日志的存储方式,可以同时支持 文件和表存储
log_output='FILE,TABLE'

SHOW VARIABLES LIKE 'slow_query_log'查询是否开启 ,ON已经开启
SHOW VARIABLES LIKE 'slow_query_log'
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 0.001;
SET GLOBAL log_output = 'FILE,TABLE';


SELECT * FROM mysql.slow_log

start_time 执行这条sql语句的时间
user_host 用户名 和主机名
query_time 查询sql语句花费的时间
lock_time 获取锁的时间
rows_sent 返回的行数
rows_examined 服务器查询的行数
db 查询的数据库
sql_text 执行的sql语句
thread_id 执行的线程id
SELECT
*
FROM
mysql.slow_log
ORDER BY query_time DESC

SHOW VARIABLES LIKE 'log_output' 查询是否开启 文件存储
SHOW VARIABLES LIKE 'slow_query_log_file' 查询


mysqldumpslow -s t -t 10 -a xxx-slow.log

➜ mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]
Parse and summarize the MySQL slow query log. Options are
--verbose verbose
--debug debug
--help write this text to standard output
-v 展示更详细的信息
-d debug
-s ORDER 以哪种方式排序,默认at
al: 平均锁定时间
ar: 平均返回记录数
at: 平均查询时间
c: 访问计数
l: 锁定时间
r: 返回记录
t: 查询时间
-r 将-s的排序倒序
-t NUM top n的意思,展示最前面的几条
-a 不去将数字展示成N,将字符串展示成'S'
-n NUM abstract numbers with at least n digits within names
-g PATTERN 后边可以写一个正则,只有符合正则的行会展示
-h HOSTNAME 慢查询日志以 主机名-slow.log的格式命名,-h可指定读取指定主机名的慢查询日志,默认情况下是*,读取所有的慢查询日志
-i NAME MySQL Server的实例名称(如果使用了mysql.server startup脚本的话)
-l 不将锁定时间从总时间中减去