您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

Mysql库TPS,QPS实时监控脚本

时间:2020-09-02 15:05:57  来源:  作者:

作为一名数据库运维人员,手里都有一些工具脚本,这些都是你提升运维效率,快速排查故障的利器。

运维小工具:Mysql库TPS,QPS实时监控脚本

 

在生产上部署MySQL时,都会对同一配置的mysql数据库做QPS和TPS压测,获取QPS和TPS的容量数据,一旦上生产之后,应用的TPS,QPS达到容量的告警阀值,则会建议应用数据库进行拆分,扩容。

生产上的TPS,QPS指标对应数据库来说是非常重要,所以排查问题时,通常会实时的查看TPS,QPS指标值,下面就给大家分享一个实时查看TPS,QPS指标值的shell脚本。

脚本内容如下所示

#!/bin/bash
mysqladmin -uroot -proot --socket=/u02/run/3308/mysql.sock extended-status -i1|awk 'BEGIN{local_switch=0;print "QPS   Commit Rollback   TPS    Threads_con Threads_run n------------------------------------------------------- "}
     $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(local_switch==0)
                {local_switch=1; count=0}
        else {
                if(count>10)
                        {count=0;print "------------------------------------------------------- nQPS   Commit Rollback   TPS    Threads_con Threads_run n------------------------------------------------------- ";}
                else{
                        count+=1;
                        printf "%-6d %-8d %-7d %-8d %-10d %d n", q,c,r,c+r,tc,tr;
                }        }}'

在这里我用sysbench模拟一下业务操作

[mysql@localhost ~]$ sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.17.128 --mysql-port=3308 --mysql-user=root --mysql-password='root'  --mysql-db=sbtest --oltp-test-mode=complex --oltp-tables-count=1 --oltp-table-size=100000 --threads=128  --oltp-nontrx-mode=select --oltp-read-only=off --max-time=40 --report-interval=5 run
[ 5s ] thds: 128 tps: 122.91 qps: 2770.42 (r/w/o: 1992.38/507.44/270.61) lat (ms,95%): 1618.78 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 128 tps: 121.83 qps: 2551.02 (r/w/o: 1795.04/511.32/244.66) lat (ms,95%): 1648.20 err/s: 0.20 reconn/s: 0.00
[ 15s ] thds: 128 tps: 138.79 qps: 2666.28 (r/w/o: 1860.92/527.98/277.39) lat (ms,95%): 1708.63 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 128 tps: 139.60 qps: 2784.88 (r/w/o: 1946.85/558.62/279.41) lat (ms,95%): 1376.60 err/s: 0.00 reconn/s: 0.00
[ 25s ] thds: 128 tps: 131.90 qps: 2694.65 (r/w/o: 1890.03/541.01/263.61) lat (ms,95%): 1453.01 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 128 tps: 137.50 qps: 2774.16 (r/w/o: 1939.17/559.79/275.19) lat (ms,95%): 1506.29 err/s: 0.00 reconn/s: 0.00
[ 35s ] thds: 128 tps: 142.38 qps: 2755.43 (r/w/o: 1932.54/538.13/284.76) lat (ms,95%): 1533.66 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 128 tps: 134.41 qps: 2731.10 (r/w/o: 1906.81/555.66/268.63) lat (ms,95%): 1453.01 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            76664
        write:                           21901
        other:                           10951
        total:                           109516
    transactions:                       5475   (135.35 per sec.)
    queries:                             109516 (2707.35 per sec.)
    ignored errors:                      1      (0.02 per sec.)
    reconnects:                          0      (0.00 per sec.)
General statistics:
    total time:                          40.4493s
    total number of events:              5475
Latency (ms):
         min:                                   97.28
         avg:                                  942.69
         max:                                15577.39
         95th percentile:                     1533.66
         sum:                              5161211.71
Threads fairness:
    events (avg/stddev):           42.7734/2.45
    execution time (avg/stddev):   40.3220/0.11

用途TPS,QPS监控脚本监控,看一下监控内容是否和sysbench的结果有差异

[mysql@localhost ~]$ ./mysql_tps.sh 
------------------------------------------------------- 
QPS   Commit Rollback   TPS    Threads_con Threads_run 
------------------------------------------------------- 
3090   186      0       186      130        40 
2661   131      0       131      130        89 
2603   129      0       129      130        45 
2557   92       0       92       130        123 
2066   126      0       126      130        11 
2638   123      0       123      130        25 
2770   174      0       174      130        127 
3006   172      0       172      130        39 
2797   117      0       117      130        43 
2247   103      0       103      130        80 
2742   157      0       157      130        119 
------------------------------------------------------- 
QPS   Commit Rollback   TPS    Threads_con Threads_run 
------------------------------------------------------- 
2974   159      0       159      130        22 
2864   141      0       141      130        23 
2754   130      0       130      130        122 
2685   149      0       149      130        40 
2809   126      0       126      130        21 
2631   140      0       140      130        21 
2594   126      0       126      130        23 
2868   148      0       148      130        28 
2696   130      0       130      130        63 
2920   148      0       148      130        49 
2569   127      0       127      130        37 

从sysbench的结果可以看到,TPS为135.35 per sec,QPS为2707.35 per sec

这个结果和我们的脚本监控基本是一致的。

在这里如果想要看insert,update,delete,select语句的执行情况,可以将脚本进行升级,其内容如下 所示

 

