性能优化技巧:遍历复用提速多次分组

本文通过对比Oracle与SPL在分组汇总性能上的差异,探讨了遍历复用在性能优化中的作用。测试结果显示,SPL的遍历复用语法能有效减少硬盘访问次数,提高大数据运算性能,而Oracle在双分组时可能进行两次遍历,导致性能下降。
摘要由CSDN通过智能技术生成

我们知道,大数据运算性能的瓶颈常常是在外存(也就是硬盘)IO上,因为外存访问性能要比内存低一两个数量级。因此,做性能优化时,减少硬盘的访问量有时要比减少CPU计算量更为重要。同一个任务,如果能使用硬盘访问量更少的算法,即使CPU计算量不变甚至略多一点,也会获得更好的性能。

分组汇总需要对数据集进行遍历。同一个数据集可能会按不同维度进行分组,这样原则上就要遍历多次,大数据时就会涉及多遍硬盘访问。但是,如果我们能在一次遍历过程中计算出多个维度的分组结果,那就会减少很多硬盘访问量。

可惜,SQL无法写出这样的运算(在遍历中返回多个分组结果),只能遍历多次,或者寄希望于数据库引擎是否能优化。而SPL则支持这种遍历复用的语法,可以一次遍历计算出多个分组结果,从而提高性能。

下面我们做一下测试,以Oracle为例看数据库是否会对多次遍历的计算进行优化,以及在SPL中采用遍历复用算法对性能的影响。

 

一、      数据准备和环境

 

SPL脚本生成数据文件,数据共两列,第一列id是小于20亿的随机整数,第二列amount是不大于1千万的随机实数。数据记录为80亿行,生成的原始文本文件大小为169G。利用数据库提供的数据导入工具将此文件数据导入到Oracle的数据表topn中,同时也用此文件数据生成SPL组表文件topn.ctx。

在一台Intel服务器上完成测试,2个Intel3014 CPU,主频1.7G,共12核,内存64G。数据库表数据及SPL组表文件均存储在同一块SSD硬盘上。

这里刻意把数据量造得比内存大,以保证操作系统不可能把这些数据都缓存进内存,实际运算时一定会读取硬盘。

 

二、      Oracle测试

 

测试分成三种情况:单分组单倍计算量、单分组双倍计算量、双分组双倍计算量。

1.        单分组单倍计算量

select  /*+ parallel(12) */ mod(id,100) Aid,max(amount) Amax from topn group by mod(id,100)

 

2.  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值