开发者社区> 像教授> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MySQL日志分析工具

简介:
+关注继续查看

MySQL的性能从查看日志开始。硬件配置低常常导致这样的问题,但事实上大多数情况并不在这里。某些“慢"SQL阻塞了其他语句的执行,优化查询是第一步需要做的。

    “工欲善其事必先利其器”,MySQL自身的一款mysqldumpslow 查询日志分析器,该工具不但陈旧,验证规范不准确。今天要说的是Percona 的工具pt-query-digest,它能够分析慢查询日志内容,生成查询报告,过滤,重放或传送一些查询语句至MySQL,PostgreSQL,memcached或者其他。

     基本语法:pt-query-digest [OPTION...] [FILE]

     pt-query-digest [OPTION...] [FILE]

     缺点: 对系统资源开销较大(可以将慢查询日志拷贝至其他地方分析)

     举例1(在测试库中进行)、

     pt-query-digest /usr/local/mysql3307/data/slow_my3307.log
# 120.6s user time, 1.4s system time, 59.63M rss, 103.21M vsz
# Current date: Fri Aug  3 12:21:26 2012
# Hostname: XXXX
# Files: /usr/local/mysql3307/data/slow_my3307.log
# Overall: 515.52k total, 240 unique, 0.12 QPS, 0.00x concurrency ________
# Time range: 2012-06-14 06:41:25 to 2012-08-03 12:21:26
# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= ======= ======= =======
# Exec time          4742s    64us     16s     9ms    40ms    35ms   287us
# Lock time            20s    13us    98ms    38us    49us   370us    23us
# Rows sent          5.22M       0   1.10k   10.62   51.63   54.93    0.99
# Rows examine       8.29G       0 101.66k  16.86k  97.04k  33.18k  964.41
# Query size        32.28M      24     930   65.66  107.34   35.79   34.95

部分解释如下:

第一行表示分析该日志所使用的时间。该文件中一共拥有515.52k慢查询(测试的情况稍稍多了点。。),其中有240个完全不同类型的查询,在该时间段内每秒处理的查询数量:0.12(关于区别完全不同的查询稍后讨论)

接下来是:

比较严重SQL的分析部分:

# Profile
# Rank Query ID           Response time   Calls  R/Call Apdx V/M   Item
# ==== ================== =============== ====== ====== ==== ===== =======
#    1 0xF32359E9A4679928 2680.8630 56.5% 116551 0.0230 1.00  0.05 SELECT user_bloods
#    2 0xB05F93CEB2DED5F5 1908.3559 40.2%  62714 0.0304 1.00  0.00 SELECT user_bloods
#    4 0x85E98D19B3A42237   28.8959  0.6%     12 2.4080 0.83 11.49 SELECT appfuse.titems
# MISC 0xMISC              123.5087  2.6% 336240 0.0004   NS   0.0 <237 ITEMS>

其中挑出最为严重的 4个SQL语句,(可以通过参数 --limit 进行设置)它所有语句响应时间总和,调用比例,查询类型等

接下来是单个语句的分析:

String:
# Databases    YYY
# Hosts
# Users        XXX
# Query_time distribution
#   1us
#  10us
# 100us  ################################################################
#   1ms
#  10ms
# 100ms
#    1s  ########################
#  10s+  ########

可以看到在 在数据库YYY中用户XX 利用该语句查询的响应时间分布图,10S+ 还是很多的。

最后是分析情况:

# Tables
#    SHOW TABLE STATUS FROM `YYY` LIKE 'titems'\G
#    SHOW CREATE TABLE `ZZZ`.`titems`\G
# EXPLAIN /*!50100 PARTITIONS*/
select * from `ZZZ`.`titems`  limit 0,1000\G

  # 号部分是分析步骤,最后语句可以再前面 加上 explain 进行复制,进一步分析。

举例二:

    --review 参数

    该参数可以讲分析结果保存在某个数据表中,这样我们可以为查询做出标记,并且当第二次加上 --review 时,如果存在相同的语句分析,就不会记录到数据表中,

表结构如下:

   pt-query-digest  -P 3307 -u root --password='XXXXXX' --review h=localhost,D=test,t=store --limit 5 /usr/local/mysql3307/data/slow_my3307.log 

    CREATE TABLE query_review (

   checksumBIGINTUNSIGNEDNOTNULLPRIMARYKEY,fingerprintTEXTNOTNULL,sampleTEXTNOTNULL,first_seenDATETIME,last_seenDATETIME,reviewed_byVARCHAR(20),reviewed_onDATETIME,commentsTEXT) 

   checksum 一个64位校验码对应于finigerprint

   举例:

      checksum: 16449492566044263938
fingerprint: select id from user_bloods where user_id = ? and monster_family_id = ? order by updated_at desc
     sample: select id from user_bloods where user_id = 48124 and monster_family_id = 2 order by updated_at desc
 first_seen: 2012-06-14 07:31:28
  last_seen: 2012-08-03 10:44:32
reviewed_by: NULL
reviewed_on: NULL
   comments: NULL

举例三:

  只收集:select 语句,并将其应用于其他的MySQLserver,并分析出耗时最长的SQL:

  pt-query-digest   /usr/local/mysql3307/data/slow_my3307.log --execute h=localhost -u root --password='mj20100913' --filter '$event->{fingerprint} =~ m/^select/'

(这个可以讲线上的 日志分析出来,并应用于测试的服务器上,模仿线上的真是环境)

举例四:

   将processlist 收集出来 并输出到其他文件:

    pt-query-digest --processlist h=localhost -u root --password='XXXXX' --print --no-report

(这个默认是每秒进行一次连接并记录,可设置,如果连接失败会等待1秒在继续连接)

所有参数 可以通过--help看到。

本文未详细解释参数信息,并未列出memcached 地址(详细看这里:http://code.google.com/p/maatkit/wiki/EventAttributes),有兴趣的话大家可以参考官方文档:http://www.percona.com/doc/percona-toolkit/2.1/pt-query-digest.html#cmdoption-pt-query-digest--interval






本文转自 位鹏飞 51CTO博客,原文链接http://blog.51cto.com/weipengfei/953075,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)
原文:【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)   1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.
4632 0
新手向: ECS搭建Java运行平台, 安装MySQL 以及Tomcat运行
阿里云搭建Java运行环境, 包括MySQL的安装, Tomcat的安装和运行, 以及部分问题解决, 适合新手.
3321 0
Windows 10下安装Mysql 5.7
mysql软件下载 mysql官方下载地址 01 02 03 04 mysql软件安装 05 06 07 08 09 10 ...
851 0
MySQL指令安装
MySQL指令安装 第一步:官网下载mysql压缩文件:https://dev.mysql.com/downloads/mysql/ 第二步:解压文件到 E:\mysql目录下 E:\mysql\mysql-5.
1143 0
Docker安装Mysql服务
拉取官方镜像 # docker pull mysql # docker inspect mysql | grep ''VERSION'' "GOSU_VERSION=1.
1223 0
运维CentOS7下mysql 5.7 下载并安装
打开https://dev.mysql.com/downloads/mysql/这个官网 [root@jiaxin-ceshi src]# wget https://cdn.mysql.com//Downloads/MySQL-5.
1447 0
Linux下yum安装MySQL
Linux下yum安装MySQL
9734 0
+关注
1338
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载