大数据一直被定义为3V(数量大,速度快,多样性) ,为了支撑数据分析服务的正常运行,BI工具的报表快速处理能力也需要与时俱进。
比如亿信ABI中,同样一个查询需求,为什么别人的计算结果获取时间从1分钟变成3秒钟?可能是你不知道ABI具有性能调优的精髓所在。
为了解决广大BI工程师的调优难题,今天从SQL个数和过滤条件两个方面来跟大家分享一下,亿信ABI的性能调优小诀窍。
在数据表格统计分析中,当一张报表中有多个分析报表时,系统需要生成多条SQL语句来完成数据查询结果。SQL数量的增多,势必会影响数据分析的查询效率。为了解决这个问题,亿信ABI优化了“并行计算”的功能。
并行计算就是将多个查询SQL并行执行,可提升多表格的计算效率;这里举几个例子,让大家直观感受一下。
测试场景一:
数据库与产品共用同一台PC机资源,耗时由10次重复计算得到的平均耗时:
测试数据如下所示:
测试场景二:
数据库与产品共用同一台PC机资源,耗时由10次重复计算得到的平均耗时;
测试数据如下所示:
通过几个测试场景的对比,可以看出,在多表格多分析区的场景下,开启并行计算。最大化的利用系统资源,可以让你的报表计算速度产生质的飞越。那么设置方式是什么呢?
无!需!任何设置,亿信ABI就会自动进行多表格的并行计算。
BUT,如果由于某种原因,需要关闭并行计算,可以这么设置:
在“资源管理器”下的目录:
/root/products/eanalysemgr/conf/setup.conf 下配置属性值
@set_calc_threadmode值为none即可,如果不存在对应目录,可手动自行创建哦。
截图如下所示:
亿信ABI分析表中的过滤条件在报表计算时都会转换成SQL语句中的where条件,在大数据量的情况下,where条件不够优化,会直接导致SQL语句运行效率低下,最直接的表现就是SQL语句执行时没用到索引或者用到的索引不够好。
那什么样的过滤能构成一个质量上乘的where子句?什么样的过滤一定会造成where子句效率的损失?我们在编写BI报表过滤条件时又该注意哪些问题呢?本例以数据库Oracle为例来给大家深入解读一二。
举例如下:
优化前:
主题表ESEN_BI的列pid上有索引,原过滤条件写法为:
left(ESEN_BI.pid,1)>='1'
and
left(ESEN_BI.pid,1)<='3'
由于在列上用了left函数并且使用的是不等运算符,因此BI无法直接优化为like操作,只能将left转换为sql中的substr函数,结果就破坏了走索引的可能性;
优化后:
(ESEN_BI.pid like '1%' or
ESEN_BI.pid like '2%'or
ESEN_BI.pid like '3%')
该sql查询会走索引,在测试环境经过验证,这个过滤所在的分析表计算速度由原来的7分钟直接提速到了14秒。
养成良好的过滤条件编写习惯。在理解业务过滤需求的基础上,尽可能的用简洁实用的表达式来编写。编写过滤条件时,可以使用以下3个小技巧:
最后再给大家几个与索引相关的小建议,赶紧拿出你的小本本记下来吧:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。