biee性能优化

0
 需求就是针对biee性能的优化,我新建报表,抓取sql ,sql如下:selectcount(distinct nvl(case

when T67365.DELETE_FLG = 'N'and T67365.ORG_FLG = 'N' and T67365.PRTNR_FLG = 'N'and T67365.ACCNT_FLG = 'Y' and T81742.ACCNT_FLG = 'Y'then T157680.ROW_WID end,0)) as c1,
T67365.X_HSHLDHD_OCC_CD as c2
from W_PARTY_ORG_D T67365,
     W_ASSET_F
T81742 /* Fact_W_ASSET_F */,

W_PARTY_D
T157680
where (T67365.ROW_WID = T157680.PARTY_ORG_WIDand
        T81742.CUSTOMER_WID =T157680.ROW_WID and

       T67365.X_ACCNT_TYPE_CD <> '公司客户')
group byT67365.X_HSHLDHD_OCC_CD
报表返回需要1分多,但是我直接在数据库里面执行也需要1分半左右,


W_ASSET_F这个表的记录是500w多行
这只是其中的一个例子,但是其他的sql 也是同样的,在数据库里面执行需要的时候也很长
针对这样的问题,怎么能从biee的角度来实现biee的优化呢?
 
已邀请:
3

汪照坤(KhunOne) - 坚持到底! 产品架构设计、数据预测分析 2015-08-17 回答

因为你单独执行sql的速度和BIEE出报表的速度差不多,所以这个优化需要在数据库层面进行:1.根据跟踪的sql,在plsql中查看执行计划,看是否数据库有走索引等。
2.根据需求,报表展示的字段,合理创建事实表。如:根据不同维度层级新建不同粒度的事实表。
除此之外,你也可以:
1.RPD模型的设计需要合理,维度和事实表关联字段要一致,最好都以number类型做关联。
2.如果数据经常使用的是最近几个月的数据,但是事实表包含多年的数据,可以适当做历史表分类。
3.也可以使用RPD的碎片功能。
(设计时候,尽量保证select的数据没有常年不用的数据。)
3

yang8889 - 80后IT男 2015-09-02 回答

1、尽量减少表的关联,能放一张表里的,就不放两张表进行关联;
2、尽量使用汇总表,最好不要所有分析都是从最明细的表里汇总上来。
3、关联字段最好number,减少char的使用。
3

seng - 从事BI、大数据、数据分析工作 2015-09-02 回答

看你的SQL是标准的星型模型, 语句没看出问题, 500w的数据理论上不会存在问题。
一般来说数据库优化(非系统参数调整),步骤如下
1.收集统计信息
2.查看执行计划是否按你的想法执行,以上的语句我觉得表连接方式是hash join
3.如果预计是使用索引执行计划却没有,那就调整吧
4.数据量再大考虑增加并行度

以上都基于你的数据库机器的配置了,特别是IO的性能.
0

依依 - BI爱好者 2015-08-18 回答

  ↵
谢谢你的回答啊!!1,我看了执行计划,有走索引
2,根据不同维度层级新建不同粒度的事实表,这个我没有做,能简单的给我举个例子么?新建的事实表是不是就是根据不同的维度算出数量
3,rpd的碎片功能,能简单的讲解一下么?
多谢了!!!

要回复问题请先登录注册