首页 >要闻 > > 正文

[ES三周年]如何计算数据库的TPS和QPS

腾讯云 2023-03-21 12:25:28

介绍

我们在做数据库性能压力测试、做监控和告警项,或者想要真实地了解业务数据库负载的时候,常常需要使用两个数字化的衡量指标。他们是什么?相信很多数据库从业的读者已经呼之欲出了,那就是 QPS 和 TPS。


(资料图片仅供参考)

我们经常使用到这两个指标,那我们是否清楚他们是什么,在 MySQL 中应该如何计算获得呢?今天这里就是刨根问底栏目组...

QPS的定义和计算方法

首先我们来确认一下什么是 QPS。

根据百度百科,QPS 即 Queries-per-second,是每秒查询率的意思。这个定义是非常明确的。

下面我们探讨一下,他在 MySQL 里是如何计算的。

我们先去官网查询下是否有官方的说明~

很遗憾,MySQL 官网并没有对 QPS 做出明确的解释,那么就由我来带大家一起探讨一下这个 QPS 应该怎么计算吧。经过我的研究,网上普遍存在三种 QPS 的计算方法。

QPS = DQL(select)-per-secondQPS = Queries-per-secondQPS = Questions-per-second

大家看到这三个方法可能已经懵逼了,请大家稍安勿躁,我来详细讲解一下。

方法一、QPS = DQL(select)-per-second

使用这个计算方法的人,普遍认为 QPS 的 Query,中文意思是查询的意思,所以对应的就是所有 DQL 语句,即 select 打头的语句。这种计算方式算出来的 QPS 意味着是数据库服务器的只读压力,如果数据库没有读只有写,那么他的 QPS 即为 0,这显然是不合理的,相信只有极少数人采用了这种计算方法。

方法二、Queries-per-second

方法一的计算方法是有问题的,原因在于把 QPS 中的 Q ,即 Query 理解为"查询",并偏执地理解为 DQL了,理解为 select only了,这是一种对 Q 的狭义的理解。而实际上这里的 Q 是广义的,大家想想什么是 SQL?SQL = DQL + DML + DDL + DCL,所以 QPS 中的 Q 应该和 SQL 中的 Q 一样,都是广义上的 Query,也就是所有的 SQL 语句。 那么我们如何获取 MySQL 数据库服务器上所有的 SQL 语句总数?

我们知道,从show global status like "Queries"能获取 Queries 数,官方对这个 status 值的解释是:

QueriesThe number of statements executed by the server. This variable includes statements executed within stored programs, unlike the Questionsvariable. It does not count COM_PINGor COM_STATISTICScommands.

中文的意思是,Queries 计数表示服务器执行的语句数。与 Questions 计数不同,此变量包括了存储过程中执行的语句。它不计数COM_PINGCOM_STATISTICS命令。

所以方法二的计算方法就是,从show global status like "Queries"能获取 Queries 数,然后经过 t 秒,再从show global status like "Queries"能获取 Queries 数,前后 Queries 数的差值,除以 t 秒,即算出 Queries-per-second。

看起来这种计算方式是正确的。

先别那么快下定论,咱们再看看第三种计算方法。

方法三、Questions-per-second

方法三的计算方法和方法二类似,只是把show global status like "Queries"修改为从show global status like "Questions"

那么 Questions 代表什么呢?以下是官方文档的解释:

QuestionsThe number of statements executed by the server. This includes only statements sent to the server by clients and not statements executed within stored programs, unlike the Queries variable. This variable does not count COM_PING, COM_STATISTICS, COM_STMT_PREPARE,COM_STMT_CLOSE, orCOM_STMT_RESETcommands

这里我们可以看出,Queries 计数和 Questions 计数的区别在

Queries 计数

Questions 计数

备注

因为 Queries 计数统计的更多,所以理论上 Queries 计数总是大于等于 Questions 计数。

采用 Queries 计数还是 Questions 计数,基本是见人见智了。而我们这边由于几乎没有业务使用到存储过程和预准备语句,所以用哪一种方式都一样。

有趣的现象是,官方用的是第二种方法"Queries-per-second"。纳尼?不是说官方文档没定义和说明吗? emem,这是我的发现,见下图。

截图是登录 mysql 客户端后输入\s(status)的结果,经过我的验证,这里的 Queris per second avg,等于 Questions/Uptime 而不是 Queries/Uptime。

