首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

分布式数据库架构下的TPS及成功率统计方法

监控应用系统的实时TPS(每秒交易笔数)和成功率是运维的基础工作,有了业务的实时监控才能第一时间发现问题,所以说第一时间发现问题是一方面,第一时间能解决问题又是另外一方面,发现问题在前,所以这里先分享下怎样对于基于分布式数据库系统去展示它的实时TPS及成功率。

先看下一种简单情况,应用系统只使用一个数据库,这个时候实时TPS及成功率该怎么统计。这里有2种方法:

(1)在数据库中采集一段时间内的成功交易笔数及交易总笔数,将总笔数除以时间就是TPS,将这段时间内的成功交易笔数除以总笔数就是成功率。执行sql语句:

select sum(case when ‘成功条件’ then 1 else 0 end ) as succ,count(*) as total from table where time >’CURRENT_TIMESTAMP-$loop’ and time

计算TPS:total/$loop

计算成功率:succ*100/total%

(2)按时间戳精确到秒来列出统计情况,执行sql语句:

select substr(time,,精确到秒,) as time ,sum(case when ‘成功条件’ then 1 else 0 end) as succ,count(*) from table where time>CURRENT_TIMESTAMP - $loop and time

展示效果:

HH:MM:SS1:成功笔数1总笔数1

HH:MM:SS2:成功笔数2总笔数2

HH:MM:SS3:成功笔数3总笔数3

如果是分布式数据库的情况呢?也就是说一个应用系统使用了不止一个数据库,现在常见的大型业务系统多数是使用分布式数据库来提高性能,类似这样的系统架构:

对于这样的架构部署,一笔交易会按照一定的分库规则写入分布式库中的一个,若仍使用采用上述的方法(1)则显得太过粗略,某一秒在各个数据库中的交易各不相同,直接取平均值容易导致较大的误差,这里须采用方法(2),但是采用方法(2)时,分布式数据库会同时返回各个库的结果,这里需要我们对返回结果再做一次“精加工”。

具体的步骤如下:

1、按时间戳精确到秒来列出统计情况,执行sql语句:

select substr(time,,精确到秒,) as time ,sum(case when ‘成功条件’ then 1 else 0 end) as succ,count(*) from table where time>CURRENT_TIMESTAMP - $loop and time

去除标题头后得到类似如下结果:

这里我们可以看到,不同于单一数据库,sql给我们返回了各个库的查询结果。

2、求成功率,合并计算第二列(这里用到了awk的数组方法):

3、求TPS,合并计算第三列:

4、将得到的两个文件按第一列时间戳进行合并:

5、根据结果文件,我们可以得到时间戳、TPS、成功笔数:

6、最后我们进行成功率的计算及展示:

执行效果:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181105G141YZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券