• MySQL监控


    Mysql 监控
    mysql大多数问题出现在SQL语句和索引上。

    一、慢查询日志分析

    show variables like '%slow%'     /*查看是否开启了慢查询日志*/
    set @@global.slow_query_log = ON    /*开启全局慢查询日志,重启mysql失效*/

    如果想重启之后有效,需要修改mysql的配置文件my.cnf。在my.cnf的最后添加上:

    1 slow_query_log      //开启慢查询日志
    2 slow_query_log_file=/usr/local/mysql/data/zhoucentos-slow.log //日志的位置
    3 long_query_time=0.1     //设定时间为0.1秒,如果查询时间大于0.1的sql语句都会被记录到 日志文件里。

    Linux系统使用mysql自带命令mysqldumpslow查看

    可通过 mysqldumpslow –help查看帮助信息

      -s,是order的排序,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序

      -a,倒序排列

      -t,是top n的意思,即为返回前面多少条的数据

      -g,后边可以写一个正则匹配模式,大小写不敏感的

    mysqldumpslow -s c -t 20 host-slow.log
    mysqldumpslow -s r -t 20 host-slow.log
    上述命令分别可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。

    mysqldumpslow -t 10 -s t -g “left join” host-slow.log这个是按照时间返回前10条里面含有左连接的sql语句。

    图例中的命令:mysqldumpslow –s at- t 50 host-slow.log 显示出耗时最长的50个SQL语句的执行信息

    以Count: 32  Time=0.26s (8s)  Lock=0.00s (0s)  Rows=10.0 (320), wos_20120719[wos_20120719]@2host 为例:

    Count: 32  该SQL总共执行32次

    Time = 0.26s (8s)  平均每次执行该SQL耗时0.26秒,总共耗时32(次)*0.26(秒)=8秒。

    Lock=0.00s(0s)   lock时间0秒

    Rows =10.0(320)  每次执行SQL影响数据库表中的10行记录,总共影响 10(行)*32(次)=320行记录

    批注:1次查询10条记录所用时间   小于  1次1条查询10次所用时间!

    二、连接数

    1 show variables like '%connections%' /*查看最大的连接数*/
    2 
    3 show status like '%connection%' /*查看连接的状态*/
    4 Connections :试图连接MySQL服务器的次数; 5 max_connections:整个MySQL允许的最大连接数;
    1 show status like '%thread%'
    2 其中:
    3 Threads_connected 当前打开的连接的数量
    4 Threads_cached 线程缓存内的线程的数量 
    5 Threads_created 创建的线程数 
    6 Threads_running 激活的(非睡眠状态)线程数 

    三、缓冲池

    1 show variables like '%buffer_pool_size%' 默认是134兆,如果服务器的内存是32G,设置为20G对服务器的性能提升是非常大的!
    2 show status like '%buffer%';
    3 其中:
    4 Innodb_buffer_pool_reads:缓冲池中没有读到数据,而从磁盘内读取的次数
    5 Innodb_buffer_pool_read_requests:来缓冲池中读数据的次数
    6 Innodb_buffer_pool_pages_total:缓冲池的总页数(内存是以页为单位)
    7 Innodb_buffer_pool_pages_free:缓冲池中处于空闲状态的页数

    命中率:innodb_buffer_read_hits=(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%

    ========================================================================================
    四、查询缓存(一般默认)
    show variables like '%query_cache%'; 查询缓存的本身存在一种算法,如果更新了查询语句就直接去硬盘读取数据,本身也消耗一些性能,所以查询缓存的size很小
    show status like '%Qcache%'
    查询缓存百分比:Query_cache_hits=(Qcache_hits/(Qcache_hits+Qcache_inserts))*100%

    五、线程缓存(连接池,一般默认)
    show variables like '%thread%'
    show status like 'connections'  试图连接mysql的次数
    show status like '%thread%'
    线程缓存命中率:Threads_Cache_Hit=(Connections-Threads_created)/Connections*100%

    六、表锁和行锁
    show status like '%lock%';
    存储引擎:早期mysql用的,MyISAM(表锁),现在都用Innodb(行锁)
    MyISAM:支持表锁
    Innodb:支持行锁

  • 相关阅读:
    把数据输出到Word (组件形式)
    把数据输出到Word (非插件形式)
    ASP.NET MVC Jquery Validate 表单验证的多种方式
    GitHub博客hexo建站之设置SSH 密钥(keys)
    文件打开模式和文件对象方法
    字符串的方法及注释
    汉诺塔递归思维
    python中for嵌套打印图形
    float存储
    Queue 笔记
  • 原文地址:https://www.cnblogs.com/hanxiaobei/p/5515624.html
Copyright © 2020-2023  润新知