当然这里显示的 Queris per second avg 参考意义不大,因为分母是 Uptime,也就是 mysqld 服务启动的时间。不能真实的反馈真实的、瞬时的 QPS 指标。还是老老实实用方法二提到的计算思路,获取 t 秒 Questions 的变化值,然后除以 t 秒这种方法来计算吧。

稍等,好像有点问题!你不是说官方采用的是 Queries-per-second 方法吗,怎么用 Questions/Uptime 而不是 Queries/Uptime?请看下图~

其实官方的\s(status)的 Questions 值的结果是来源于 show global status like "Queries"而不是 show global status like "Questions"。所以这里的 Questions 实际上是 Queries,所以我归类为第二种方法"Queries-per-second",没有毛病。

不清楚是否算是一个文字显示上的 BUG ,也许官方自己都在纠结中吧。

TPS的定义和计算方法

相对于 QPS 的定义,TPS 的定义我们不用查看百度百科了,因为在官方文档就可以找到对于 TPS 的说明:

TPSAcronym for “transactionsper second”, a unit of measurement sometimes used in benchmarks. Its value depends on the workloadrepresented by a particular benchmark test, combined with factors that you control such as the hardware capacity and database configuration.

TPS 是 "Transactions Per Second" (每秒事务数)的缩写,是一种用于基准测试的测量单位,是一台数据库服务器在单位时间内处理的事务的个数。它的值取决于一个特定的基准测试所代表的工作负荷,以及其他的因素,如硬件容量和数据库配置。

明确了 TPS 的含义为每秒的事务数,还需要知道在 MySQL 数据库中只有使用了 Innodb 数据库引擎的数据库或表才支持事务,在 MySQL 中现在最常用的存储引擎就是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。

潜台词: 别傻傻的和我讨论 MyISAM 存储引擎下的 TPS 了。

关于 TPS 的计算方法,网上也是众说纷纭,我们继续探讨一下真正的 TPS 计算方法。

方法一: 计算增删改查总和方法二: 计算 commit、rollback 总和方法三: 计算 Gtid 增长值

方法一、计算增删改查总和

在前面的 QPS 计算中,我们学会了从show global status里获取一些 SQL 语句计数统计值,用于计算 QPS,TPS 同样地可以。 我们可以获取 com_insert、com_deletecom_updatecom_select来计算 TPS 。

官方文档的解释如下:

Com_xxx The Com_xxx statement counter variables indicate the number of times each xxx statement has been executed. There is one status variable for each type of statement. For example, Com_delete and Com_update count DELETE and UPDATE statements, respectively. Com_delete_multi and Com_update_multi are similar but apply to DELETE and UPDATE statements that use multiple-table syntax.

中文意思是,这个 Com_xxx 语句计数器变量指示每个变量的次数。xxx 语句已执行。每种类型的语句都有一个状态变量。例如,Com_deleteCom_update分别表示执行 DELETE 和 UPDATE 语句的次数。Com_delete_multiCom_update_multi相似,但适用于 DELETE 和 UPDATE 使用多表语法的语句。

这里能发现如果涉及多表删除或者多表更新情况,需要使用的计数变量是Com_delete_multiCom_update_multi

也就是方法一的计算公式为: TPS = 单位时间 t 内 (com_insert+ com_delete+ com_update+ com_select+ Com_delete_multi+ Com_update_multi)的增长值/ 单位时间 t

这里,我们不深究计数器使用得是否正确,由于我们是要计算每秒事务数,鉴于一个事务里可以跑多个 SQL,这种计算公式明显违反了定义,是错误的。

方法二: 计算 commit、rollback 总和

是事务就需要有 begin 和 commit/rollback 语句,对吧。所以计算 commit、rollback 的总和,即计算com_commit+com_rollback,也可以计算出 TPS,对吧?

错错错! MySQL 区别于 Oracle,在 Oracle 里事务是需要显示提交的,必须执行 commit 提交事务。而 MySQL 默认是设置了自动提交的(参数 autocommit=1)。 所以 MySQL 不 commit 也是可以的,只要不显式地包裹了 begin 和 commit/rollback,那么一条 SQL 下发完,就会自动提交,就是一条事务。现在大多数 MySQL 的开发人员都是大量地使用自动提交。

