在/etc/my.cnf中配置
# log
slow-query-log = on #开启MySQL慢查询功能
slow_query_log_file = /data/mysql/slow.log #设置MySQL慢查询日志路径
long_query_time = 3 #修改为记录3秒内的查询,默认不设置此参数为记录10秒内的查询
log-queries-not-using-indexes = on #记录未使用索引的查询
查看slow.log的方式,例如查看几个G大小的log文件时,怎么去查看
采样日志内容, 如:tail -n 100000 slow.log > analytics.log
主要步骤:1)采样慢日志内容,找到sql语句 2)explain 分析sql语句,根据需要添加索引 3)迁移日志
mysqldumpslow slow.log | less
mysqldumpslow基本使用
参数解释
-s, 是表示按照何种方式排序
c: 访问计数
l: 锁定时间
r: 返回记录
t: 查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
基本用法
例:
得到返回记录集最多的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
mysqlsla 分析慢查询日志
1.mysqlsla下载
网上找
1.mysqlsla安装
下载下来的包扔到某个目录下:
tar zxvf mysqlsla-2.03.tar.gz #解压
cd mysqlsla-2.03 #进入安装目录
perl Makefile.PL #配置
make #编译
make install #安装
Count, sql的执行次数及占总的slow log数量的百分比.
Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比.
95% of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间.
Lock Time, 等待锁的时间.95% of Lock , 95%的慢sql等待锁时间.Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量.
Rows examined, 扫描的行数量.
Database, 属于哪个[数据库]
Users, 哪个用户,IP, 占到所有用户执行的sql百分比
Query abstract, 抽象后的sql语句
Query sample, sql语句
https://zhuanlan.zhihu.com/p/106405711
mysql 5.7 版本中的sys库中的 statement_analysis表格式化存了所有慢查询sql语句。
说明schema_index_statistics的作用:查看每个索引的使用情况
table_schema: sys # 索引的库
table_name: sys_config # 索引的表
index_name: PRIMARY # 对应的索引
rows_selected: 0 # 执行次数
select_latency: 0 ps # 查询次数 和时间
rows_inserted: 0 #
insert_latency: 0 ps
rows_updated: 0
update_latency: 0 ps
rows_deleted: 0
delete_latency: 0 ps