本文对大量列(1000),小文件(1万-10万行)的加载性能进行测试,不同版本配置,对比V8和V9版本的性能提升情况。
列数不同的测试结果,请参考 GBase 8a在V95版本不同列、不同行数文件加载性能测试对比
目录导航
结论
针对1000列这类宽表,结论如下:
V9整体性能比V8提升30%以上,与V9元数据合并后磁盘io次数大幅减少有关。
更多的CPU核数在处理大文件时效果提升明显。
每次处理小数据(1万以内)可以开启事务,大数据不要开启事务。
单核
V9加载性能比V8,在1万行以内有50%提升,10万行有9%的提升。
V95版本在开事务后,在低于1000行(注意同时是1000列),性能比不开事务有50-90%提升。超过1万则性能下降4%-20%。
四核
V8四核对比单核,在小文件时,性能会略有下降,超过1万行后有19-32%的提升
V9四核相对单核,基本有25-54%的提升。
v9四核比V8四核,1万以内有73-81%的提升,大文件有39-58%的提升。
V9四核事务对比无事务,在低于10万行时有27-85%的提升,达到10万则下降了24%。
详细记录
行数 | 文件 大小 | V9 | V9 事务 | V9 四核 | V9 四核 事务 | V8 | V8 四核 | V9单核 对比 V8单核 | V9单核 事务 对比 无事务 | V8 四核 对比 单核 | V9 四核 对比 单核 | V9四核 对比 V8四核 | V9四核 事务 对比 无事务 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
10 | 55K | 7.36 | 0.73 | 4.12 | 0.67 | 23.22 | 21.91 | 68% | 90% | 6% | 44% | 81% | 84% |
100 | 553K | 7.74 | 0.67 | 5.84 | 0.89 | 21.76 | 25.88 | 64% | 91% | -19% | 25% | 77% | 85% |
1000 | 5.4M | 11.25 | 5.51 | 6.81 | 1.69 | 22.66 | 25.60 | 50% | 51% | -13% | 39% | 73% | 75% |
10000 | 55M | 15.35 | 18.87 | 11.88 | 8.63 | 35.23 | 28.57 | 56% | -23% | 19% | 23% | 58% | 27% |
100000 | 540M | 109 | 113 | 50.02 | 62.00 | 120 | 82 | 9% | -4% | 32% | 54% | 39% | -24% |
环境
采用的是虚拟机,1核/4核,4G内存。宿主机是笔记本电脑,SSD盘。
[root@gbase_rh7_002 ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 142
model name : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
stepping : 9
cpu MHz : 2712.004
cache size : 3072 KB
V9单节点集群
版本 9.5.2.36.125743
[gbase@gbase_rh7_001 ~]$ gcadmin showcluster vc vc01
CLUSTER STATE: ACTIVE
VIRTUAL CLUSTER MODE: NORMAL
==========================================================
| GBASE VIRTUAL CLUSTER INFORMATION |
==========================================================
| VcName | DistributionId | comment |
----------------------------------------------------------
| vc01 | 1 | first vc with one node |
----------------------------------------------------------
=========================================================================================================
| VIRTUAL CLUSTER DATA NODE INFORMATION |
=========================================================================================================
| NodeName | IpAddress | DistributionId | gnode | syncserver | DataState |
---------------------------------------------------------------------------------------------------------
| node1 | 10.0.2.101 | 1 | OPEN | OPEN | 0 |
---------------------------------------------------------------------------------------------------------
1 data node
V8单节点集群
8.6.2.33-R43.123184
[gbase@gbase_rh7_002 ~]$ gcadmin
CLUSTER STATE: ACTIVE
CLUSTER MODE: NORMAL
==========================================================
| GBASE COORDINATOR CLUSTER INFORMATION |
==========================================================
| NodeName | IpAddress |gcware |gcluster |DataState |
----------------------------------------------------------
| coordinator1 | 10.0.2.102 | OPEN | OPEN | 0 |
----------------------------------------------------------
======================================================
| GBASE DATA CLUSTER INFORMATION |
======================================================
|NodeName | IpAddress |gnode |syncserver |DataState |
------------------------------------------------------
| node1 | 10.0.2.102 | OPEN | OPEN | 0 |
------------------------------------------------------
[gbase@gbase_rh7_002 ~]$
测试表
1000列的随机分布表,全部都是int类型,因为在这么多列的表的业务里,都是存指标数据的,以int,decimal为主。
测试数据
用如下脚本随机生成。根据循环次数,生成不同行数的数据。
[gbase@gbase_rh7_001 50c]$ cat ../gen.sh
rows=$1
cols=$2
sign=$3
let "cols2=cols-1"
for((i=1;i<=rows;i++))do
for((k=1;k<=cols2;k++))do
echo -n "${RANDOM}," >> ${cols}_${rows}${sign}.txt;
done;
echo $RANDOM >> ${cols}_${rows}${sign}.txt;
done;
[gbase@gbase_rh7_001 50c]$ cat ../genx.sh
rows=$1
cols=$2
this_dir=`dirname $0`
let "rows2=rows/10"
for((i=0;i<10;i++))do
sh ${this_dir}/gen.sh $rows2 $cols "_${i}_tmp" &
done
wait
for((i=0;i<10;i++))do
cat ${cols}_${rows2}_${i}_tmp.txt >> ${cols}_${rows}.txt
rm -f ${cols}_${rows2}_${i}_tmp.txt
done
[gbase@gbase_rh7_001 50c]$
如下命令,生成10万行,1000列的数据,注意这个级别时间可能要很久,小时级。如果你有更好的生成工具,建议自己生成数据测试。
sh gen.sh 100000 1000
文件大小如下
[root@gbase_rh7_002 ~]# ll /home/gbase/*.txt -h
-rw-rw-r--. 1 gbase gbase 5.4M Feb 3 08:18 /home/gbase/1000.txt
-rw-rw-r--. 1 gbase gbase 553K Feb 3 08:18 /home/gbase/100.txt
-rw-rw-r--. 1 gbase gbase 56K Feb 3 08:18 /home/gbase/10.txt
-rw-rw-r--. 1 gbase gbase 540M Feb 3 08:39 /home/gbase/10w.txt
-rw-rw-r--. 1 gbase gbase 55M Feb 3 08:39 /home/gbase/1w.txt
测试方法
重复5-10次本地加载数据文件,记录结果。
V9开启事务的方法
修改gcluster配置文件,增加 gcluster_transaction_disable=0
修改gnode配置文件,增加gbase_tx_log_mode=USE,STANDARD_TRANS
然后重启集群。
gbase> show variables like '%disable%';
+----------------------------------+-------+
| Variable_name | Value |
+----------------------------------+-------+
| _gbase_bsi_check_disable | OFF |
| _gbase_disable_condition_reorder | 0 |
| _gbase_transaction_disable | 1 |
| gbase_disable_encrypt | OFF |
| gcluster_transaction_disable | 0 |
+----------------------------------+-------+
5 rows in set (Elapsed: 00:00:00.00)
gbase> ^CAborted
[gbase@gbase_rh7_001 ~]$ gncli
GBase client 9.5.2.36.125743. Copyright (c) 2004-2021, GBase. All Rights Reserved.
gbase> show variables like '%tx%';
+------------------------------+----------------------------+
| Variable_name | Value |
+------------------------------+----------------------------+
| _gbase_tx_log_check_interval | 2 |
| _gbase_tx_log_compress | ON |
| gbase_tx_log_dir | /opt/gbase/gnode/translog/ |
| gbase_tx_log_flush_size | 512 |
| gbase_tx_log_flush_time | 0 |
| gbase_tx_log_mode | USE,STANDARD_TRANS |
| tx_isolation | REPEATABLE-READ |
+------------------------------+----------------------------+
7 rows in set (Elapsed: 00:00:00.00)
gbase> ^CAborted
加载命令样例
如下用1行数据做样例。
gbase> load data infile 'ftp://gbase:gbase1234@10.0.2.101/1.txt' into table testload fields terminated by ',';
Query OK, 0 rows affected (Elapsed: 00:00:00.35)
Task 4099 finished, Loaded 0 records, Skipped 1 records
结果汇总
行数 | V9 | V9事务 | V8 | V8四核 | V9四核 | V9四核 事务 |
10 | 6.42 8.57 8.45 8.18 5.16 | 1.21 0.94 0.54 0.47 0.47 | 27.58 25.95 21.87 22.08 18.61 | 21.98 21.78 20.8 23.87 21.14 | 4.25 3.75 4.42 4.06 4.14 | 0.5 0.8 0.61 0.8 0.62 |
10平均 | 7.36 | 0.73 | 23.22 | 21.91 | 4.12 | 0.67 |
100 | 8.53 8.00 8.10 6.32 7.75 | 0.68 0.84 0.6 0.66 0.59 | 21.67 21.51 22.23 21.9 21.48 | 26.06 23.22 27.15 26.85 26.14 | 6.08 5.14 6.98 6.87 4.14 | 0.73 0.69 1.19 0.67 1.19 |
100平均 | 7.74 | 0.67 | 21.76 | 25.88 | 5.84 | 0.89 |
1000 | 8.96 9.13 18.90 9.40 6.26 9.21 18.80 14.15 8.74 8.96 | 1.8 1.59 1.64 38.69 3.12 1.7 1.65 1.65 1.61 1.64 | 23.23 22.35 22.34 23.7 21.69 | 28.51 27.27 20.38 27.78 24.04 | 6.04 8.64 6.29 6.05 7.04 | 1.59 1.6 1.59 1.57 2.09 |
1000平均 | 11.25 | 5.51 | 22.66 | 25.60 | 6.81 | 1.69 |
10000 | 14.63 15.59 16.27 14.16 18.44 14.06 14.33 | 12.52 13.26 12.31 35.19 14.27 12.23 12.64 13.02 13.13 12.39 59.82 16.56 18 | 36.22 35.71 33.82 34.68 35.02 47.66 29.88 35.3 31.97 34.52 32.19 35.84 38.68 31.76 | 23.07 29.11 31.39 27.47 31.82 | 13.24 10.67 12.35 11.33 11.82 | 8.9 8.5 8.56 8.71 8.49 |
1万平均 | 15.35 | |||||
100000 | 1:47.24 1:40.37 1:49.68 1:54.84 1:53.09 | 02:13.7 01:44.6 01:53.7 01:44.0 01:51.6 | 02:04.5 02:10.1 01:55.0 01:54.5 01:59.6 | 01:36.0 01:15.0 01:26.5 01:15.1 01:25.9 01:14.8 | 44.02 50.58 49.58 49.49 49.47 57.01 | 01:26.4 00:56.0 00:57.8 01:06.4 00:56.6 00:52.4 |
10万平均 | 109 | 113 | 120 | 82 | 50.02 | 62.00 |