所以会有一个很尬尴的现象,就是: 在一套一主一从的 MySQL 数据库集群里,主库因为不主动执行commit,com_commit为 0 ,所以采用方法二计算出来的 TPS 为 0,而 binlog 是会自动补 commit 语句的,复制到从库时,从库回放 SQL,会带 commit,那么从库会有com_commit,从库的 TPS 是真实的。

这种统计方法,显然是我们不能接受的。

那么我认为,对于方法二,可以按以下思路来改造:

Handler_commit+Handler_rollback+Com_commit+Com_rollback+Com_rollback_to_savepoint+Handler_savepoint_rollback

其中Handler_commitHandler_rollback等打头的计数器是隐式提交的计数器。我只提供思路,不保证数据正确性,具体计算方法,读者可以尝试按这个思路改造。

方法三、用 GTID 计算 TPS

熟悉 MySQL 的同学肯定清楚开启数据库的 GTID 是一项硬性指标,那么 GTID 是什么?

GTID( Global Transaction Identifier)全局事务标识,其保证为每一个在 master 提交的事务在复制集群中可以生成一个唯一的 ID。一个 GITD 由两部分组成的,分别是 source_id 和 transaction_id,结构为 GTID=source_id:transaction_id,其中 source_id 就是执行事务的主库的 server-uuid 值,server-uuid 值是在 mysql 服务首次启动生成的,保存在数据库的数据目录中,在数据目录中有一个 auto.conf 文件,这个文件保存了 server-uuid 值(唯一的)。而 transaction_id 则是从 1 开始自增的序列,表示这个事务是在主库上执行的第几个事务,MySQL 会保证这个事务和 GTID 是一比一的关系。

既然一个事务只会生成一个唯一的 GTID,而且 transaction_id 的部分还是顺序递增的序列,那么根据这个值来计算 TPS 是应该是最准确的一种方式了。

MySQL 5.6 版本开始支持 GTID 功能。

知道了基于GTID来计算TPS最准确,那如何计算呢?在 MySQL 上,可以使用 show master status命令来查看 Executed_Gtid_Set的值,这个值表示已经在这个实例上执行的 GTID集合。

如果是从库,执行show slave status中输出的对应列Executed_Gtid_Set,含义也相同。

比如下面这种情况,直接可以根据单位时间内两次输出结果 GTID 数值差值与单位时间之商计算得出 TPS。

mysql> show master status \G*************************** 1. row ***************************             File: mysql-bin.000006         Position: 926206     Binlog_Do_DB:  Binlog_Ignore_DB: Executed_Gtid_Set: 59bf2dea-e3b5-11eb-ae63-02000aba3f7b:1-25161 row in set (0.00 sec)

这里可能有人会说,我这没算对,因为我这里使用的 GTID 确实可以保证所有计数都是事务的,但并没有包含 select 类型的事务。

我给出两个解释吧:

前面提到了,GTID( Global Transaction Identifier)表示全局事务标识,GTID 没有给 select only 的事务一个 GTID 编号,也就是官方根本没有打算把这类查询的事务认为是事务,所以 GTID 本身确实是一种狭义的事务的概念,所以我们这边计算的 TPS 也是一种狭义的 TPS,但问题是,这就是我们真正需要的 TPS!如果您关注业务的读,大可以看 QPS,如果您关注事务,关注业务的写入,那就看 TPS,我的定义更利于实现这个读写维度分离的关注。

总结一下

本文探讨了 QPS 和 TPS 的各种计算方法,并给出我们认为的最佳计算方法。

上一篇:爱玛科技3月21日打开涨停 下一篇:最后一页
x
推荐阅读

[ES三周年]如何计算数据库的TPS和QPS

2023-03-21

爱玛科技3月21日打开涨停

2023-03-21

世界观天下!购房者的坏消息:抵押贷款利率接近 7% 为 2023 年的最高水平

2023-03-21

安德利(605198):3月20日北向资金减持3.6万股|全球快看点

2023-03-21

正柴胡饮颗粒的功效与作用说明书_正柴胡饮颗粒的注意事项有哪些

2023-03-21

从业资格证多少钱_从业资格证书编号_世界头条

2023-03-20

今年“五一”,汉口火车站北广场开通投用

2023-03-20

当前观察:最快出警!快递“火”车开进消防站,网友:妥妥的送“火”上门......

2023-03-20

湖北省造大清银币价格(2023年03月20日)

