(三) 数据查询
系统和数据库参数的配置对数据库性能影响很大,因此,虽然在同一台机器上进行测试,也有必要为各种数据库采用相近的配置。这里,InfiniDB和Infobright均采用安装时默认的内存设置,一般为系统内存的25%。
Oracle的SGA和PGA设为默认的40%内存,由于其他数据库不可指定并行度,在Oracle测试时也不指定具体并行度而让查询优化器CBO自行决定。
Sybase的缓存大小对性能影响很大,我们把参数文件最后2个缓冲区大小设定为-iqmc 23768和-iqtc 24576。下面各个测试项目列出的均是采用修改参数文件后的结果。
1.原始tpch查询测试
为了测试的公平和一致,我们采用同一套数据和查询SQL语句,同时用于4种不同的数据库,第一次,只针对不同的数据库作语法修改,尽量不改变语句的结构。
测出的结果见原始tpch查询时间对比表。
▲
我们看到,infobright的表现还是不尽如人意。区区10GB数量级的数据,如果1个查询时间以小时计或者几十分钟,这样的性能基本不具备实用价值。在3.42 版scala为1时某些数据库执行效率很差的语句,在3.52 版scala为10时仍然较差。InfiniDB 2.02不支持的某些语句,在2.03版本仍然不支持,这也不足为奇,毕竟这不是一个大版本升级而只是一个bug修补版本。Oracle和Sybase在这方面表现不错,基本上所有的原始脚本都能执行,而且基本没有执行特别慢的语句,而且IQ的大部分查询都优于Oracle,可以看出列式数据库的优势。Oracle在启用并行后性能突飞猛进,所有查询都能在10秒以内完成。稍感意外的是,Sybase不支持其它三种数据库都支持的date''、interval''和extract from用法,只好改用date()、year()等函数。而用于限定结果集行数的top语句同limit或rownum的一个明显区别是要求结果集已经排序,否则虽然也能输出结果,但输出错误提示消息。
2.人工改写后的部分tpch等价查询测试
第二次,为了排除数据库的查询优化器对复杂查询产生的执行计划不合理的影响,我们用人工手段改写了Infobright一些耗时过长的查询,作为我们最终评测的统一的语句放到所有数据库上运行,同时为了解决某些种类数据库对某些SQL语法不支持的情况,InfiniDB额外采用了Calpont技术支持人员提供的等价语句,这样我们得到了下面的人工改写后的部分与tpch查询等价的各种数据库的时间对比表。
▲
修改后的语句相比原始tpch查询语句在Infobright当中有着显著的优势,那些运行几十分钟或几小时的查询基本上不到10分钟就能完成了,SQL表达式超过数字精度的语句,通过减少小数点后多余的后缀0也有了执行结果。了我们注意到,修改后的语句有些在Sybase和Oracle中运行时间变长,这是由于它们的优化器对原始tpc-h查询产生的执行计划已经足够好,而我们的修改未必是更好的,这也从一个侧面说明编写跨平台的查询语句,要在各种数据库上都取得较好的结果是多么不易。
我们将修改的测试记录(包括Calpont技术支持人员提供的等价语句)和原始测试记录按运行时间最短的结果进行合并,得到了如下优秀的解决方案表格,基本可以反映各种数据库在查询tpc-h时的最高性能。
▲