- 测试环境
鲲鹏920(64core、64GB),三台服务器
两块本地盘(dd工具测试读速度约为1GB/s,dd测试参数bs=16384,count=1000000),每个盘上启动8个segment实例
Tpch数据量200GB
操作系统:kylin v10
- 测试考虑影响性能的因素
- Segment实例个数选择
Segment实例基本的出发点是在服务器硬件(主要是内存)允许的情况下,尽量越多越好,增加segment实例的个数可以对最终性能带来直接的提升,但随着segment实例个数的增加可能会导致第18各sql报内存不足错误。和statement_mem参数设置多大有关,本次经多次尝试,在statement_mem设置为2GB的情况下,单机segment实例最多启动16个。实例设置过多性能反而下降,尝试增加statement_mem为3GB,跑第18条SQL的时候报内存不足。在200GB的测试数据量,3太服务器的测试条件下,单机segment个数可以从内存的1/4开始,也就是16个。虽然鲲鹏920有64个cpu线程,但感觉单核的性能是x86的1/4,所以根据x86服务器cpu和内存1:4的经验值,相当于16c,64GB的配置。这里的经验就是有多少cpu core就设置多少segment实例。
- 大表是否分区
实例测试Lineitem分区比不分区性能要好
- Shared buffer参数设置
本次测试shared buffer设置为512MB,提高到1GB,对性能影响不大
- Statement_mem参数设置
提升该参数可以对性能有正面影响,但设置过高后会影响segment实例的个数,并且设置过大后,对性能提升作用不大,感觉还是以尽可能的多segment实例为首要考虑因素
- 索引是否创建
对lineitem(200GB测试数据的情况下有大约12亿条记录)创建索引,对SQL 1性能提升不大,根据SQL 1的查询条件,实例需要扫描大约11亿的记录,所以不会用索引。
- Maintance_work_mem参数设置
对该参数设置过大的值(大于1GB)对性能影响不大。
- Wal_buffer参数
对该参数设置过大的值(大于1GB)对性能影响不大。
- 操作系统参数(磁盘挂载参数、磁盘调度算法、sysctl.conf参数、磁盘blockdev设置) --本节参数不讨论,参考GP官方文档设置
- 表存储模型
本次测试使用列存模型,zlib压缩,压缩因子5。
- 测试感想
第二节讲到的各种参数应该和测试的总数据量、测试物理服务器个数(3个服务器和5个服务器,每个服务器上启动的segment个数不一样)、服务器内存大小(64GB和256GB启动的segment实例不一样)这三个因素相关,这三个因素进而决定segment实例的个数,我认为segment实例的个数最终决定tpc-h测试的最终效果。一条原则就是,在内存和磁盘带宽允许的条件下,尽量启动最多的segment。Segment启动的个数还受限于本机磁盘的I/O带宽,尽量使用多块本地盘并行来分散I/O压力。初始segment的启动个数可以根据:内存:CPU:segment=4:1:1作为基准,逐步调试statement_mem参数,求一个性能最优的平衡
- 在第一节的测试条件下的测试结果