慢查询日志
MySQL的慢查询日志是用来记录MySQL响应时间超过阈值的语句,即为超过long_query_time值得sql语句
默认没有开启慢查询(如果开启慢查询会导致性能降低)
慢日志配置
查看是否开启慢查询
1 | show variables like '%slow_query_log%'; |
开启慢查询
1 | --只对当前数据库生效,如果重启则失效 |
查看慢查询日志文件位置
1 | show variables like '%slow_query_log_file%'; |
如果需要永久生效,在需要在my.cnf配置文件中配置
在[mysqld]下添加
slow_query_log
和slow_query_log_file
参数,然后重启服务器即可
查询慢查询阈值,超过该阈值才是慢查询
1 | -- 单位是秒,使用小数可以表示小于秒的时间 |
查看有多少条慢查询
1 | show global status like '%Slow_queries%'; |
还可以记录未使用索引的sql语句
1 | -- 将未使用索引的sql语句记录到慢日志中,会无视long_query_time配置 |
查询慢查询日志的存储格式
1 | -- 可以是FILE(存储在slow_query_log_file中),也可以是TABLE(存储在mysql.slow_log表中),如果配置为FILE,TABLE则同时存入文件和表中 |
扫描行数过多也可以记录到慢日志中
1 | -- 扫描行数达到多少才会记录到慢查询日志中 |
日志分析工具
mysqldumpslow
可以使用mysqldumpslow来进行日志分析,以一种汇总各式输出慢查询日志中的内容,将查询进行分组
1 | mysqldumpslow [ OPTS... ] [ LOGS... ] |
在使用时可能会报错
-bash: /usr/local/mysql/bin/mysqldumpslow: /usr/bin/perl: bad interpreter: No such file or directory
说明是缺少perl,进行安装即可
yum -y install perl perl-devel
pt_query_digest
pt-query-digest(官网地址https://www.percona.com/doc/percona-toolkit/3.0/index.html )是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。