改进型TPS,QPS监控脚本

#!/bin/bash
mysqladmin -uroot -proot --socket=/u02/run/3308/mysql.sock extended-status -i1|awk 'BEGIN{local_switch=0;print "QPS   Commit Rollback   TPS  delete  insert select  update  Threads_con Threads_run n------------------------------------------------------- "}
     $2 ~ /Queries$/            {q=$4-lq;lq=$4;}
     $2 ~ /Com_commit$/         {c=$4-lc;lc=$4;}
     $2 ~ /Com_rollback$/       {r=$4-lr;lr=$4;}
     $2 ~ /Innodb_rows_deleted$/            {deleted=$4-ldeleted;ldeleted=$4;}
     $2 ~ /Innodb_rows_inserted$/           {inserted=$4-linserted;linserted=$4;}
     $2 ~ /Innodb_rows_read$/               {read=$4-lread;lread=$4;}
     $2 ~ /Innodb_rows_updated$/            {updated=$4-lupdated;lupdated=$4;}
     $2 ~ /Threads_connected$/  {tc=$4;}
     $2 ~ /Threads_running$/    {tr=$4;
        if(local_switch==0)
                {local_switch=1; count=0}
        else {
                if(count>10)
                        {count=0;print "------------------------------------------------------- nQPS   Commit Rollback   TPS  delete  insert select  update  Threads_con Threads_run n------------------------------------------------------- ";}
                else{
                        count+=1;
                        printf "%-6d %-8d %-7d %-8d %-6d %-8d %-7d %-8d %-10d %d n", q,c,r,c+r,deleted,inserted,read,updated,tc,tr;
                }        }}'

执行结果如下所示

[mysql@localhost ~]$ ./mysql_tps1.sh 
QPS   Commit Rollback   TPS  delete  insert select  update  Threads_con Threads_run 
------------------------------------------------------- 
2682   122      0       122      125    119      60109   310      130        58 
3226   236      0       236      227    239      52536   396      130        36 
2902   120      0       120      128    119      53944   255      130        43 
2239   103      0       103      93     101      58825   198      130        80 
2744   157      0       157      158    158      59333   347      130        121 
2661   97       0       97       111    102      52633   196      130        59 
2956   160      0       160      150    156      56371   284      130        22 
2882   140      0       140      139    141      60888   277      130        27 
2753   130      0       130      128    127      57236   278      130        128 
2680   150      0       150      153    151      58142   302      130        40 
2812   124      0       124      130    130      59764   244      130        20 
------------------------------------------------------- 
QPS   Commit Rollback   TPS  delete  insert select  update  Threads_con Threads_run 
------------------------------------------------------- 
2583   126      0       126      129    129      54180   260      130        22 
2855   148      0       148      144    146      61005   292      130        28 
2720   130      0       130      136    131      59835   278      130        63 
2919   148      0       148      142    147      54369   270      130        49 
2571   127      0       127      136    134      53447   276      130        37 
2715   134      0       134      129    128      58469   260      130        26 
2733   135      0       135      132    134      55638   268      130        77 
2890   149      0       149      156    155      62622   303      130        26 
2911   148      0       148      143    145      54919   285      130        44 
2838   139      0       139      137    134      60621   277      130        56 
2758   139      0       139      145    144      58161   275      130        45 

这个脚本你get了吧。



Tags:Mysql库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言:一般在数据库使用规范中,我们都会看到这么一条:库名及表名一律使用小写英文。你有没有思考过,为什么推荐使用小写呢?库表名是否应该区分大小写呢?带着这些疑问,我们一起来看下...【详细内容】
2021-06-07  Tags: Mysql库  点击:(70)  评论:(0)  加入收藏
作为一名数据库运维人员,手里都有一些工具脚本,这些都是你提升运维效率,快速排查故障的利器。 在生产上部署mysql时,都会对同一配置的mysql数据库做QPS和TPS压测,获取QPS和TPS的...【详细内容】
2020-09-22  Tags: Mysql库  点击:(106)  评论:(0)  加入收藏
作为一名数据库运维人员,手里都有一些工具脚本,这些都是你提升运维效率,快速排查故障的利器。 在生产上部署mysql时,都会对同一配置的mysql数据库做QPS和TPS压测,获取QPS和TPS的...【详细内容】
2020-09-02  Tags: Mysql库  点击:(118)  评论:(0)  加入收藏
要是问大家,知道怎么从mysql数据库中drop掉业务表,很多人肯定会说,so easy,用drop table t_test语句不就完事了,这是初生牛犊不怕虎,你要是如此简单,去线上业务库中drop掉一张1TB大...【详细内容】
2020-08-24  Tags: Mysql库  点击:(60)  评论:(0)  加入收藏
前言:在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名、字段名命名混乱、字段类型设计混乱等等,此类数据库后续极难维护与拓展。...【详细内容】
2020-05-08  Tags: Mysql库  点击:(68)  评论:(0)  加入收藏
前言Emoji 在我们生活中真的是越来越常见了,几乎每次发消息的时候不带个 Emoji,总觉得少了点什么,似乎干巴巴的文字已经无法承载我们丰富的感情了。对于我们开发者来说,如何将 E...【详细内容】
2019-10-28  Tags: Mysql库  点击:(129)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(6)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(17)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(16)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(19)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条