在用户使用数据库过程中,可能会出现非业务流量高峰导致的内存及CPU使用率激增的想象,这可能是由于某些SQL语句执行时间过长导致的。通过对慢查询日志的排查可以了解数据库系统运行异常,优化SQL语句,提升数据库性能。
什么是慢查询日志
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为1,意思是运行1s以上的语句。
慢查询性能低下的基本原因往往是访问的数据过多;它们执行过程中占用系统资源不释放,甚至由于并发较高、彼此争用资源,使得执行时间较业务低峰期更长,这使得cpu、网络和IO等都承受很大的压力,短时间内导致所有查询执行效率降低,严重的还会导致mysql的crash
如何开启慢查询日志
重要参数如下:
slow_query_log 慢查询开启状态
slow_query_log_file 慢查询日志存放路径
long_query_time 查询超过多少秒才记录
建议配置如下: [mysqld] slow_query_log = ON slow_query_log_file = /home/mysql/mysql/log/slow.log long_query_time = 1
下面为慢查询日志的一个片段:
第一行显示了查询记录的时间,第二行显示执行查询的用户; 第三行显示了执行查询需要的时间、在MySQL服务器等待表锁的时间、查询返回的行数,以及查询检查的行数。而后则是所执行的查询。
辅助工具mysqldumpslow查看慢查询统计信息
Mysqldumpslow的用法:
常用的参数的含义如下: -s : 将日志记录进行排序; t,l,r,c和at,al,ar,ac分别是按照query time,lock time,返回的记录数,query次数来排序,前面加了a的是按平均值排序。降序排列。 -a: 不将查询语句中的数字用’N’代替,不将查询语句中的字符串用’S’代替。 -g:仅分析相匹配的query。 -t: 是top n的意思,即为返回前面多少条的数据。 -r:升序排列。