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子查询,降低查询性能。 •减少使用影响性能的脚本 有的脚本的使用会影响我们加载报告的速度,降低性能,特别影响性能的脚本有:循环,二次计算,复杂逻辑判断,动态效果。
|