zoukankan      html  css  js  c++  java
  • Mysql 监控性能状态 QPS/TPS【转】

    QPS(Query per second) 每秒查询量

    TPS(Transaction per second)每秒事务量

    这是Mysql的两个重要性能指标,需要经常查看,和Mysql基准测试的结果对比,如果值过高,就要尽快处理了

    计算方法

    01

    QPS


    QPS = Queries / Seconds

    Queries 是系统状态值--总查询次数,可以通过 show status 查询得出



    Seconds 是监控的时间区间,单位为秒

    例如采样10秒内的查询次数,那么先查询一次Queries值(Q1),等待10秒,再查询一次Queries值(Q2)

    QPS = (Q2 - Q1) / 10

    02

    TPS


    mysql中没有直接的事务计数器,需要通过事务提交数事务回滚数来计算

    TPS = (Com_commit + Com_rollback) / Seconds

    Com_commit、Com_rollback 的值通过 show status 查询得出





    计算思路与 QPS 相似


    统计脚本


    上面是QPS/TPS的统计思路,实际操作中如果用手动方式计算很不方便,最好用程序实现

    mysqladmin 的 extended-status 指令和 show status 差不多,可以查看mysql的状态值,如

    # mysqladmin -uroot -p'密码' extended-status



    其中含有我们需要的状态值,那么就可以分析extended-status的结果信息,然后计算,最后显示出来

    统计目标


    每隔一秒统计一次 QPS、TPS

    mysql 还有两个信息比较重要:

    Threads_connected 当前连接的线程的个数
    Threads_running 运行状态的线程的个数

    这两个值也在extended-status的结果中,所以可以一道显示出来

    最后统计结果信息包括:

    QPS、TPS、Threads_connected、Threads_running

    先看下统计结果的展现形式



    基本思路


    每秒钟运行一次extended-status,使用awk分析结果值,从中筛选出我们需要的值:

    Queries、Com_commit、Com_rollback、Threads_connected、Threads_running

    QPS = Queries值 - 上一次的值

    TPS = (Com_commit值 - 上一次的值) + (Com_rollback值 - 上一次的值)

    因为是1秒钟统计一次,所以计算QPS/TPS时就不用除以秒数了

    脚本代码




    代码分析

    awk是代码中的重点,mysqladmin 的执行结果通过管道传给 awk 进行分析

    'BEGIN{flag=0;
    print "";
    print "QPS   TPS    Threads_con Threads_run ";
    print "------------------------------------- "}

    这部分是初始设置,打印出表头

    flag=0 是设置一个标识位,后面用到

    $2 ~ /Queries$/  {q=$4-lq;lq=$4;}

    其中 $2 $4 代表某列的内容

    awk是按行分析并按空格分割的,例如行信息为:

    | Queries | 213263713 |

    按空格分割后得到5列:

    '|', 'Queries', '|', '213263713', '|'

    $2 : Queries

    $4 : 213263713

    那么这句的意思就是:

    当第2列的值匹配‘Queries’时,

    变量q = 第4列的值 - 变量lq的值,

    变量lq = 第4列的值

    变量q 就是 QPS值,用这一次的 Queries值 减去 上一次的值

    $2 ~ /Com_commit$/   {c=$4-lc;lc=$4;}
    $2 ~ /Com_rollback$/   {r=$4-lr;lr=$4;}
    $2 ~ /Threads_connected$/  {tc=$4;}
    $2 ~ /Threads_running$/    {tr=$4;

    这几句的意思与上一句类似

    if(flag==0){
        flag=1;
    }

    这里用到了flag这个标识位,意思是对第一次的分析结果什么都不做,因为这句

    {q=$4-lq;lq=$4;}

    q=$4-lq; 中的 lq 在第一次分析中还没有值

    else {
        printf "%-6d %-8d %-10d %d ", q,c+r,tc,tr;
    }

    这部分就是打印统计结果信息


    下面是脚本代码下载地址,有兴趣的话可以下来实验一下

    http://devdd.oss-cn-beijing.aliyuncs.com/mysql_QPS_TPS.txt

    #!/bin/bash
    mysqladmin -uroot -p'瀵嗙爜' extended-status -i1|awk 
    'BEGIN{flag=0;
    print "";
    print "QPS   TPS    Threads_con Threads_run ";
    print "------------------------------------- "}
    $2 ~ /Queries$/            {q=$4-lq;lq=$4;}
    $2 ~ /Com_commit$/         {c=$4-lc;lc=$4;}
    $2 ~ /Com_rollback$/       {r=$4-lr;lr=$4;}
    $2 ~ /Threads_connected$/  {tc=$4;}
    $2 ~ /Threads_running$/    {tr=$4;
    
    if(flag==0){
        flag=1; count=0
    }else {
        printf "%-6d %-8d %-10d %d 
    ", q,c+r,tc,tr;
    }
    
    }'
  • 相关阅读:
    无约束优化算法——牛顿法与拟牛顿法(DFP,BFGS,LBFGS)
    撤销重做功能实现
    疯狂值班表(人员跟日期生成的视图)
    从零开始---控制台用c写俄罗斯方块游戏(2)
    unity3d关于碰撞问题
    主进程和服务进程通信调用Acrobat.AcroPDDoc时出现的问题
    echarts
    Wpf DataGrid动态添加列,行数据(二)
    Wpf DataGrid动态添加列,行数据(一)
    wpf学习资料链接(做记录)
  • 原文地址:https://www.cnblogs.com/paul8339/p/6825769.html
Copyright © 2011-2022 走看看