mysql慢查询分析工具和分析方法
1.mysql慢查询分析工具
1.参考文档:
http://www.ttlsa.com/mysql/analyse-slow-query-log-using-anemometer/
http://isadba.com/?p=655
官方文档:
https://github.com/box/Anemometer
数据库管理员一般是用percona的toolkit工具来分析MySQL慢查询记录,但是不够直观。
下面介绍一款比较直观的工具来统计分析MySQL慢查询记录anemometer。
在使用之前需要安装percona的toolkit工具,anemometer提供web界面。
anemometer介绍参见:https://github.com/box/Anemometer/wiki
1.1安装-perconatoolkit工具
wgethttps://www.percona.com/downloads/percona-toolkit/2.2.11/RPM/percona-toolkit-2.2.11-1.noarch.rpm
yum install perl-IO-Socket-SSL perl-DBD-MySQLperl-Time-HiRes perl-DBI -y
rpm -ivh percona-toolkit-2.2.11-1.noarch.rpm
会在/usr/bin 下生成命令文件:
[root@cacti mysqld]# ls /usr/bin/pt-query-digest/usr/bin/pt-visual-explain /usr/bin/pt-variable-advisor
/usr/bin/pt-query-digest /usr/bin/pt-variable-advisor /usr/bin/pt-visual-explain
1.2安装测试环境介绍:
服务器221.195.1.245机器
[root@cacti anemometer]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Jul 18 2016 15:24:00
Php-5.5.38
[root@cacti anemometer]# mysql -V
mysql Ver14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
mysql 要开启慢查询日志
2.安装步骤:
2.1.下载源码:
git clone git://github.com/box/Anemometer.gitanemometer
或者是
git clone https://github.com/box/Anemometer.gitanemometer
cd anemometer
2.2
生成存放慢日志的库表
导入表结构在
mysql
上生成两个表来存放慢查询日志的数据
mysql -uroot -p </var/www/html/anemometer/install.sql
mysql> grant ALL ON slow_query_log.* to'anemometer'@'localhost' IDENTIFIED BY 'wujianwei';
mysql> grant SELECT ON *.* to'anemometer'@'localhost' IDENTIFIED BY 'wujianwei';
mysql> use slow_query_log;show tables;
Database changed
+-----------------------------+
| Tables_in_slow_query_log |
+-----------------------------+
| global_query_review |
| global_query_review_history |
+-----------------------------+
2 rows in set (0.00 sec)
2.3拷贝链接数据库的配置文件
cd anemometer/conf
cp sample.config.inc.php config.inc.php
2.4. 配置anemometer
参考这个文档:http://www.ttlsa.com/mysql/analyse-slow-query-log-using-anemometer/配置
cat -n/var/www/html/anemometer/conf/config.inc.php|sed -n '63,74p;248,252p;284,289p'
63 $conf['datasources']['localhost_history'] =array(
64 'host' => 'localhost',
65 'port' => 3306,
66 'db' => 'slow_query_log',
67 'user' => 'anemometer',
68 'password' => 'wujianwei',
69 'tables' => array(
70 'global_query_review'=> 'fact',
71 'global_query_review_history'=> 'dimension'
72 ),
73 'source_type' =>'slow_query_log'
74 );
248 $conf['plugins'] = array(
249
250 'visual_explain' =>'/usr/bin/pt-visual-explain',
251 # perconatoolkit has removed query advisor
252 'query_advisor' => '/usr/bin/pt-query-advisor',
284 $conn['user'] ='anemometer';
285 $conn['password'] ='wujianwei';
286
287 return $conn;
288 },
289 );
测试成功的配置文件:
2.5 存放获取到的慢查询日志数据到慢查询库表中
注意:
存放慢查询数据到慢查询库表中需要注意perconatoolkit工具的版本号,版本不通,采用pt-query-digest获取慢查询日志的参数是不一样的。
参考官网说明:
Put some data in the DB
Next, grab that slow query log file you have(mine's called "slow.log"!), and run pt-query-digest on it: NOTE: I'm using a BASH 3.0 shellhere on my MySQL database server! This is so the "$HOSTNAME" variableproperly replaces with "db.example.com")
For pt-query-digest version < 2.2
$ pt-query-digest --user=anemometer --password=superSecurePass \
--reviewh=db.example.com,D=slow_query_log,t=global_query_review \
--review-historyh=db.example.com,D=slow_query_log,t=global_query_review_history \
--no-report --limit=0% \
--filter="\$event->{Bytes} = length(\$event->{arg}) and\$event->{hostname}=\"$HOSTNAME\"" \
/var/lib/mysql/db.example.com-slow.log
For pt-query-digest version >= 2.2
$ pt-query-digest --user=anemometer --password=superSecurePass \
--reviewh=db.example.com,D=slow_query_log,t=global_query_review \
--historyh=db.example.com,D=slow_query_log,t=global_query_review_history \
--no-report --limit=0% \
--filter=" \$event->{Bytes} = length(\$event->{arg}) and\$event->{hostname}=\"$HOSTNAME\"" \
/var/lib/mysql/db.example.com-slow.log
下面是测试采用的pt-query-digest参数来获取慢日志数据:
pt-query-digest --user=anemometer--password=wujianwei --review h=localhost,D=slow_query_log,t=global_query_review--history h=localhost,D=slow_query_log,t=global_query_review_history--no-report --limit=0% --filter=" \$event->{Bytes} =length(\$event->{arg}) and\$event->{hostname}=\"$HOSTNAME\"" /var/run/mysqld/slowquery_2017051617.log
[root@cacti html]# pt-query-digest--user=anemometer --password=wujianwei --reviewh=localhost,D=slow_query_log,t=global_query_review --historyh=localhost,D=slow_query_log,t=global_query_review_history --no-report--limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and\$event->{hostname}=\"$HOSTNAME\""/var/run/mysqld/slowquery_2017051617.log
[root@cacti html]#
一切正常,没有错误输出
到此配置完成。
下面是httpd.conf文件配置
2.5 httpd.conf文件配置
[root@cacti mysqld]# tail -7/etc/httpd/conf/httpd.conf
Listen 12336
NameVirtualHost *:12336
<VirtualHost *:12336>
ServerName 221.15.10.25:12336
DocumentRoot "/var/www/html/anemometer"
</VirtualHost>
[root@cacti mysqld]# /etc/init.d/httpdrestart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
2.6浏览器显示:
2.tcpdump慢查询分析方法
tcpdump -s 0 -l -w - dst xxx.xxx.xxx.xxxand port 3306 |strings
desc tab_user3L Y
("}@
v"~@
select * from tab_user where phone ='1371337%'order by desc id limit 1,2
L Y@
select * from tab_user where phone =1371337% orderby desc id limit 1,2
select * from tab_user where phone =1371337% orderby desc id limit 20
tcpdump -s 65535 -x -nn -q -tttt -i any-c 1000 port 3306 > mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt1
生成的文件:
[root@www1 ~]# cat mysql.tcp.txt1
# 490ms user time, 10ms system time, 23.08M rss,198.90M vsz
# Current date: Sat May 20 22:42:51 2017
# Hostname: www1.2166.com
# Files: mysql.tcp.txt
# Overall: 333 total, 1 unique, 20.63 QPS, 0.01xconcurrency _____________
# Time range: 2017-05-20 22:37:22.575782 to22:37:38.720840
# Attribute total min max avg 95% stddev median
# ============ ======= ======= ======= ======= ======= ======= =======
# Exec time 100ms 96us 1ms 299us 384us 86us 287us
# Rows affecte 333 1 1 1 1 0 1
# Query size 16.58k 51 51 51 51 0 51
# Warning coun 0 0 0 0 0 0 0
# Profile
# Rank Query ID Response time Calls R/Call V/M Item
# ==== ================== ============= =========== ===== ===============
# 10x6C7F3DF62B32E3F4 0.0996 100.0% 3330.0003 0.00 UPDATE dr_stats
# Query 1: 20.63 QPS, 0.01x concurrency, ID0x6C7F3DF62B32E3F4 at byte 248845
# This item is included in the report because itmatches --limit.
# Scores: V/M = 0.00
# Time range: 2017-05-20 22:37:22.575782 to22:37:38.720840
# Attribute pct total min max avg 95% stddev median
# ============ === ======= ======= ======= ============== ======= =======
# Count 100 333
# Exec time 100 100ms 96us 1ms 299us 384us 86us 287us
# Rows affecte 100 333 1 1 1 1 0 1
# Query size 100 16.58k 51 51 51 51 0 51
# Warning coun 0 0 0 0 0 0 0 0
# String:
# Hosts 127.0.0.1
# Query_time distribution
# 1us
# 10us #
# 100us ################################################################
# 1ms #
# 10ms
# 100ms
# 1s
# 10s+
# Tables
# SHOWTABLE STATUS LIKE 'dr_stats'\G
# SHOWCREATE TABLE `dr_stats`\G
UPDATE `dr_stats` SET `sync`=1 WHERE id='14820620'\G
# Converted for EXPLAIN
# EXPLAIN /*!50100 PARTITIONS*/
select `sync`=1 from `dr_stats` where id='14820620' \G
tcpdump -s 65535 -x -nn -q -tttt -i any-c 10000 port 3306 > mysql.tcp.txt
3.mysql性能分析工具
3.1mysqladmin
1.debug 信息输出
mysqladmin -uroot -p'w3@TG&45BvD345' -h127.0.0.1 -P3306 debug
输出信息到mysql的errorlog日志文件内
2. extended-status
可以获得所有MySQL性能指标,即show global status的输出,因为多数这些指标都是累计值,如果想了解当前的状态,则需要进行一次差值计算,这就是mysqladmin extended-status的一个额外功能,非常实用。
默认的,使用extended-status,看到也是累计值,但是,加上参数-r(--relative),就可以看到各个指标的差值,配合参数-i(--sleep)就可以指定刷新的频率,那么就有如下命令
[root@localhost ~]# mysqladmin -uroot -p'erG&Bveret'-h 127.0.0.1 -P3306 -r -i 1 extended-status|grep Handler_commit
| Handler_commit | 517760180 |
| Handler_commit | 222 |
| Handler_commit | 149 |
| Handler_commit | 194 |
| Handler_commit | 203 |
| Handler_commit | 149 |
结合grep一块使用
[root@localhost~]# mysqladmin -uroot -p'w3@TG&BvDOpQ#X' -h 127.0.0.1 -P3306 -r -i 1extended-status|egrep "Handler_commit|Bytes_received| Bytes_sent"
| Bytes_received | 113594008546 |
| Bytes_sent |270109905767 |
| Handler_commit | 517839061 |
| Bytes_received | 33551 |
| Bytes_sent | 73427 |
| Handler_commit | 165 |
| Bytes_received | 26124 |
| Bytes_sent | 62250 |
| Handler_commit | 133 |
| Bytes_received | 36482 |
| Bytes_sent | 104021 |
简单配合awk使用
线上一般参看mysql的参数:
mysqladmin -uroot -p'w3@TG&BvDOpQ#X' -h127.0.0.1 -P3306 -r -i 1 extended-status|egrep "Questions|Queries|Innodb_rows|Com_select|Com_insert |Com_update |Com_delete |Innodb_buffer_pool_read_requests"
[root@localhost ~]# mysqladmin -uroot-p'w3@TG&BvX' -h127.0.0.1 -P3306 -r -i 1 ext |awk -F"|" '{\
if($2 ~/Variable_name/){\
print" <------------- " strftime("%H:%M:%S") " ------------->";\
}\
if($2 ~/Questions|Queries|Innodb_rows|Com_select |Com_insert |Com_update |Com_delete|Innodb_buffer_pool_read_requests/)\
print $2$3;\
}'
更详细的写法使用
[root@localhost ~]# mysqladmin -P3306 -uroot -p'w3@erTG&BvD'-h127.0.0.1 -r -i 1 ext |awk -F"|" "BEGIN{ count=0; }"'{if($2 ~ /Variable_name/ && ++count == 1){\
print"----------|---------|--- MySQL Command Status --|----- Innodb rowoperation ----|-- Buffer Pool Read --";\
print"---Time---|---QPS---|select insert update delete| read inserted updated deleted| logical physical";\
}\
else if ($2 ~ /Queries/){queries=$3;}\
else if ($2 ~ /Com_select /){com_select=$3;}\
else if ($2 ~ /Com_insert /){com_insert=$3;}\
else if ($2 ~ /Com_update /){com_update=$3;}\
else if ($2 ~ /Com_delete /){com_delete=$3;}\
else if ($2 ~/Innodb_rows_read/){innodb_rows_read=$3;}\
else if ($2 ~/Innodb_rows_deleted/){innodb_rows_deleted=$3;}\
else if ($2 ~/Innodb_rows_inserted/){innodb_rows_inserted=$3;}\
else if ($2 ~/Innodb_rows_updated/){innodb_rows_updated=$3;}\
else if ($2 ~/Innodb_buffer_pool_read_requests/){innodb_lor=$3;}\
else if ($2 ~/Innodb_buffer_pool_reads/){innodb_phr=$3;}\
else if ($2 ~ /Uptime / && count >= 2){\
printf(" %s |%9d",strftime("%H:%M:%S"),queries);\
printf("|%6d %6d %6d%6d",com_select,com_insert,com_update,com_delete);\
printf("|%6d %8d %7d%7d",innodb_rows_read,innodb_rows_inserted,innodb_rows_updated,innodb_rows_deleted);\
printf("|%10d %11d\n",innodb_lor,innodb_phr);\
}}'
输出代码:
----------|---------|---MySQL Command Status --|----- Innodb row operation ----|-- Buffer Pool Read --
---Time---|---QPS---|selectinsert update delete| read insertedupdated deleted| logical physical
18:30:54 | 499| 68 64 14 0| 54 64 14 0| 1618 3
18:30:55 | 467| 64 54 13 0| 53 54 13 0| 1674 2
18:30:56 | 457| 57 66 13 0| 44 66 13 0| 1514 0
18:30:57 | 545| 79 51 15 0| 64 51 15 0| 1602 2
18:30:58 | 493| 70 47 22 0| 61 47 22 0| 1525 4
18:30:59 | 287| 35 43 8 0| 31 43 8 0| 972 0
18:31:00 | 297| 41 29 10 0| 38 29 10 0| 908 1
18:31:01 | 445| 63 46 13 0| 52 46 13 0| 1354 0
18:31:02 | 526| 73 46 24 0| 86 46 24 0| 1649 8
18:31:02 | 500| 69 45 19 0| 80 45 19 0| 1584 1
参考文档:
http://www.orczhou.com/index.php/2014/03/some-tricky-about-mysqladmin-extended-status/
3.ping参数
检查数据库是否存活
[root@localhost ~]# mysqladmin -uroot -p ping
Enter password:
mysqld is alive
4.设置mysql超级oot密码
Mysqladmin –uroot –p
5.修改mysql的root密码
mysqladmin -u root-poldpassword password 'newpassword'
6.processlist
显示服务器所有运行的进程:
-i参数意思是每隔几秒运行一次
mysqladmin -uroot -p -i 4 processlist
7. mysqladmin执行kill进程
mysqladmin-uroot -p kill idnum
8.同时执行多个命令
mysqladmin -u root -pprocess status version
参考资料:http://blog.csdn.net/radkitty/article/details/4627400
.mysql参数详解
http://blog.csdn.net/liehuo123/article/details/26052159
转载于:https://blog.51cto.com/wujianwei/1941711
mysql慢查询分析工具和分析方法相关推荐
- MySQL慢查询与执行计划分析
MySQL慢查询与执行计划分析 慢查询分析 执行计划分析 表结构分析 慢查询分析 查看是否开启慢日志: show variables like 'slow_query_log%'; +-------- ...
- MySQL数据库查询时间段的两种方法
MySQL数据库查询时间段的两种方法: 1. SELECT* FROMgroup_details model WHEREmodel.create_time BETWEEN TO_DAYS ( '201 ...
- 软文推荐:常用 Java 静态代码分析工具的分析与比较
http://www.uml.org.cn/j2ee/201107114.asp 常用 Java 静态代码分析工具的分析与比较 作者:赵卓 , 发布于2011-07-11 , IBM 简介: 本文首先 ...
- 分享快递批量查询高手工具,分析出问题原因或延误单号,赶紧收藏
快递查询我们去官网查询即可,但是要查询大量快递单号查询呢?这样就需要批量的查询工具了,小编这次就为大家推荐快递批量查询高手工具,如果分析出问题件或延误单号,有需要的朋友可以一起来操作试试. 1.我们先 ...
- MySQL 慢查询日志工具之pt-query-digest
1. 工具简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tc ...
- 静态代码分析工具列表分析---代码分析工具列表(30款工具)
本文是一个静态代码分析工具的清单,共有30个工具.包括4个.NET工具.2个Ada工具.7个C++工具.4个Java工具.2个JavaScript工具.1个Opa工具.2个Packaging工具.3个 ...
- java jstack 分析工具_JVM分析工具——jstack实践
JVM分析工具--jstack实践 一.不是万能的jstack 企业级的Java程序中,java程序出现性能低下甚至直接崩溃时,就不能像解决业务bug那样,从行为表现上来修复问题了.性能问题一般是jv ...
- MySQL给查询结果添加行号的方法及应用
1.给查询结果添加行号的方法 方法1: SET @rownum:=0; -- 注意:SQL语句中":="表示赋值,"="表示比较,"@"表示 ...
- Callgrind--函数调用分析工具以及可视化方法
生成分析文件 命令行运行: valgrind --tool=callgrind ./palmGateMachine 检测完毕之后会生成一个文件callgrind.out.26805, 后面的数字其实是 ...
最新文章
- Python3中参数*args和**kwargs介绍
- 医疗行业的AI应用,要避免“垃圾进、垃圾出”
- 我的Debian 8.0 (jessie)配置文档
- 网络编程- 解决黏包现象方案一(六)
- 蓝桥杯 最长公共子序列
- C++ Primer 5th笔记(chap 13 拷贝控制)阻止拷贝
- 凯兑换系统服务器角色,王者荣耀新英雄凯怎么兑换
- java jsoup解析_3使用Jsoup解析Java中HTML文件的示例
- 谷歌眼镜Mirror app开发之简单新闻浏览页面
- moead算法流程步骤_匈牙利算法原理与实现
- Atlas客户端类库、控件介绍(2)
- 上海项目危机经历与感想
- ListView优化的
- 网络工程师必备工具之超级终端
- POS收单地区代码表(2015年3月版)
- 智慧泵房泵站无线远程监控检测系统方案
- linux清理根目录空间,如何快速清理Linux磁盘空间
- 360极速浏览器如何设置ie8兼容模式
- 想要穷游北京?这些湖光山色的地方人少还景美!
- 思科 接入点 本地转发_H3C无线AP本地转发配置教程2016
热门文章
- HDU - 2586 How far away ?(离线Tarjan算法)
- python split()函数
- [导入]全国哀悼日 网站变灰装(附代码)[转]
- vscode php函数提醒,解决vscode格式保存后出现的问题
- knn的python代码_详细的的KNN代码——python实现
- Python 序列基本操作
- json在java中的使用_在Java中使用JSON
- php 操件文件指定编码,(PHP帮助)如果文件中存在特定编号,请执行此操作
- python set函数原理,Python之set详解
- python爬虫面试自我介绍范文_走过路过不容错过,Python爬虫面试总结