• MySQL慢查询日志工具mysqlsla


    mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览慢查询日志做为一项日常工作,直接阅读mysql生成的慢查询日志就有可能比较低效了。

    除了操作系统命令直接查看slowlog外,mysql自己也提供了一个阅读slowlog的命令行工具:mysqldumpslow,该命令行提供了一定的分析汇总功能,可以将多个类似的SQL语句抽象显示成一个,不过功能还是有些简陋,除此之外,还有不少的第三方工具,可用于分析mysql慢查询日志,其中,三思用了一阵子mysqlsla,感觉简单又易用。

    mysqlsla不仅仅可用来处理慢查询日志,也可以用来分析其它日志比如二进制日志,普通查询日志等等,其对sql语句的抽象功能非常实用,参数设定简练易用,很好上手。

    当前mysqlsla的最新版本为2.03,可以下拉到官网下载,地址如下:
    http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz

    mysqlsla是perl编写的脚本,运行mysqlsla需要perl-DBI和per-DBD-Mysql两模块的支持,因此在运行mysqlsla前需要首先安装DBI模块和相应的数据库DBD驱动,而默认情况下linux不安装这两个模块,需要自行下载安装,下载地址如下:
    http://www.cpan.org/modules/by-module/DBI/DBI-1.608.tar.gz
    http://www.cpan.org/modules/by-module/DBD/DBD-mysql-4.011.tar.gz

    DBI的编译安装步骤如下:
    # tar xvfz DBI-1.608.tar.gz
    # cd DBI-1.608
    # perl Makefile.PL
    # make
    # make test
    # make install

    DBD-mysql驱动模块的编译安装步骤如下:
    # tar xvfz DBD-mysql-4.011.tar.gz
    # cd DBD-mysql-4.011
    # perl Makefile.PL
    # make
    # make install

    需要注意,在安装DBD-mysql时需要用到mysql_config,该命令包含在MySQL-devel安装包中,如果当前系统中没有安装该软件,需要首先安装MySQL-devel,否则DBD-mysql在编译过程中会出现错误。

    准备工作完全,就可以安装mysqlsla了,编译安装步骤如下:
    # tar xvfz mysqlsla-2.03.tar.gz 
    # cd mysqlsla-2.03
    # perl Makefile.PL
    # make
    # make install

    mysqlsla命令默认会保存在/usr/bin路径下,通常可在任意路径下直接执行。对慢查询日志文件的分析,最简化的调用方式如下:
    # mysqlsla -lt slow [SlowLogFilePath] > [ResultFilePath]

    使用方法:

    使用mysqlsla分析MySQL慢查询日志

    复制代码
    复制代码
    #查询记录最多的20个sql语句,并写到select.log中去
    mysqlsla -lt slow --sort t_sum --top 20  /data/mysql/127-slow.log >/tmp/select.log
    #统计慢查询文件为/data/mysql/127-slow.log的所有select的慢查询sql,并显示执行时间最长的100条sql,并写到sql_select.log中去
    mysqlsla -lt slow  -sf "+select" -top 100  /data/mysql/127-slow.log >/tmp/sql_select.log
    #统计慢查询文件为/data/mysql/127-slow.log的数据库为mydata的所有select和update的慢查询sql,并查询次数最多的100条sql,并写到sql_num.sql中去
    mysqlsla -lt slow  -sf "+select,update" -top 100 -sort c_sum  -db mydata /data/mysql/127-slow.log >/tmp/sql_num.log
    复制代码
    复制代码

    比如说,原始慢日志中有一堆的下列语句:
    # Time: 110417  0:00:09
    User@Host: junsansi[junsansi] @  [192.168.1.27]
    # Query_time: 3  Lock_time: 0  Rows_sent: 1  Rows_examined: 17600
    select min(DOC_HIS_ID) AS DOC_HIS_ID from t_******** where DOC_HIS_ISTEAMMATE=1 and DOC_HIS_EDITOR_USER_ID_ENCRYPT='nfEACAwQEW1MICAN2';
    User@Host: junsansi[junsansi] @  [192.168.1.27]
    # Query_time: 4  Lock_time: 0  Rows_sent: 1  Rows_examined: 17600
    select min(DOC_HIS_ID) AS DOC_HIS_ID from t_******** where DOC_HIS_ISTEAMMATE=1 and DOC_HIS_EDITOR_USER_ID_ENCRYPT='nfEACAwQEW2MICAN2';
    User@Host: jss[junsansi] @  [192.168.1.26]
    # Query_time: 4  Lock_time: 0  Rows_sent: 1  Rows_examined: 17600
    select min(DOC_HIS_ID) AS DOC_HIS_ID from t_******** where DOC_HIS_ISTEAMMATE=1 and DOC_HIS_EDITOR_USER_ID_ENCRYPT='nfEACAwQEW3MICAN2';
    User@Host: junsansi[junsansi] @  [192.168.1.27]
    # Query_time: 3  Lock_time: 0  Rows_sent: 1  Rows_examined: 17600
    select min(DOC_HIS_ID) AS DOC_HIS_ID from t_******** where DOC_HIS_ISTEAMMATE=1 and DOC_HIS_EDITOR_USER_ID_ENCRYPT='nfEACAwQEW4MICAN2';
    User@Host: jss[junsansi] @  [192.168.1.26]
    # Query_time: 5  Lock_time: 0  Rows_sent: 1  Rows_examined: 17600
    select min(DOC_HIS_ID) AS DOC_HIS_ID from t_******** where DOC_HIS_ISTEAMMATE=1 and DOC_HIS_EDITOR_USER_ID_ENCRYPT='nfEACAwQEW5MICAN2';
    ....................
    ....................

    直接阅读的操作体验很不好,使用mysqlsla处理后,结果呈现如下:
    Count         : 23  (8.52%)
    Time          : 102 s total, 4.434783 s avg, 3 s to 7 s max  (6.79%)
      95% of Time : 88 s total, 4.190476 s avg, 3 s to 6 s max
    Lock Time (s) : 0 total, 0 avg, 0 to 0 max  (0.00%)
      95% of Lock : 0 total, 0 avg, 0 to 0 max
    Rows sent     : 1 avg, 1 to 1 max  (0.02%)
    Rows examined : 11.53k avg, 5.70k to 17.60k max  (1.07%)
    Database      : jssdb
    Users         : 
            junsansi@ 192.168.1.27 : 86.96% (20) of query, 11.11% (30) of all users
            jss@ 192.168.1.26 : 13.04% (3) of query, 2.96% (8) of all users

    Query abstract:
    SELECT MIN(doc_his_id) AS doc_his_id FROM t_******** WHERE doc_his_isteammate=N AND doc_his_editor_user_id_encrypt='S';

    Query sample:
    select min(DOC_HIS_ID) AS DOC_HIS_ID from t_******** where DOC_HIS_ISTEAMMATE=1 and DOC_HIS_EDITOR_USER_ID_ENCRYPT='nfEACAwQEW2MICAN2';

    在上述结果中,语句的执行情况(执行次数,对象信息,查询记录量,时间开销,来源统计)等信息一目了然,比较便于DBA进一步分析了。

    原文:http://blog.itpub.net/7607759/viewspace-692828/

  • 相关阅读:
    Apple Magic Trackpad All In One
    git tag All In One
    Python 字符串插值 All In One
    Pycharm 如何自定义新建的 Python 文件的注释模版 All in One
    How to Create a New File on Mac with Finder All In One
    Python & PEP 8 & Style Guide All In One
    python 中(序列)内置函数enumerate
    c语言中枚举类型
    c语言中利用函数递归求阶乘
    linux 中sed命令如何删除第一列和最后一列
  • 原文地址:https://www.cnblogs.com/zz-tt/p/6654930.html
Copyright © 2020-2023  润新知