7.SQL优化之慢日志
思路:
对于慢sql语句优化,一般会按照下面的几个思路进行优化:开启慢日志,设置超过几秒为慢sql语句(可以视情况),抓取sql语句,通过explain查询执行计划,对慢sql语句分析,创建索引并调整语句,再看执行计划,对比调整结果
慢日志:
慢日志记录不仅有select语句,还有insert/delete/update等DML操作
- slow_query_log:表示是否开启慢查询日志
- slow_query_log_file:当使用文件存储慢查询日志时(log_output设置为“FILE”或者“FILE TABLE”时),指定慢日志存储于哪个日志文件中。
- log_query_time:表示“多长时间的查询”被认定为“慢查询”,默认是10秒
- log_queries_not_using_indexes:表示如果运行的sql语句没有使用到索引,是否也被当作慢查询语句记录到慢查询日志中
- log_throttle_queries_not_using_indexes:可以限制这种语句每分钟记录到慢日志中的次数,因为在生产环境中有可能有很多没有使用索引的语句,此类语句频繁地被记录到慢查询中,可能会导致慢查询日志快速不断地增长,管理员可以通过此参数进行控制。
这里介绍一些关于查看慢日志的小工具:mysqldumpslow
主要的参数有:
- -s 表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar表示相应的倒序
- -t是top n 的意思,即返回前面多少条数据
- -g后边可以写一个正则匹配模式,大小写不敏感。
例如:mysqldumpslow -s r -t 20 :表示为得到返回记录集最多的20个查询
另外如果有pt-query-digest命令查看慢日志的话,会显示的更详细。