2023-03-20

百事通!瞧,无人机飞进校园啦!文化路第二小学举行科技教育活动

2023-03-20

和讯个股快报:2023年03月20日 中油工程(600339)该股换手率大于5% 关注

2023-03-20

周杰伦的老婆是不是他的粉丝_周杰伦的老婆-环球通讯

2023-03-20

天天亮点!黄家驹墓地照片_黄家驹墓地

2023-03-20

言外之意的拼音的近义词 天天百事通

2023-03-19

当前简讯:如何飞牌飞得远而杀伤力大_如何飞牌有杀伤力

2023-03-19

热门看点:眼睛迎风流泪怎么治用什么药_眼睛迎风流泪怎么治

2023-03-19

大学生勤工俭学却被拖欠报酬 检察院支持起诉后劳务公司支付劳动报酬 全球新资讯

2023-03-19

天天亮点!椰树直播间冲上微博热搜第一名 网友:画风变了

2023-03-19

食古不化用什么中成药_食古不化-实时

2023-03-19

义齿的种类及价格_义齿的种类 速读

2023-03-18

头皮毛囊炎是怎么引起的男性(头皮毛囊炎是怎么引起的) 世界通讯

2023-03-18

钗头凤陆游和唐婉对唱_钗头凤陆游和唐婉赏析_世界热闻

2023-03-18

湖人一旦出局,内部将会发生巨变!

2023-03-18

雄霸三国 当前通讯

2023-03-18

全球今亮点!经济全球化的表现有哪些? 销售全球化(经济全球化的表现有哪些)

2023-03-18

脑门长痘痘怎么办_脑门长痘痘什么原因_新视野

2023-03-18

前沿资讯!勇哥探案|中学生骑电动车载同学导致摔亡,法院判赔70万

2023-03-17

党小组组长给转正式党员的意见_党小组长对预备党员转正的意见

2023-03-17

胡安·拉蒙·洛佩斯·穆尼斯_关于胡安·拉蒙·洛佩斯·穆尼斯介绍-当前要闻

2023-03-17

环球视点!龙湖集团:2023年债务会保持2080亿总数不变 同时适度减少境外融资

2023-03-17

杀蟑螂绝招小窍门?

2023-03-17

欧盟研发出新型“人造树叶”:直接将二氧化碳、水转化为燃料|环球聚焦

2023-03-17

每日信息:cpk计算公式及解释ppt_cpk计算公式及解释

2023-03-17

碗莲的养殖方法图解视频_碗莲的养殖方法图解

2023-03-17

hgst硬盘 hgst硬盘 每日精选

2023-03-16

英国公布最新财政预算案,50万人罢工,伦敦地铁瘫痪!-焦点快播

2023-03-16

盛德鑫泰:收到中标通知书 中标金额约1.98亿元 世界微速讯

2023-03-16

直播平台工作计划书(热门26篇)

2023-03-16

一战_说一说一战的简介

2023-03-16

天天快消息!天振股份:3月15日融资买入258.96万元,融资融券余额4568.3万元

2023-03-16

空天产业“抛绣球” 西安面向大湾区拓展招商引资“鹏友圈”

2023-03-16

李白之死的故事_李白之死的图片

2023-03-16

全球时讯:云南旅游并购“后遗症”延绵多年 一个月内两收限制消费令

2023-03-16

全球新消息丨曝光不可注射的美容针!妆字号美容针或致毁容

2023-03-15

北京职工医保中断缴费改为城乡医保还可以使用个人账户吗?

2023-03-15

魅族公布新专利,车机屏幕也能用高刷

2023-03-15

世界报道:米津玄师为什么叫_为什么米津玄师是疯子

2023-03-15

年数总和法的年数总和怎么求_年数总和法公式例题

2023-03-15

太美医疗持续亏损,高管年薪超150万

2023-03-15

环球滚动:下眼睑红肿痒疼眨眼疼怎么办_下眼睑红肿

2023-03-15

宣城社保查询个人账户查询系统_宣城社保查询个人账户 天天速递

2023-03-15

瑜伽球的用法_如何正确挑选瑜伽球

2023-03-15

天天头条:注意!狮头股份将于3月30日召开股东大会

2023-03-14

关注:京彩绿色消费券联想官方领取入口

2023-03-14

樱岛麻衣手办_藤田麻衣子

