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 下生成命令文件:

[[email protected] 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机器

[[email protected] anemometer]# httpd -v

Server version: Apache/2.2.15 (Unix)

Server built:  Jul 18 2016 15:24:00

Php-5.5.38

[[email protected] 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

[[email protected] 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

[[email protected] html]#

一切正常,没有错误输出

到此配置完成。

下面是httpd.conf文件配置

2.5 httpd.conf文件配置

[[email protected] 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>

[[email protected]acti 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"[email protected]

select * from tab_user where phone =‘1371337%‘order by desc id limit 1,2

L [email protected]

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

生成的文件:

[[email protected] ~]# 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‘[email protected]&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)就可以指定刷新的频率,那么就有如下命令

[[email protected] ~]# 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一块使用

[[email protected]~]# mysqladmin -uroot -p‘[email protected]&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‘[email protected]&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"

[[email protected] ~]# mysqladmin -uroot-p‘[email protected]&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;\

}‘

更详细的写法使用

[[email protected] ~]# mysqladmin -P3306 -uroot -p‘[email protected]&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参数

检查数据库是否存活

[[email protected] ~]# 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

时间: 2024-10-20 20:30:29

mysql慢查询分析工具和分析方法的相关文章

mysql慢查询日志切割,日志分析

#!/usr/bin/env python #coding:utf8 import os,sys import datetime,shutil,subprocess from config.config import slow_config class cut_mysql(object): mysql_user,mysql_pass,date_day,slow_log_name,slow_log_path,mysqlsla_log_name,mysqldumpslow_log_name,new_

【转载】常用 Java 静态代码分析工具的分析与比较

摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团

常用 Java 静态代码分析工具的分析与比较

转载自: http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代

[转载] 常用 Java 静态代码分析工具的分析与比较

转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺

MySQL连接查询流程源码分析

初始化 main |-mysqld |-my_init // 初始话线程变量,互斥量 |-load_defaults // 获取配置 |-init_common_variables // 初始化变量 |-init_server_components // 初始化插件 | |-plugin_init | | |-plugin_initialize | |-initialize_storage_engine |-network_init // 监听网络 |-grant_init |-servers_

【MySQL】查询时强制区分大小写的方法

MySQL默认的查询也不区分大小写.但作为用户信息,一旦用户名重复,又会浪费很多资源.再者,李逵.李鬼的多起来,侦辨起来很困难.要做到这一点,要么在建表时,明确大小写敏感(字段明确大小写敏感) sql : create table table_name( name varchar (20) binary ); 查询 SELECT * FROM U WHERE binary name LIKE 'a%'; SELECT * FROM U WHERE binary name LIKE 'A%'; 仅

mysql慢查询日志分析工具mysqlsla

一.介绍    mysqlsla是一个分析mysql慢日志的工具,可以分析出慢查询的原因,包括执行某条sql出现的次数及在slow log数据的百分比.执行时间.等待销的时间等. 公司的数据库有很多慢查询日志,导致的系统的负载很高,而mysql慢查询日志文件内容格式不太好看,经推荐使用mysqlsla:使用方便,操作简单. 二.安装mysqlsla 系统环境 CentOS release 6.6 (Final) 2.6.32-504.el6.x86_64 官网已经不能下载,所需要的文件已在百度云

VS2010自带的性能分析工具分析.NET程序的性能

这篇博文给大家分享的是,如何使用VS自带的性能分析工具来分析我们编写的.NET程序,一边找出程序性能的瓶颈,改善代码的质量.在实际开发中,性能真的很重要,往往决定一个产品的生死~良好的用户体验的基础之一也是程序要有好的性能~ 下面以一个大家熟悉比较极端的例子,来说明编写代码时考虑性能的重要性.这里DebugLZQ用的是10.0版本的VS. 示例程序代码如下: using System;using System.Collections.Generic;using System.Linq;using

KRPano资源分析工具使用说明(KRPano XML/JS解密 切片图批量下载 球面图还原 加密混淆JS还原美化)

软件交流群:571171251(软件在群内提供) krpano技术交流群:551278936(软件在群内提供) 软件功能介绍 KRPano资源分析工具具有以下特性: 1.分析保存网站资源,包括查看网站资源树形(平铺)结构,单个资源文件实时打开,整站资源批量保存,资源过滤筛选保存等功能 2.一键解密被KRPano加密的XML文件 3.一键解密被KRPano加密后的JS文件 4.解密/美化被加密或混淆的JS文件 5.KRPano网站切片图批量下载 6.KRPano切片图一键还原球面图 7.批量下载多