zoukankan      html  css  js  c++  java
  • mysql 慢日志分析

    mysql 调优首先需要找到那些有问题的SQL语句。

    怎么找到这些语句呢?

    mysql 提供了很方便的功能。

    1.慢日志

    在my.cnf 文件中,增加如下配置

    log-error                      = /var/lib/mysql/mysql-error.log

    #记录没有索引使用的查询。

    log-queries-not-using-indexes  = 1

    #记录慢查询

    slow-query-log                 = 1

    #慢查询日志

    slow-query-log-file            = /var/lib/mysql/mysql-slow.log

    slow-query-log :启用慢日志

    log-queries-not-using-indexes :没有使用索引的查询

    slow-query-log-file :日志路径

    当服务器出现性能时,日志就会记录下来。

    2.分析慢日志

    有了慢日志,我们就可以使用这个日志进行分析,找出有问题的SQL语句。

    分析工具可以使用:

    https://www.percona.com/downloads/percona-toolkit/3.0.13/binary/redhat/7/x86_64/percona-toolkit-3.0.13-1.el7.x86_64.rpm

    下载后安装

    rpm -ivh percona-toolkit-3.0.13-1.el7.x86_64.rpm

    安装后就可以进行使用了

    pt-query-digest --limit 20  mysql-slow.log >result.log

    这个命令的意思是分析慢日志,并且会将分析结果记录到 result.log 文件中。

    # 35.4s user time, 90ms system time, 26.54M rss, 220.85M vsz
    # Current date: Thu Apr 25 14:44:54 2019
    # Hostname: localhost.localdomain
    # Files: mysql-slow.log
    # Overall: 85.73k total, 11 unique, 30.61 QPS, 0.00x concurrency _________
    # Time range: 2019-04-25T06:18:19 to 2019-04-25T07:05:00
    # Attribute          total     min     max     avg     95%  stddev  median
    # ============     ======= ======= ======= ======= ======= ======= =======
    # Exec time            10s    68us    24ms   116us   167us    95us   103us
    # Lock time             4s    21us     4ms    44us    69us    32us    38us
    # Rows sent         83.75k       0      24    1.00    0.99    0.08    0.99
    # Rows examine     586.61k       0      48    7.01    6.98    0.54    6.98
    # Query size         5.34M      46     435   65.32   80.10   12.29   54.21
    
    # Profile
    # Rank Query ID                           Response time Calls R/Call V/M  
    # ==== ================================== ============= ===== ====== =====
    #    1 0xB717B245D9B4D6CF8F79C4C320FFEC0C  6.2929 62.9% 57228 0.0001  0.00 SELECT os_rel_type
    #    2 0x5F211D31CFFA376C13F39992DAE2394A  3.6963 36.9% 28453 0.0001  0.00 SELECT os_rel_type
    #    3 0xE0F7C7EEB5446ECBF9C66FF0A1B4E8D6  0.0056  0.1%    15 0.0004  0.00 SELECT BPM_NODE_SET
    #    4 0x7B35F1202DF2724043EFB10A443E25A1  0.0043  0.0%    15 0.0003  0.00 SELECT bpm_form_view
    #    5 0x19E0ECF6F83257951B93561BB55257C7  0.0025  0.0%     5 0.0005  0.00 SELECT SYS_PROPERTIES
    #    6 0x83A81E68FE6CCB29329B3D8C6F2DD7B9  0.0022  0.0%     1 0.0022  0.00 SELECT information_schema.PARTITIONS
    #    7 0x7598123F1F2AFD056EBD09352AA28815  0.0021  0.0%     4 0.0005  0.00 SELECT sys_datasource_def
    #    8 0x6C4E656EF7596EB3232AC868B24BD543  0.0017  0.0%     6 0.0003  0.00 SELECT SYS_INST
    #    9 0x2A9FB8408CDA668DDD37078754092B47  0.0012  0.0%     4 0.0003  0.00 SELECT MI_DB_ID
    #   10 0x951BF5C783033884B41893D8832E1E73  0.0007  0.0%     1 0.0007  0.00 SELECT information_schema.columns
    #   11 0x7B8A1218880310FF773B6C94685844F4  0.0003  0.0%     1 0.0003  0.00 SELECT information_schema.triggers

    我们在这里影响性能的就是 OS_REL_TYPE表。

    select * from os_rel_type where KEY_='GROUP-USER-BELONG'G

    # Query 2: 10.16 QPS, 0.00x concurrency, ID 0x5F211D31CFFA376C13F39992DAE2394A at byte 21216778
    # This item is included in the report because it matches --limit.
    # Scores: V/M = 0.00
    # Time range: 2019-04-25T06:18:20 to 2019-04-25T07:05:00
    # Attribute pct total min max avg 95% stddev median
    # ============ === ======= ======= ======= ======= ======= ======= =======
    # Count 33 28453
    # Exec time 36 4s 84us 3ms 129us 176us 44us 119us
    # Lock time 39 2s 31us 3ms 53us 76us 32us 47us
    # Rows sent 33 27.79k 1 1 1 1 0 1
    # Rows examine 33 194.50k 7 7 7 7 0 7
    # Query size 42 2.28M 84 84 84 84 0 84

    解释

    Exec time :执行时间

    Lock time :锁定时间

    Rows sent :返回的记录数

    Rows examine :扫描过的记录数,我们可以看到

    这返回的数据和扫描的记录差的很大,所以我们可以通过创建索引。

    Query size:查询语句的字符数

    如果返回的记录数和扫描的记录数相差很远,那么就需要想办法创建索引了。

  • 相关阅读:
    java的装箱和拆箱详解
    java语法基础
    java变量与内存深入了解
    java的配置环境简介
    Python脚本--利用运算符重载简化MongoDB的命令
    Python多线程编程,线程锁
    Python多进程,同步互斥,信号量,锁补充上一篇文章
    Python多进程编程及多进程间的通信,数据传输
    Jmeter深度学习第一天——简单请求、带header请求、返回值乱码问题
    JAVA Spring工程一些配置问题的解决
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/10771673.html
Copyright © 2011-2022 走看看