设为首页 收藏本站
查看: 657|回复: 0

[经验分享] mysql计算 TPS,QPS 的方式

[复制链接]

尚未签到

发表于 2018-10-7 12:10:03 | 显示全部楼层 |阅读模式
  在做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
  上述计算方法的值准确合适吗?
  下图是我手工做测试的结果:
  a 针对mysql innodb 表的dml 操作做了各个量的统计,结果如下:

  由上图可以得出结论:
  1 com_commit, com_rollback 与显示指定transaction无关,只和显式提交commit rollback 有关。
  2 不管dml的结果是否成功,com_* 都会增加1 。
  b 针对myisam 表的测试:

  1 对于myisam 表 进行dml操作 只有questions 改变其他值不变。
  2 对于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/


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-614319-1-1.html 上篇帖子: solr的DIH操作同步mysql数据 下篇帖子: mysql5.7.19的半同步复制问题分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表