2023-03-14

狐假虎威寓意和意思_狐假虎威寓意 每日视讯

2023-03-14

巴马:强化一线监督着力整治群众身边的腐败问题_全球热闻

2023-03-14

天天热点!特鲁克泻湖的照片_特鲁克泻湖

2023-03-14

焦点速读:网友实验证明三星手机在拍摄月亮方面存在“造假”情况

2023-03-14

微观西藏

2023-03-14

黑莓方型萤幕新机Dallas_Osla渲染图曝光|全球最新

2023-03-13

阳了应该怎么办-阳性感染者如何用药 03月13日14时云南昭通疫情数据_环球热闻

2023-03-13

辽宁沈阳皇姑公益诉讼助力“电梯体检”-今日热文

2023-03-13

新华网3月13日快速上涨_天天速递

2023-03-13

今日看点:石嘴山市培育“法律明白人”助力基层社会治理

2023-03-13

AMD:我们也可以做出RTX 4090!只是不想做而已

2023-03-13

上海电视台主持人陈辰照片_上海主持人陈辰近况_当前速递

2023-03-13

每日动态!“抱团养老”成为养老院新风向

2023-03-12

罗德曼_说一说罗德曼的简介 世界今亮点

2023-03-12

微信保存的文件在哪里删除_微信保存的文件在哪里

2023-03-12

热推荐:新华全媒+|货物“跨山越海” 畅通经济循环——西部陆海新通道奏响“协奏曲”

2023-03-12

文泰雕刻2015免安装版_文泰雕刻2002破解版|当前热点

2023-03-12

太意外!突然宣布倒闭

2023-03-12

p5p4_p5pl2

2023-03-11

世界观热点:全国政协十四届一次会议闭幕会通过了政协第十四届全国委员会第一次会议关于中国人民政治协商会议章程修正案的决议

2023-03-11

王朝朝喜获2023年全国竞走大奖赛暨世锦赛和亚运会选拔赛冠军

2023-03-11

什么是肽通俗点_什么是肽菇糊糊

2023-03-11

别轻易相信存款高额贴息,步步要小心,但还是步步很惊心?

2023-03-11

台式电脑屏幕亮度怎么调win10_台式电脑屏幕亮度 当前视讯

2023-03-11

华体科技: 四川华体照明科技股份有限公司关于不向下修正“华体转债”转股价格的公告|今日热门

2023-03-10

泡泡糖粘在衣服上怎么去除_泡泡糖粘在衣服上怎么办

2023-03-10

黄旭熙用膝盖顶了边伯贤bgm_黄旭熙用膝盖顶了边伯贤

2023-03-10

【报资讯】得了流感会有哪些症状?应该怎么治疗?请看国家疾控局的解答

2023-03-10

每日信息:双辽法院:审理离婚案坚持法理与情理并重

2023-03-10

兰博基尼介绍视频大全_兰博基尼介绍 今日热搜

2023-03-10

字母哥缺席今日战篮网 霍勒迪克劳德可以出战

2023-03-10

“23中证S3”3月10日起在上交所上市-环球微速讯

2023-03-10

怎么算是金木水火土命_怎么算金木水火土命_世界热门

2023-03-09

世界动态:寓言飞飞手游_寓言飞飞官网

2023-03-09

天天百事通!九头蛇炮wiki-九头蛇炮

2023-03-09

银行复利计算器_银行复利计算公式 环球播资讯

2023-03-09

白薯的功效与作用的功能与主治_白薯的功效与作用 今日热搜

2023-03-09

天天快讯:提供运动版可选,广汽丰田锋兰达双擎申报图曝光,搭载2.0L混动

2023-03-09

今天是国米115岁生日,俱乐部官方发布视频纪念-当前关注

2023-03-09

万盛黑山谷风景区攻略_去万盛黑山谷旅游攻略 世界今日报

2023-03-09

今天最新消息 澳门:自6月18日起累计确诊新冠1814例

2023-03-09

天天热资讯!全国人大代表李国彪:加快释放煤炭先进产能 加快调整能源结构

2023-03-09

全球聚焦:中国女足节日里比赛忙

2023-03-09

趋势交易法第四版_趋势交易法第四版pdf_当前热点

2023-03-09

3月8日基金净值:东方红战略精选混合A最新净值1.3026,跌0.1% 世界热议

2023-03-09