色婆ijqwj 发表于 2018-10-7 12:10:03

mysql计算 TPS,QPS 的方式

  在做db基准测试的时候,qps,tps 是衡量数据库性能的关键指标。本文比较了网上的两种计算方式。先来了解一下相关概念。
  概念介绍:
  QPS:Queries Per Second         查询量/秒,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理查询量多少的衡量标准。
  TPS :Transactions Per Second   是事务数/秒,是一台数据库服务器在单位时间内处理的事务的个数。
  如何计算:
  从网上查看如果获取mysql 的qps,tps 的方法有如下两种:
  方法一 基于 questions计算qps,基于com_commitcom_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 操作做了各个量的统计,结果如下:
http://blog.itpub.net/attachments/2013/07/22664653_201307271527011.jpg
  由上图可以得出结论:
  1 com_commit, com_rollback 与显示指定transaction无关,只和显式提交commit rollback 有关。
  2 不管dml的结果是否成功,com_* 都会增加1 。
  b 针对myisam 表的测试:
http://blog.itpub.net/attachments/2013/07/22664653_201307271529001.jpg
  1 对于myisam 表 进行dml操作 只有questions 改变其他值不变。
  2 对于myisam 存储引擎使用com_* 计算其tps,qps 是不准确的,使用questions 的值计算相对比较合适。
  利用脚本使用不同的变量获取数据库的qps,tps 的对比图:
http://blog.itpub.net/attachments/2013/07/22664653_201307271528001.jpg
  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]
查看完整版本: mysql计算 TPS,QPS 的方式