快捷搜索:  汽车  科技

jmeter测试结果tps怎么看(从TPCH测试学习性能优化技巧之)

jmeter测试结果tps怎么看(从TPCH测试学习性能优化技巧之)p_partkey = l_partkeywhere sum(l_extendedprice) / 7.0 as avg_yearlyfrom lineitem part

从 TPCH 测试学习性能优化技巧之 Q17一、 查询要求

Q17语句查询获得比平均供货量的百分之二十还低的小批量订单。对于指定品牌和指定包装类型的零件,决定在一个七年数据库的所有订单中这些订单零件的平均项目数量(过去的和未决的)。如果这些零件中少于平均数20%的订单不再被接纳,那平均一年会损失多少呢?所以此查询可用于计算出如果没有小量订单,平均年收入将损失多少(因为大量商品的货运,将降低管理费用)。

Q17语句的特点是:带有聚集、聚集子查询操作并存的两表连接操作。

二、 Oracle执行

Oracle编写的查询SQL语句如下:

select /* parallel(n) */

sum(l_extendedprice) / 7.0 as avg_yearly

from

lineitem part

where

p_partkey = l_partkey

and p_brand = 'Brand#33'

and p_container = 'LG DRUM'

and l_quantity < (

select

0.2 * avg(l_quantity)

三、 SPL优化

这种在子查询中用等值条件与主表关联的情况,都可以转换成JOIN来计算,从而可以利用JOIN的优化技术。

select /* parallel(n) */

sum(l_extendedprice) / 7.0 as avg_yearly

from

lineitem part

(select l_partkey lp 0.2*avg(l_quantity) lq

from lineitem

group by l_partkey

) lpq

where

p_partkey = l_partkey

and p_brand = 'Brand#33'

and p_container = 'LG DRUM'

and l_partkey=lp

and l_quantity < lq

这相当于对lineitem表进行两次外键匹配过滤,其中一个外键表是子查询计算出来的中间表lpq,而因为是内连接,lpq中涉及到的partkey也只在part表过滤后的范围内,因此可以复用part表的过滤。

SPL脚本如下:

jmeter测试结果tps怎么看(从TPCH测试学习性能优化技巧之)(1)

脚本执行时间,单位:秒

jmeter测试结果tps怎么看(从TPCH测试学习性能优化技巧之)(2)

四、 进一步优化

在前面的SPL脚本中,A7和A9中对lineitem表按part表外键过滤遍历了两次。如果服务器内存足够,可以把过滤后的结果保存在内存中,无需第二次遍历读数,性能将会提高不少,因为lineitem表数据量很大。

SPL脚本如下:

jmeter测试结果tps怎么看(从TPCH测试学习性能优化技巧之)(3)

A7.cursor@m(A1)利用SPL提供的内存并行计算技术将内存中的序表A7变成多路游标,可以利用并行计算来提速。

A7中取出过滤后的lineitem表数据,A9中对取出的数据集按L_PARTKEY分组计算每种零件的平均订单量的20%,与原数据集连接后,A11中再重复利用此数据集来计算。

脚本执行时间,单位:秒

jmeter测试结果tps怎么看(从TPCH测试学习性能优化技巧之)(4)

可见,优化后速度有较大的提升。

jmeter测试结果tps怎么看(从TPCH测试学习性能优化技巧之)(5)

友乾营是专注数据技术的知识分享平台。这里,你将有机会与近百位技术专家共同沟通交流,寻找优势互补,达成资源对接。另外,友乾营将定期(每两周一次,周三晚19:30)安排专题技术直播活动。

欢迎IT从业者或对数据相关技术感兴趣的人员入群交流、分享。共同打造“有热度的话题,有温度的情感,有深度的思想,有高度的评论”高品质的友乾营社群。

识别下面二维码,在页面上加友乾营小助手为好友

jmeter测试结果tps怎么看(从TPCH测试学习性能优化技巧之)(6)

猜您喜欢: