南大通用GBase 8a针对宽表1000列的小文件加载不同版本配置性能测试

本文对大量列(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
四核
事务
V8V8
四核
V9单核
对比
V8单核
V9单核
事务
对比
无事务
V8
四核
对比
单核
V9
四核
对比
单核
V9四核
对比
V8四核
V9四核
事务
对比
无事务
1055K7.360.734.120.6723.2221.9168%90%6%44%81%84%
100553K7.740.675.840.8921.7625.8864%91%-19%25%77%85%
10005.4M11.255.516.811.6922.6625.6050%51%-13%39%73%75%
1000055M15.3518.8711.888.6335.2328.5756%-23%19%23%58%27%
100000540M10911350.0262.00120829%-4%32%54%39%-24%
GBase 8a各版本加载1000列int类型不同行数数据的性能对比结果

环境

采用的是虚拟机,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

结果汇总

行数V9V9事务V8V8四核V9四核V9四核
事务
106.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.360.7323.2221.914.120.67
1008.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.740.6721.7625.885.840.89
10008.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.255.5122.6625.606.811.69
1000014.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
1000001: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万平均1091131208250.0262.00
结果汇总表

附件

V8测试记录

V9无事务记录

V9开启事务记录

V9部分时间段iostat输出记录

V8四核CPU测试记录

V9四核CPU测试记录