这是一个慢查询日志的展示工具,能够帮助 DBA 或者开发人员分析数据库的性能问题,给出全面的数据摆脱直接查看 slow-log。QAN(Query Analytics)
创新互联是一家集网站建设,渠县企业网站建设,渠县品牌网站建设,网站定制,渠县网站建设报价,网络营销,网络优化,渠县网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
PMM 目前有 2 个版本,但是对于 QAN 来说其大致由三部分组成:
QAN-Agent(client):负责采集 slow-log 的数据并上报到服务端
QAN-API(server):负责存储采集的数据,并对外提供查询接口
QAN-APP:专门用来展示慢查询数据的 grafana 第三方插件
1. 数据流转
slow-log -- QAN-Agent -- QAN-API -- QAN-APP(grafana)
2. pmm1 架构图
3. pmm2 架构图
一个普通WEB站点的页面常常需要查询N条SQL语句后才能得出页面结果,当网站访问速度慢而前端做了大量优化工作以后,数据库瓶颈的查找也是WEB优化的一个重要部分。
MySQL中提供了一个慢查询的日志记录功能,可以把查询SQL语句时间大于多少秒的语句写入慢查询日志,日常维护中可以通过慢查询日志的记录信息快速准确地判断问题所在。
开启慢查询功能
log-slow-queries
慢查询日志文件路径
long_query_time
超过多少秒的查询就写入日志
打开my.cnf配置文件,加入以下代码:
log-slow-queries
=
/tmp/mysql-slow.log
long_query_time
=
2
如果是windows则在my.ini中加入
my.ini
复制代码
代码如下:
log_slow_queries
long_query_time
=
2
保存退出,重启MySQL即可。
关于long_query_time设置
通常我们设置long_query_time的值为2,表示查询SQL语句超过两秒的就记录,通常2秒就够了,默认是10秒。然而,对于许多WEB程序来说,2秒的查询还是太长了。的确在许多站点中,一个SQL语句超过1秒的执行时间都算慢的了。
mysql5.1.21以后才提供更细粒度的long_query_time设定,之前的版本只能以秒做单位。
查看日志
复制代码
代码如下:
[root@lizhong
tmp]#
tail
-f
/tmp/mysql_slow.log
Time:
120815
23:22:11
User@Host:
root[root]
@
localhost
[]
Query_time:
9.869362
Lock_time:
0.000035
Rows_sent:
1
Rows_examined:
6261774
SET
timestamp=1294388531;
select
count(*)
from
blog;
第一行:执行时间
第二行:执行用户
第三行(重要):
Query_time
SQL执行的时间,越长则越慢
Lock_time
在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间
Rows_sent
查询返回的行数
Rows_examined
查询检查的行数
最后
1、日志不能说明一切问题,知识表象,可能跟锁表、系统繁忙的偶发性有关,当然,如果某条SQL语句经常查询慢那基本可以判断是可以再次优化的。
2、不要开启log-queries-not-using-indexes没有索引查询记录功能,这个功能实际用处不大。就是记录SQL查询的时候,没有索引的通通记录。虽然索引对查询的速度有影响,但要看数据量大小。因为开启了这个功能以后,select
*
from
tab这样的查询也会被记录在日志中,很快日志文件就会被垃圾信息给充满,从而影响主要的查询慢日志记录的查看。
3、MySQL自带了mysqldumpslow工具用来分析slow
query日志,或者其它工具也可以,通过工具配合可以更好的分析。
怎么分析多台mysql 慢日志
一、MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。2,long_query_time当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。3,slow_query_log_file记录日志的文件名。4,log_queries_not_using_indexes这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。二、检测mysql中sql语句的效率的方法1、通过查询日志(1)、Windows下开启MySQL慢查询MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上代码如下log-slow-queries=F:/MySQL/log/mysqlslowquery。loglong_query_time=2(2)、Linux下启用MySQL慢查询MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上代码如下log-slow-queries=/data/mysqldata/slowquery。loglong_query_time=2说明log-slow-queries=F:/MySQL/log/mysqlslowquery。为慢查询日志存放的位置,一般这个目录要有MySQL的运行帐号的可写权限,一般都将这个目录设置为MySQL的数据存放目录;long_query_time=2中的2表示查询超过两秒才记录;2.showprocesslist命令SHOWPROCESSLIST显示哪些线程正在运行。您也可以使用mysqladminprocesslist语句得到此信息。各列的含义和用途:ID列一个标识,你要kill一个语句的时候很有用
开启慢查询日志 , 配置样例:
/etc/mysql/my.cnf
[mysqld]
log-slow-queries
在 my.cnf 配置文件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能生效。慢查询 日志将写入参数 DATADIR (数据目录:/var/lib/mysql)
指定的路径下,默认文件名是 host_name-slow.log 。
和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。下例中演示了慢查询日志的设置和读取过程。
1 )首先查询一下 long_query_time 的值 。
mysql show variables like 'long%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)
( 2 )为了方便测试,将修改慢查询时间为 5 秒。
mysql set long_query_time=1;
Query OK, 0 rows affected (0.02 sec)
以上操作只限于当前有效,关闭服务器得重新设置。下面的方法可直接写入my.cnf
log-slow-queries=/var/lib/mysql/slowquery.log
long_query_time=1