• mysql中TPS, QPS 的计算方式


    今天突然有个同事问题一个问题, mysqlTPS和QPS的计算公式是什么?

    以前确实也没有关注过这个计算公式,所以查了下学习了下; 下面是参考内容。 

     在做db基准测试的时候,qps,tps 是衡量数据库性能的关键指标。本文比较了网上的两种计算方式。先来了解一下相关概念。
    概念介绍:
    QPS:Queries Per Second           查询量/秒,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理查询量多少的衡量标准。
    TPS :  Transactions Per Second      事务数/秒,是一台数据库服务器在单位时间内处理的事务的个数。 
     
    如何计算:
    从网上查看如果获取mysql 的qps,tps 的方法有如下两种:
     
    方法一
      基于 questions  计算qps, 基于  com_commit  com_rollback 计算tps
    questions = show global status like 'questions';
    uptime = show global status like 'uptime';
    qps = questions/uptime
     
    com_commit = show global status like 'com_commit';
    com_rollback = show global status like 'com_rollback';
    uptime = show global status like 'uptime';
    tps = (com_commit + com_rollback) / uptime
     
    方法二  
      基于 com_* 的status 变量计算tps , qps
    使用如下命令:
    show global status where variable_name in('com_select','com_insert','com_delete','com_update');  获取间隔1s 的 com_*的值,并作差值运算
    del_diff = (int(mystat2['com_delete']) - int(mystat1['com_delete']) ) / diff
    ins_diff = (int(mystat2['com_insert']) - int(mystat1['com_insert']) ) / diff
    sel_diff = (int(mystat2['com_select']) - int(mystat1['com_select']) ) / diff
    upd_diff = (int(mystat2['com_update']) - int(mystat1['com_update']) ) / diff

     

    上述计算方法的值准确合适吗?
    下图是我手工做测试的结果:
    1. 针对mysql innodb 表的dml 操作做了各个量的统计,结果如下:
     
    由上图可以得出结论:
    a.  com_commit, com_rollback 与显示指定transaction无关,只和显式提交commit rollback 有关。
    b.  不管dml的结果是否成功,com_* 都会增加1 。
     
    2.  针对myisam 表的测试
     
     
    a.  对于myisam 表 进行dml操作 只有questions 改变其他值不变。
    b.  对于myisam 存储引擎使用com_* 计算其tps,qps 是不准确的,使用questions 的值计算相对比较合适。
     
    利用脚本使用不同的变量获取数据库的qps,tps 的对比图:
    qps_s      是基于 com_select
    qps_ques 是基于 questions ,
    tps_iud    是基于 com_insert, com_update,com_delete 之和,
    tps_com_rol是基于 com_commit com_rollback 之和
    由上图可以查看 基于questions 要比基于com_select的数值要大,因为questions本身是所有db访问的集合。
     
    总结:
      Questions 是记录了从mysqld启动以来所有的select,dml 次数包括show 命令的查询的次数。这样多少有失准确性,比如很多数据库有监控系统在运行,每5秒对数据库进行一次show 查询来获取当前数据库的状态,而这些查询就被记录到QPS,TPS统计中,造成一定的"数据污染".
    如果数据库中存在比较多的myisam表,则计算还是questions 比较合适。
    如果数据库中存在比较多的innodb表,则计算以com_*数据来源比较合适。

     

    参考: http://blog.itpub.net/22664653/viewspace-767265/

  • 相关阅读:
    为什么要用<!DOCTYPE>声明
    [asp.net core] Tag Helpers 简介(转)
    asp.net core输出中文乱码的问题
    探索Aspnetcore+mysql+efcore
    [Redis]发布/订阅
    [Centos 6]升级安装GCC(2)
    [Centos]升级安装GCC
    [小程序]那些icons
    初探微信小程序
    [CentOs7]搭建ftp服务器(3)——上传,下载,删除,重命名,新建文件夹
  • 原文地址:https://www.cnblogs.com/davygeek/p/5703316.html
Copyright © 2020-2023  润新知