业务需求与指标的对应关系

需求 | 指标 |
数据总量 | 假设1年内数据量大约500G数据量。 |
每秒请求量 | 每秒有2000次请求。 |
响应时间 | 查询和操作请求要求ms级响应 |
读写比 | 读写比是5:1。 |
重要程度 | 核心系统,P1级故障。 |
冷热数据 | 一般请求热点数据为最近15内的 |
记录长度 | 每条记录长度大约为1KB。 |
计算方式之一(还有计算方式之二,请期待哦😯)
Step1:
1.从业务方得知服务运行一年的数据量已知 500G
2.计算每秒产生的数据为500*1024*1024/(365*24*60*60) = 16KB/s
Step2:
1.从业务方得知大约每秒2000次请求,读写比是4:1
2.计算读请求2000/5*4 = 1600/s;每秒写请求数2000/5*1 = 400/s
Step3:
1.假设每条记录长度大约为1KB >>>每行记录计算方式可自行查看。此处假设为“被平均”值
2.根据Step1得出的结果,每秒insert的写入量大约为16/s;
3.根据Step2得到的每秒insert 400/s,可知 384/s 为update或delete操作。
4.由于MySQL数据读写操作按照页来处理,(默认)页大小为16KB,假设每次操作的页都不相同。
5.那么每秒写操作数据量为:16KB*400/s = 6.25M/s,每秒读操作数据量为:16KB*1600/s = 25M/s。
Step4:
1.假设热点请求数据为最近15天内的数据
2.热数据量为:(500/365)*15 = 20GB
Step5:
1.操作需ms级返回,并且读压力更大,那么需要尽可能的将热数据加载到内存。
2.按照内存命中率接近100%计算的话,那么Innodb buffer大约为20GB,而其他内存需求大概为1~2GB,因此内存超配大约为22GB。
step6:
1.按照超配原则,写带宽(wBPS)限制为10MB/s;读带宽(rBPS)限制为30MB/s。
示意图:

脚本化评估输出:

福利😊:
[root@dba-virtual-host-220122 local]# cat capacity_caculate.sh
#!/bin/bash
read -p "当前一年数据量 {单位:GB}:" DBSIZE
#echo "${DBSIZE}GB"
DPS=$[DBSIZE*1024*1024/(365*24*60*60)]
#echo "每秒产生的数据:${DPS}KB/s"
read -p "当前并发量:" CV
read -p "数据读写比 {例如:10:1}:" RW_RATIO
read -p "热点请求数据查询范围{单位:天}:" HOT_DATA_EXPIRE
READ_RATIO=`echo $RW_RATIO |awk -F ':' '{print $1}'`
WRITE_RATIO=`echo $RW_RATIO |awk -F ':' '{print $2}'`
ALL_RATIO=$[READ_RATIO+WRITE_RATIO]
READ_REQUEST=$[CV/ALL_RATIO*READ_RATIO]
WRITE_REQUEST=$[CV/ALL_RATIO*WRITE_RATIO]
ROW_SIZE=1
INSERT_TRANSACTION=$[DPS/ROW_SIZE]
UPDATE_OR_DELETE_TRANSACTION=$[WRITE_REQUEST-INSERT_TRANSACTION]
WRITE_SIZE=$[16*WRITE_REQUEST/1024]
READ_SIZE=$[16*READ_REQUEST/1024]
ALL_IO_FLOW=$[WRITE_SIZE+READ_SIZE+5]
HOTDATA_SIZE=$[DBSIZE/365*HOT_DATA_EXPIRE]
ALL_MEM=$[HOTDATA_SIZE+2]
echo "-----------------------结论如下-----------------------------"
echo "每秒读请求:${READ_REQUEST}/s"
echo "每秒写请求:${WRITE_REQUEST}/s"
echo "每秒insert事务:${INSERT_TRANSACTION}"
echo "每秒update/delete事务:${UPDATE_OR_DELETE_TRANSACTION}"
echo "每秒写带宽${WRITE_SIZE}M/s"
echo "每秒读IO带宽${READ_SIZE}M/s"
echo "总带宽不得低于${ALL_IO_FLOW}M/s"
echo "热点数据量:${HOTDATA_SIZE}GB"
echo "总内存需${ALL_MEM}GB"
本文分享自微信公众号 - topdba,如有侵权,请联系 service001@enmotech.com 删除。




