找文章 / 找答案
精选问答 更多内容

定位到影响性能原因后,如何进行优化?常见优化方法如下

Lydia 显示全部楼层 发表于 5 天前 |阅读模式 打印 上一主题 下一主题
1. 概述
通过检测性能和报告执行过程,我们可以定位到影响性能的原因,接下来可以按情况进行性能优化,这个介绍一些比较常见的优化方法。

2. 优化方法
2.1 优化系统性能
•调整系统配置参数,控制加载时的数据量限制。
•提升系统内存。

2.2 优化数据集
• 不要有1万条数据以上的跨数据库的组合查询
原因:跨数据库的自服务数据集不能下推到数据库内计算,会将两个数据库的数据抓取到内存中进行计算,占用大量内存的同时,也会在服务器上生成大量临时文件。
•不要有1万条数据以上的SQL数据集和非SQL数据集的join操作
原因:大数据量的SQL数据集和非SQL数据集的join也不能下推到数据库中进行计算,会占用大量的内存以及拖慢报告的整体性能。
•数据量一千万以上的表不要进行复杂的联接计算
原因:联接是非常影响性能的,不要“明细表”联接“明细表”,防止系统崩溃。在多个表做联接操作时,要提前知道每个表的数据量,关联条件,对结果集有个预判,避免笛卡尔积的出现,导致系统计算量过大,占用大量系统资源,造成性能下降。
•数据集提前过滤
原因:数据集在进行关联计算之前先过滤出有效的数据,可以降低需要进行联接的数据量,提高性能。
•减少不必要的字段进行计算
原因:冗余字段在进行联接或者其他操作的时候这些字段也会进行计算。

2.3 优化报表
•使用多个筛选组件时,做批量提交功能
原因:批量提交的作用是,在设置好多个过滤条件的时候,只有当点击提交的时候,才会下推一条sql语句到数据库中计算,完成数据的过滤。当没有设置批量提交的时候,每改变一个选择条件,都会下推一条 sql 语句到数据库中,当数据量大的时候,会占用较长的线程时间,后面再发出的申请只能等待线程释放,造成报表卡顿,无法再次操作的现象,也会令其他的用户在看报表的时候,一直加载,无法显示报表内容。
•维表中数据相对于事实表来讲要少,有维表的情况下筛选器要绑定维表中的字段,取消过滤组件之间的关联,当过滤条件超4个的话,用参数组件代替过滤组件进行过滤
原因:关联时一个过滤组件的值变化,其他过滤组件的数据也会跟着联动,相当于向数据库又发了一条sql,影响性能。
•报表中不要大量的使用文本框、仪表等组件,一屏不超过6个
原因:一个绑定字段的组件相当于一个查询,过多的查询影响报表打开的速度。
•不要用图表组件展示明细数据,会导致加载缓慢
•不要使用不能下推到数据库内计算的过滤条件
原因:过滤里如果某个过滤条件不能下推到数据库,会导致整体的过滤条件都不能下推到数据库。
•能用普通表和交叉表实现的功能,不要用自由式表格
原因:自由式表格的计算性能不如普通表和交叉表,如果使用太多脚本表达式会导致加载慢,且计算越复杂,返回数据的时间也就越长,组件加载也就越缓慢。因此,除了一定要用自由表才能实现的功能,其他情况下选用普通表和交叉表来实现。
•自由表不要绑定太多的数据源
原因:自由式表格区别于普通表和交叉表,自由式表格支持绑定多数据源,但数据源越多越慢。自由式表格的每个单元格都会发起一次查询,使用的数据源越多,跨源计算也就越多,导致加载速度变慢。
•打开报表时设置不加载全部数据,在页面上加参数根据参数过滤后进行少量数据展现
原因:大量的明细数据从数据库执行出来后,通过网络带宽传输到系统,报表的打开速度取决于sql在数据库执行时间以及网络对数据的传送速度。加载全部数据会影响报表的打开速度,慢且占用内存,大量的内存占用会影响系统的整体性能,并可能引发系统宕机的风险。
•数据集上的样本行数不要选择全量数据
原因:制作报告时,每一次操作上都会有一次查询,如果使用全量数据制作报告,每次计算都用全量数据,也会由于数据量太大导致每次操作时间过长。
•通过业务分离、逻辑分层,分为多报告展示,通过超链接进行逐层展示
原因:不同业务分析内容放到一个报告或者为了达到美化作用,单个报告组件过多,会导致报告打开缓慢,问题排查困难。
•汇总数据报表和大量明细展示报表不建议放到一张报告中
原因:汇总数据由于数据量相对少,放在单个报告中打开速度较快,和展示明细数据的组件组成一张报告加载就相对较慢,可以通过超链的方式进行跳转,以提高报告加载性能。
•一张报告不要设置超过6个标签页
原因:各标签页在加载时,如果有使用相同的过滤器参数或其他数据依赖关系,都会提前进行数据加载,影响数据加载性能,所以不要设置超过6个。
•无特殊情况不要设置组件的刷新间隔,若设置应至少大于3min
间隔刷新,其实是发送http请求更新数据,如果设置间隔刷新的组件有多个,且刷新频率高,会触发大量的http请求,导致页面卡顿,且影响其他页面的正常打开。
•减少多粒度表达式的使用
fixed函数由于计算某个维度内的某一行的值,会生成SQL子查询,降低查询性能。
•减少使用影响性能的脚本
有的脚本的使用会影响我们加载报告的速度,降低性能,特别影响性能的脚本有:循环,二次计算,复杂逻辑判断,动态效果。

回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

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

    扫码关注
  • 新浪微博

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

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

会员等你来哦

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