HCCDE-GaussDB相关计算题

第1题:计算tps

   某业务系统拥有用户1000w,每天20%用户操作平均使用3次,其中系统每天的核心时间段80%业务处理时间分布在上午10:00-12:00和下午14:00-16:00,每次核心业务操作关联的事务个数为8个,请问业务初始的tps需求为多少?

步骤1:估算系统每天的业务量T0

T0=1000w * 0.2 * 3 = 10000000 * 0.2 * 3 =10000000 * 0.6 = 6000000 

步骤2:估算核心时间段的业务量T1

T1=T0 * 0.8 / (4 * 60) = 6000000 * 0.8 / (4 * 60) = 4800000 / 240 = 20000

步骤3:跟据每次核心业务操作关联的事务个数,再计算每分钟的业务量T2 

T2=T1 * 8 = 20000 * 8 = 160000

步骤4:再将tpm换算成tps

T3=T2 / 60 = 16000 / 60 ≈ 2667.67 tps

注:考题中如果还给出扩展策略,预留策略,还有业务的复杂度,哪么您要进行按场景计算。

1、如业务系统预算每年同比增长20%,需要考虑未来3年的扩展需求,

2、要求资源利用率小于50%,

3、某业务系统复杂 SQL 较多,在工程实施阶段一般采用经验系数 1.6。

那么:(T3 * (1+ 20%) * (1+ 20%) * (1+20%) ) / 0.5 * 1.6 

 = (2667.67 * 1.2 * 1.2 *1.2 )/ 0.5 * 1.6 

 ≈ 14751 tps

第2题:计算表存储大小

假设表 T 的 1000w 行,有 10 列,8列为INTEGER 类型,2列为date类型 ,假设表的填充因子 FILLFACTOR 是默认 100,请计算表的存储大小Mb?

HCCDE-GaussDB相关计算题

根据计算公式:

每页大小8KB = 表页面头大小40KB + 每页最大记录数N * (元组头大小24B + 元组指针大小4B + 数据类型占用大小)

 推导:

每页最大记录数N =(每页大小8KB – 表页面头大小40B) / (元组头大小24B + 元组指针大小4B + 数据类型占用大小)

每页最大记录数N =(8KB * 1024 – 40B) / (24B + 4B + (8 * 4 + 2 * 8))

每页最大记录数N= 8152B / (28B+48B)  ≈ 107条

T表的大小为= (1000w / 107) * 8KB = 747663.55 /1024 ≈  730.14Mb

注:在GaussDB各数据类型大小不一,在设置表字段类型时需要按需存储是设置表的基本要求:

一、数值类型

 TINYINT: 微整数,别名INT1,存储空间 1字节。

  SMALLINT:小范围整数,别名 INT2,存储空间占用 2字节。

  INTEGER:常用整数,别名INT4,存储空间占用4字节。

  BIGINT:大范围整数,别名INT8,存储空间占用8字节。

  NUMERIC(p,s):别名NUMBER,每四位(十进制位)占用两个字节,然后在 整个数据上加上八个字节的额外开销,也就是 p/2 + 8 字节。

二、字符类型
  VARCHAR(n): 变长字符串,别名VARCHAR2 ,一般情况按字符串实际存储需要分配空间, 最大10M字节。 n在PG兼容模式下为字符数,其他模式为字节数。
  CHAR(n): 定字符串, n为存储字节长度,默认1字节, 最大10M字节。
三、日期/时间类型
   DATE:日期,存储空间占用8字节。
   TIMESTAMP(0) WITHOUT ZONE: 日期和时间,存储空间占用8字节。
四、布尔类型
   BOOLEAN:存储空间占用1字节。

第3道:计算表索引大小

如表T的行有1000w行数据,在某date类型列上就创建索引t_idx,请计算索引大小Mb?

HCCDE-GaussDB相关计算题

 根据公式推导:

每页大小为8Kb= 索引页面头大小为40B + 每页最大的记录行数 * (索引元组头大小为 8B + 索引指针大小为4B + 索引列数据类型占用大小)

每页最大的记录行数N =( 每页大小为8Kb – 索引页面头大小为40B)  / (索引元组头大小为 8B + 索引指针大小为4B + 索引列数据类型占用大小)。

