GBase8a内存需求评估参考
南大通用GBase8a复杂应用内存配置建议
从以下几个方面考量数据库运算过程中单个 GBase 集群节点(gnode)各算子的内存需求(假定 10 节点集群):
参与运算的数据量
以一个2 亿行的表与3 千万行的表进行 join 运算,并对 join 运算结果进行 groupby聚集,最终得到的结果行数为 1.5 亿行的场景为例。参与运算的数据量为 2.3 亿行,超过 100GB(不含不参与运算的字段),得到的结果集也超过 80GB:对于10节点集群,每节点承载的运算数据量超过 8GB,保守评估每节点运算数据量为10GB。
sql执行过程中的中间结果集大小
如两表 join 生成的 hash table 的尺寸大小; sql 执行过程中生成的临时表的大小;这些中间结果集的大小通常不会小于参与运算的原始数据量。延用上例场景,假设每个 gnode 的中间结果集大小也为 10GB。
sql 并发数
客户的业务通常都要求数据库支撑 5~100 个不等的并发。
总结
综上,单个集群节点在上述场景下的内存需求为 10~20GB,在 10个类似 sql 场景并发,单个 gnode 的数据库运算内存需求为 100GB 以上,此外还应为 gnode 分配20GB 以上的内存用于数据缓存。
按照数据库使用操作系统总物理内存 60~80%的比例,在上述场景下,建议单服务器的总物理内存为 120G/0.8=150G 以上。
按照项目工程经验,复杂应用中多以 hashjoin、group by、order by 等数据库运算为主;在 gnode 服务器内存配置为 128G~200G,混合型(包含多种数据库运算)复杂应用中, GBase 集群的算子 buer 大小可如下设置(考虑并发场景,且并发数在10~20 之间):
gbase_buffer_distgrby=2G
gbase_buffer_hgrby=4G
gbase_buffer_hj=4G
gbase_buffer_sj=2G
gbase_buffer_sort=4G
gbase_buffer_result=2G
gbase_buffer_rowset=2G
并发场景情况下,还需考虑GBase集群的gbase parallel degreegbase parallel max thread in pool 参数配置。
南大通用GBase8a简单查询类的内存配置建议
主要应用场景为电信行业的话单查询业务。
针对该类型场景的内存评估,主要依赖于热数据的比例和数据量。热数据的总量即为内存需求量。
以某运营商的云话单为例,以月表方式存储6+1个月的历史数据:每天的数据量为600GB;一个月的总数据量为600GB/天*30天/月=18T,全数据生命周期内的总数据量为 600GB/天*30天/月*7个月=126T;
云话单查询主要以当月数据查询为主,可定义当月的话单数据即为热数据,假设话单查询的字段个数只占总字段个数的 1/3,则热数据的总量约为 18TB/3=6TB,即在最理想情况下 GBase 集群需要 6TB 的内存缓存全部热数据。
GBase集群的列存储特性所具备的高压缩比、智能索引,以及配合高性能的磁盘IO,可以在减少对大内存的依赖的情况下,满足高性能的查询要求。根据项目经验,内存缓存 50%左右的热数据即可满足云话单的查询性能要求。即 GBase 集群的总体内存需求为 6TB*50%=3TB,按照数据库服务器内存利用率为 60%~80%计算,推荐GBase 集群的总内存为 3TB/0.8=3.75TB;假设集群的节点个数为 15,则每 GBase 集群节点的内存配置为 3750GB/15=250GB。
注:
如果服务器内存有限,且应用场景对性能要求不高,可以参考 2.1硬件配置建议中的内存参数配置,控制每个节点最大使用内存数量。
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526