调整OBIEE生成的SELECT查询

时间:2016-03-17 12:28:31

标签: sql oracle etl data-warehouse obiee

我们将Oracle 11g上的数据集市/仓库实现为星型模式。业务报告使用OBIEE设计。我来自ETL背景,对OBIEE知之甚少。

设计完OBIEE RPD之后,我看到OBIEE开始在后台生成SELECT查询以将数据提供给报告。在很多情况下,我注意到SELECT查询没有被优化(大事实表在单独的WITH子句中被多次完全扫描)。

当报告性能不佳时,OBIEE查询将发送到ETL团队进行性能调整。我对如何调整它们很困惑,因为它们是自动生成的。我知道有一个选项可以在OBIEE中编写自定义sql(不通过RPD),但我们的标准不允许这样做,我也认为它没有利用OBIEE的好处。

有没有人遇到过像上面这样的问题?如何调整此类查询?

4 个答案:

答案 0 :(得分:2)

首先,你是对的,自定义SQL(称为直接数据库查询)原则上不是一个好主意,虽然它偶尔会有用。但这不是你问题的解决方案。

为OBI开发人员调整生成的OBI查询是OBI RPD任务;为生成的OBI查询调优数据库是一个数据库/ ETL任务。但是如果没有其他的话你就不能真正做到 - 需要设计OBI以生成合适的查询,并且需要设计数据库以便能够生成合适的良好的查询。回答被问到的问题。

OBI基本上是一个SQL生成器,如果RPD模型 bad 次优,则生成的查询将 bad 次优。 OBI将根据RPD中有关数据和数据库的布局和结构的信息生成SQL。

你显然是从数据库那里来的,所以对你来说SQL很糟糕,因为它不是你写的。数据库设计也可能无法回答正在询问OBI的问题。

答案 1 :(得分:2)

正如jackohug所说,OBIEE是一个SQL生成器,一般的方法是尝试优化OBIEE生成的查询,而不是尝试更改此查询。不知何故,根据性能问题,你可以尝试一些技巧。 首先,你的桌子是否被分开,你的报告可以从分配中受益? 其次,在事实表上添加索引,以便维度上的任何过滤器都可以使对事实表的访问受益。 第三,构建agregate表,恢复事实表,所以当报告没有显示太多细节时,你首先访问agregate表的数据要少得多,并且只有当用户向下钻取结构时(并且这样做时,他们正在对他们感兴趣的数据应用过滤器,他们可以访问详细的事实表,但应用过滤器以避免完全扫描。 您也可以告诉OBIEE在访问表时使用提示,但是,与直接数据库查询一样,我不推荐它,我会尝试首先使用前三个方法进行优化。 此致

答案 2 :(得分:1)

如果您有诊断和调优包许可证,则可以运行SQL Tuning Advisor。 SQL Tuning Advisor在调优模式下运行优化器,它可能能够生成具有更好执行计划的SQL配置文件。有时顾问会推荐用于调整的索引。 SQL配置文件和索引都不需要更改应用程序。

答案 3 :(得分:0)

我还没有在SQL调优顾问方面取得多大成功。在SQL调优和一些研究方面的一些经验通常可以产生更好的计划。

如果所有图层都构建良好并且您需要的只是最后的调整,那么使用SQL提示在报告的开头添加一个隐藏的列(答案/分析)。

我会非常小心地通过RPD层添加提示,因为其他人将加入和使用表格的方式有很多不同和意想不到的方式。