mysql中TPS, QPS 的计算方式
2023-09-11 14:16:57 时间
今天突然有个同事问题一个问题, 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/
相关文章
- MySQL存储过程详解 mysql 存储过程
- mysql之基本数据库操作(二)
- MySQL Binlog Digger 4.28 【mysql日志分析工具】
- 【MySQL高级】Mysql锁问题
- 【MySQL高级】应用优化及Mysql中查询缓存优化以及Mysql内存管理及优化
- 【MySQL高级】MySql中常用工具及Mysql 日志
- wampServer(windows、apache、mysql、php)
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- Brew 卸载MySql以及安装Mysql
- 【MySQL进阶-01】深入理解mysql索引本质
- Node+Express+MySql实现简单增删改查和登录
- linux定时备份mysql并同步到其它服务器
- 基于Java(jsp+servlet)+Mysql实现的(Web)宿舍管理系统【100010103】
- MySQL show processlist说明
- sql: MySQL and Microsoft SQL Server Stored Procedures IN, OUT using csharp code
- idea 社区版连接mysql数据库教程,Cannot connect to “MySQL-5.1.43“. CLIENT_PLUGIN_AUTH is required
- Mysql Order By 注入总结
- 第一次启动MySQL时报错
- MySQL几点重要的性能指标计算和优化
- Mysql 存储引擎中InnoDB与Myisam的主要区别
- ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var mysql (转)
- Amoeba for MySQL 非常好用的mysql集群软件
- mysql版本区别及版本号解释
- LoadRunner驱动MySQL性能测试
- mysql 批量删除数据
- Mysql启动时提示:Another MySQL daemon already running with the same unix socket.
- Hibernate连接MySQL
- 【MySql 】is not allowed to connect to this MySql server 无法访问远程MySQL数据库