【发布时间】:2017-09-30 00:50:07
【问题描述】:
我的两个客户最近升级到Oracle 12c 12.1.0.2。自从升级以来,我在使用带有外连接的视图的查询上遇到了显着的性能下降。下面是一个简单查询的示例,它在旧的Oracle 11g 11.2.0.2 数据库上运行几秒钟,但在新的12c 数据库上运行几分钟。更令人困惑的是,此查询在 12c 数据库之一上运行得相当快(但不是那么快),但在另一个数据库上则根本不运行。 12c 数据库的性能非常糟糕,以至于我开发的报告无法使用。
我比较了11g 和两个12c 数据库之间的索引和系统参数,并没有发现任何显着差异。但是,Execution Plans 之间存在差异。在11g 上,外连接表示为VIEW PUSHED PREDICATE,但在12c 上,它表示为HASH JOIN,没有PUSHED PREDICATE。
当我在12c 数据库上的查询中添加提示/*+ NO_MERGE(pt) PUSH_PRED(pt) */ 时,性能在几秒钟内。
在我们的Crystal Reports 中,向 SQL 添加提示不是一个选项(至少我不这么认为,而且有几份报告),所以我希望我们能弄清楚为什么在一个 12c 上性能是可以接受的数据库,但不在另一个数据库上。
我和我的团队对接下来要尝试什么感到困惑,尤其是为什么两个 12c 数据库之间的响应如此不同。我们在12c 中研究了几篇关于性能下降的文章,但似乎没有什么特别适用于这个特定问题。作为补充说明,使用表而不是视图的查询在可接受的时间范围内返回结果。任何见解或建议将不胜感激。
查询:
select pi.*
, pt.*
from policyissuance_oasis pi
, policytransaction_oasis pt
where
pi.newTranKeyJoin = pt.polTranKeyJoin(+)
and pi.policyNumber = '1-H000133'
and pi.DateChars='08/10/2017 09:24:51' -- 2016 data
--and pi.DateChars = '09/26/2016 14:29:37' --2013 data
order by pi.followup_time
【问题讨论】:
-
这些图片不可读。请从问题中删除位图并使用简单文本格式附加您的查询。还请附加问题视图的定义作为文本,而不是位图。还请附上解释计划,作为文本而不是位图。要以文本格式生成解释计划,请使用以下步骤顺序:
EXPLAIN PLAN FORM select .... your query然后SELECT * FROM table(DBMS_XLAN.display),然后复制最后一个查询的结果作为文本并将其粘贴到问题中。跨度> -
感谢您的 cmets,@krokodilko。一旦我能找出正确的格式,我将添加请求的文本对象!抱歉,我是新手!
-
您是否收集了统计数据?我知道这个问题听起来很傻,但只是为了检查......
-
我们需要查看您的表和索引定义。
-
您必须运行
EXPLAIN PLAN FOR query...,然后立即运行SELECT * FROM table(DBMS_XPLAN.display)。如果你在任何其他命令之间运行,那么你会得到一个错误。请阅读the documentation of EXPLAIN PLAN。