分享到

[深度用户分享]第五弹:业务层报表性能优化技巧分享

资讯 2023-2-22 11:03 905人浏览 1人回复
摘要

说明文章是部分永洪BI在应用层简单、实用的性能优化技巧说明,方便前台业务人员自行设置。不涉及软件部署、分布式架构性能优化及SQL脚本等需其他系统配合的优化设置。适用于应用较大数据量拉取清单、宽表及制作看板 ...


说明


文章是部分永洪BI在应用层简单、实用的性能优化技巧说明,方便前台业务人员自行设置。不涉及软件部署、分布式架构性能优化及SQL脚本等需其他系统配合的优化设置。适用于应用较大数据量拉取清单、宽表及制作看板等类似场景,优化查看报告体验,减少庞大数据量对加载报表、数据抽取过程带来的冲击。



后台优化

服务请求并发量:数据库

较多的用户量:永洪C节点

以上两点带来的压力均可以通过对数据库节点和永洪服务C节点的计算性能提升、增加节点、负载均衡三个角度进行优化,这里不作具体说明。

前台优化

按照数据流动顺序和优化优先级先后作说明,尽量靠前做的数据处理比在后面做对报表性能提要明显好的多。

SQL数据集

减少数据量

Where条件:对于某些行业,企业的数据库表中可能存储了10年以上甚至更多的数据,而对于大部分的前台业务用户一般只会用到近三年或一年,所以为了避免过量的数据入集市我们可以在取数SQLwhere条件中特别注意对时间维度的限制,其他某些维度的筛选也同理。对于统计需求的全部历史数据,也应尽量采用Hive等方式提数,敏捷BI不适用作为这样的媒介。





只抽取能用到的字段:尽量不要select * from table_name,大量用不到的字段入到数据集中对每次数据抽取都是资源和性能的浪费。

提前数据加工

一方面数据仓库中的ETL工作难免有些地方没有为报表开发做考虑,另一方面可能两个环节不属于同一个项目组或负责人无法得到有效沟通,我们可以在能力范围内尽量做优化。

以如下的2个永洪BI产品功能为例,在性能优化为主的场景下,就可以将产品的一些ETL功能优化到SQL中,减少产品计算资源占用,提升响应速度。

数据分箱、缺失值填充:一些数据范围或是取值的映射可以通过case when语法实现



计算列、拆分裂、日期表达式、生成参数等:substr、<peopleid> and 申请人编号=?{peopleid}</peopleid> 等。

组合数据集

SQL过滤:在BI系统中,最源头的数据量筛选和字段过滤都在SQL取数中的效果最好,组合数据集本身这样的关联操作也可以通过不同的join on实现。下面是在组合数据集的过滤优化效果由高到低的排列。

组合数据集join前的过滤




组合后过滤





制作报告的组件数据过滤





制作报告

参数、数据源

SQL取数时语句生成参数:<peopleid> and 申请人编号=?{peopleid}</peopleid>

尽量复用已有的参数、可在超链接传递参数到跳转页面生效,使用参数替代过滤的全局效果

避免列表参数大量的多选项产生的切片带来的数据查询压力



尽可能的避免使用多个数据源,或使用多个数据量较大的表;多个报告使用同一个数据源较好,因此建议尽量将源数据在数据仓库中做成专用于BI展现的宽表



脚本、计算列

编程角度:脚本和表达式语法自身的优化

脚本:

运行顺序:报告脚本(装载时运行)à报告脚本(提交时运行)à组件脚本(装载试运行)à组件脚本(提交时运行)

尽量将全局生效的脚本和装载时运行的脚本写在报告脚本中,只针对某个组件生效的脚本或有提交等效果时写在组件脚本中,同样尽量复用参数和代码块。

计算列:

计算列尽可能在数据集或数据库表中完成

制作报告中新建计算列尽量使用SQL语法表达式下推到数据库执行

最差的实现方式才是采用非SQL语法生成计算列,建议尽量使用产品自带的函数

产品自带性能优化






检测性能:在制作报告时,系统会对报表性能进行静态检测,告知用户哪些地方会影响报表展示并给出合理的建议。报表性能检测原因分为三类,包括系统原因、报表原因和数据集原因。https://www.yonghongtech.com/help/Z-Suite/9.4/ch/make_visual_dashboard_performancehelp_detect.html

报告执行过程:可以动态分析当前报告下组件的执行时间,帮助定量分析报告执行情况若报告中组件较多,加载速度缓慢,想要对比分析各组件的具体耗时情况,以优化报告性能,可以使用该功能动态的追踪和分析对报告性能影响较大的组件。

https://www.yonghongtech.com/help/Z-Suite/9.4/ch/make_visual_dashboard_performancehelp_detect.html



系统配置

转队列并发量限制:req.trans.max.jobs=转队列最大并发数值

某些使用场景提取清单数据下载较大的表格文件会配置转队列功能,转队列任务运行过程中会持续在后台请求数据占用资源,权衡系统配置通过参数对最大并发数做限制可以减少性能的损失。

行数限制:max.load.rows=报表或组件加载数据的最大行数

该行数限制不影响导出数据,因此对于数据量较大的报表,可以配置此参数,优化查看报告的加载速度,仍然可以导出全量真实数据。

用户权限控制

如果每个用户都有全部报告和数据集的权限将会对资源占用非常大, 因此权限控制不只是对部门之间数据安全和资产分割的授权,通过机构表限制用户仅可以查看自己机构或部门下的数据可以减少资源占用,从而加快系统响应速度。



其他参数

永洪类似可自定义做限制的参数还有很多,用户可以再帮助中心自行探索应用。





结语


文章内容均为工作中使用永洪BI总结的真实经验,希望给类似场景的老师用户带来帮助。个人梳理难免有纰漏或不足,欢迎在评论区指出、补充。



下一弹预告:永洪BI常见报错处理分享

评论
905人参与,1条评论

精彩评论

查看全部评论>>

0 文章2 人气
BI、ETL、大数据、架构运维
热门问答
  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |联系社区管理员|《永洪社区协议》
返回顶部