TPCH10G 测试:OceanBase TiDB Oracle SPL

前几天听说 OceanBase 打榜了 TPCH 的第一名,之后又看到这样一个测试报告《OceanBase 开源版与 TiDB 对比测试报告》

先点评一下这个测试报告:

1. 坦白地说,这个测试还不太专业,并不能比出分布式大数据计算的关键能力。TPCH10G 的数据量相对于这些机器内存实在太小了(单机内存都超过数据量 18 倍以上)。这种情况下,再加上预热,数据已经全部缓存到内存了,列存基本不起作用,也就谈不上对比列存引擎的能力了。而且,数据量太小,会被作为小表复制到集群中的每个节点,分布式计算中重要的 Shuffle 能力也无法被考查到,网络负担仅仅是些汇总结果的传输,而 TPCH 的结果集都很小,这个时间可以忽略不计。

2. 目前这个数据量对比的是纯 CPU 计算能力,本质上是在对比 SQL 优化引擎的能力。如果直接按 SQL 书写的逻辑去计算,那计算量通常会很大,也就会很慢了。但数据库都会有优化,不会严格按 SQL 的逻辑来计算,会在不改变运算目标时尽量采用更低复杂的算法,就可能跑得更快了。从这个测试结果上看,TiDB 的 SQL 优化引擎要明显强过 OceanBase。

以往的经验,Oracle 的 SQL 优化引擎做得很好。如果不能在列存和集群上占便宜的话,很多专业 OLAP 数据库都跑不过 Oracle。而当前这个场景就是这样,数据量太小可以全部缓存进单机的内存,列存失去意义,集群也沦为简单地用多机分摊运算。所以我们猜测 Oracle 会比这两个都快,单机的 Oracle 甚至有可能跑过集群的 OceanBase。

之前我们还用 SPL 重写过 TPCH 并和 Oracle 对比《全国产计算数据库性能测试报告》。SPL 可以直接实现高性能算法而不必寄希望于数据库的优化引擎,相当于已经人为实现了优化。实测的结果表明,在大数据量(超过内存)时 SPL 能比 Oracle 有数倍的优势,这主要是因为列存以及好算法能减少外部缓存而造成的。但对于小数据量,这些环节的时间占比会少很多,估计就不会有明显优势了。

于是,造了一套 10G 的 TPCH 数据,并安装了 Oracle 和 SPL 在单机上分别跑,测试服务器 CPU 是 12 核 1.7G 的 Intel3014。结果如下:

单位:秒

TiDB

OceanBase

Oracle

SPL

96*2.4G

96*2.4G

12*1.7G

12*1.7G

Q1

0.82

2.82

2.93

3.74

Q2

0.42

1.17

0.63

0.62

Q3

0.43

1.90

2.14

1.87

Q4

0.37

2.63

1.62

1.37

Q5

0.61

3.37

3.34

2.15

Q6

0.12

1.64

0.88

0.97

Q7

0.32

2.86

15.90*

2.32

Q8

0.66

3.04

1.88

2.22

Q9

1.39

6.56

5.62

6.78

Q10

0.72

1.90

4.35*

1.72

Q11

0.29

0.63

0.30

0.70

Q12

0.27

1.41

1.63

1.98

Q13

0.46

1.29

2.35

6.49

Q14

0.26

0.43

1.09

1.31

Q15

0.31

1.27

1.28

1.36

Q16

0.29

0.75

1.06

1.33

Q17

0.78

6.51

1.26

1.79

Q18

0.94

1.55

8.65*

1.64

Q19

0.35

1.98

2.30

1.99

Q20

0.47

5.94

2.83

1.70

Q21

0.90

3.21

3.56

3.12

Q22

0.23

0.86

0.63

1.50

SUM

11.41

53.72

66.23

48.64


(前两列测试结果来自上述的测试报告)

Oracle 有三个查询可能执行路径被搞晕了,有点奇怪地慢,但也懒得给它再调优了。因为,即使这样,它的单机速度也基本上和 OceanBase 的集群相当了,如果再考虑到 CPU 核数和频率,可以认为还更快一些。

Oracle 单机速度赶不上 TiDB 集群了,但换算后核数和频率后,单位 CPU 的速度还是比 TiDB 要稍快一点。不过两者已经比较接近,看起来 TiDB 在 SQL 优化方面做得确实不错(Oracle 在这方面真地是一座高山),HTAP 中的 A 是很实在的。

之前猜测的结论基本都成立。

SPL 在小数据量上的复杂计算上仍然能占到便宜,但 Java 产生对象和计算上又吃点亏,总体结果和 Oracle 相比仍有优势但很小,可以算基本持平。这也和之前预计的一样。

OceanBase 在这个测试中表现的性能相对较弱,原因有可能如上述测试报告所言,开源版和用于打榜的企业版有差距,开源版中没有提供较好的 SQL 优化引擎,当然也有可能 OceanBase 的优化确实还不够好,因为 OceanBase 之前并没有作为 OLAP 数据库发展,在这方面下的功夫不够也算正常。而 TiDB 从事 HTAP 数据库已经有一段时间了,SQL 优化方面的积累相对丰富也不奇怪。至于 SPL,则是用不同的代码直接实现高性能算法(代码量其实比 SQL 更小),不会出现数据库优化引擎找不到合理执行路径的现象,所以虽然低层用 Java 实现却仍然能获得较好的运算性能,不过对程序员的要求会稍高一些。