zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MySQL slow query [慢查询] 资料整理

mysql 查询 整理 资料 Query slow
2023-09-14 09:01:02 时间
前言:
MySQL中提供了一个慢查询的日志记录功能,可以把查询SQL语句时间大于多少秒的语句写入慢查询日志,日常维护中可以通过慢查询日志的记录信息快速准确地判断问题所在。  (有点类似 oracle的v$session_longops )
如下为MySQL slow query[慢查询]配置、log文件参数介绍、脚本实现每天以日期格式生成新的log文件等.. 1、/etc/my.cnf 配置 slow query   #开启慢查询 slow_query_log=on   
#超过2秒的查询就视为慢查询 long_query_time=2 #记录日志 slow_query_log_file=/data/mysql/slow.log
1)mysql show variables like %long_query_time%;
     +-----------------+----------+
     | Variable_name   | Value    |
     +-----------------+----------+
     | long_query_time | 2.000000 |  
     +-----------------+----------+  

2) mysql   show variables like %slow_query_log%;
     +------------------------------+---------------------------+
     | Variable_name                          | Value                     |
     +------------------------------+---------------------------+
     | slow_query_log                        | ON                        |
     | slow_query_log_file                  | /data/public3306/slow.log |
     +------------------------------+---------------------------+ 
mysql  
# User@Host: root[root] @  [192.168.0.20] # Query_time: 372  Lock_time: 136  Rows_sent: 152  Rows_examined: 263630 select id, name from manager where id in (66,10135); Query_time == 用的时间秒
-s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有 
c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙 
-t,是top n的意思,即为返回前面多少条的数据 
-g,后边可以写一个正则匹配模式,大小写不敏感的 
mysqldumpslow -s c -t 20 host-slow.log 
mysqldumpslow -s r -t 20 host-slow.log 
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。 
mysqldumpslow -t 10 -s t -g “left join” host-slow.log 
这个是按照时间返回前10条里面含有左连接的sql语句。 ###### 查询慢查询log中超过10s sql的个数(包括重复的sql).. grep Query_time: slow.log |awk $3 =10{printf("%.f\n",$3)}|wc -l 4、其他参数设置 
慢查询相关的 参数log_queries_not_using_indexes 如果log_queries_not_using_indexes为ON的话,当执行一个sql语句的时候,如果一个表没有索引就会把这个信息记录在慢查询文件中 show variables like "%log_queries_not%" ;  set global log_queries_not_using_indexes=on;
*** 为了便捷统计每天slow query查询 量和性能问题,特写脚本实现slow query每天以日期形式新生成一个log  *** 其实就是一个 /usr/bin/mysql -uroot  -N -e "set global slow_query_log_file=/data/mysql/slow_`date +%Y_%m_%d`.log;"  *** 只是直接在crontab 写命令一直不生效,考虑可能是因为"" 双引号原因,所以放在a.sh 提供执行权限 ‘x’即可执行. 具体如下 :   [root@lottery ~]# crontab  -l 0 0 * * * /bin/sh  /root/a.sh [root@lottery ~]# cat a.sh  /usr/bin/mysql -uroot  -N -e "set global slow_query_log_file=/data/mysql/slow_`date +%Y_%m_%d`.log;" [root@lottery ~]#  mysql   show variables like slow_query%log%;
| Variable_name                          | Value                                               |
+-------------------------------+-------------------------------------+
| slow_query_log                         | ON                                                  |
| slow_query_log_file                   | /data/mysql/slow_2015_05_12.log   |
+-------------------------------+-------------------------------------+ 
【MySQL】通用查询日志 general query log 详解 通用查询日志(general query log)用来记录用户的所有操作,包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发送给MySQL数据库服务器的所有SQL指令等。当我们的数据发生异常时,查看通用查询日志,还原操作时的具体场景,准确定位问题。
Metricbeat:mysql module之query metricset介绍 Elastic官网对于mysql query metricset介绍很少,也没有介绍其用法,但是在基于ELK实现mysql性能监控中,query metricset又是明显支持的指标集。本着探索学习精神,通过查阅了不少资料后,今天我们就针对query metricset来详细介绍。