测试环境说明
CPU:4颗,主频2.6G,每个CPU内核数8个。
硬盘:800G,15000转SAS硬盘,理论读写速度150m/s。
内存:64G。
操作系统:Linux cent os 6
SQL1
select
l_returnflag,
l_linestatus,
sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price,
avg(l_discount) as avg_disc,
count(*) as count_order
from
lineitem
where
l_shipdate <= date '1998-12-01' - interval '90' day(3)
group by
l_returnflag,
l_linestatus
order by
l_returnflag,
l_linestatus;
LineItem表原始数据大小为79.6G(文本格式),数据行数600037902。
Oracle空间文件大小为200G,lineItem表数据导入时间20个小时。
SQL运行时间为637秒。
在SQL里增加并行选项select /*+ parallel(lineitem 10) */后,运行时间下降到397秒。
用集文件执行
集文件为集算器支持的数据文件格式。特点是对数据进行一定的压缩,以提高查找和计算的磁盘性能。
集文件结构简单,应用范围明确,其生成速度远远高于oracle的数据导入速度。lineitem数据导入仅需48分28秒,最终生成的集文件大小为56.9G。
用集文件改写上面SQL的SPL脚本如下:
A |
|
1 |
=now() |
2 |
=file(path+"lineitem.btx") |
3 |
=A2.cursor@b( |
4 |
=A3.select(L_SHIPDATE<=date(“1998-09-02”))</ |