推导结果

每页最大的记录行数N= (8Kb *1024 – 40B) / (8B + 4B +8B) =8152 / 20 ≈ 407条

页子结点页面个数S1=1000w / 407 ≈ 24570个

分支节点页面个数S2=24570 / 407≈ 60个

索引t_idx文件大小S=( (页子结点页面个数S1+ 分支节点页面个数S2+根节点页面个数S3) * 8Kb) / 1024 

索引t_idx文件大小S=((24570+60+1)* 8 Kb) /1024 ≈ 192Mb

第4道:redo文件存储空间大小

由于性能调优与存储空间的有限,现将WAL 日志段文件数量checkpoint_segments值调整为256个,保留WAL日志段文件的最小数量wal_keep_segments调整为64个,在多个16MB的WAL日志段组成环境下,请问日志最大占用空间为Mb?

根据最大的日志占用空间公式计算:(keep_wal_segments + checkpoint_segments * 2 + 1) * 16Mb

= (256 + 64 * 2 +1) * 16Mb

=6160Mb

第5道:备份容量相关计算

某银行周边业务系统数据量估算约800GB,每日新增数据量30GB,运维人设置的备份策略是每天做一次全量备份,每个备份保留7天。此外周六需要做一次手工备份,用于恢复到测试环境验证,假设当前业务系统的数据模型备份压缩比为0.5,请问总备份容量多少GB?

分析备份的关健因素:

业务总数据量S:业务数据存储的容量

备份保留周期T1:每个备份集保留的时长,单位:天

备份周期T2:多久进行一次全备,单位:天

压缩比R:经验值参考范围是0.3~0.7,建议实测评估

每日新增数据量D:平均每天数据增量

手动备份个数N :手动备份几次

全量备份容量C1

差量备份容量C2

日志归档容量C3

手动全量备份容量C4

根据推导的公式:

全量备份容量C1=业务总数据量S *  (ceil(备份保留周期T1 ÷ 备份周期T2)+ 1)  * 压缩比R

C1=800GB * (ceil(7÷1) +1) * 0.5 = 3200GB

差量备份容量C2=每日新增数据量D * 备份保留周期T1 * 压缩比R

C2 = 30GB * 7 * 0.5 = 105GB

日志归档容量C3=每日新增数据量D*  备份保留周期T1

C3 =  30GB * 7 =210GB

手动全量备份容量C4= 业务总数据量S * 手动备份个数N* 压缩比R

C4 = 800GB * 1 * 0.5 = 400GB

总备份容量 = 全量备份容量C1 + 差量备份容量C2 + 日志归档容量C3 + 手动全量备份容量C4

总备份容量 = 3200GB + 105GB + 210GB + 400GB = 3915GB

第6题:不等边桶的选择率估算

select * from pg_stats where tablename ='t1' and attname ='a';

HCCDE-GaussDB相关计算题

请计算a=37时选择率?

计算过程:

步骤1:null_frac值为零,说明a列没有null值

步骤2:mcv选择率:可以看到most_common_vals值为150,most_common_freqs:0.935033,则:a=150的选择率:0.935033

步骤3:a=37选择率:

(1-null_frac-mcf)*  n_distinct/ 桶数量 * (桶上边界-桶下边界)/ (桶最大边界值-桶最小边界值)

=(1-0-0.935033)* 102/(100) * (38-37)/(101-1)=0.0006626634

相关参考:

HCCDE-GaussDB相关计算题

第7题:计算2表关联的行数估算

2表关联的行数估算,主要是通过关联字段的基数与distinct值计算出来的。现有一张A表总行数为1W行,a列n_distinct值为0.2,有一张B表总行数为1.2W行,B表a列n_distinct值为0.25,如果A表的a列与B表a列做为关联条件,请问A表与B表做连接行数估算是多少行?

解:

HCCDE-GaussDB相关计算题

则: 表1行数* 表2行数 /max(d1,d2)

d1=0.2 * 10000=2000

d2=0.25 * 12000 = 3000

连接行数=(10000*12000)/ max(2000,3000)

=40000行

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...