Re: Optimizer "enhancements" in 19.9?

From: Mohamed Houri <mohamed.houri_at_gmail.com>
Date: Wed, 17 Feb 2021 16:43:13 +0100
Message-ID: <CAJu8R6jweKhDJn6PJg8obNyVO-E2dLYt8oQ+Vd2gJaLHVOLQqQ_at_mail.gmail.com>



It looks like, in the 19.9 version, Oracle has refused to *unnest* the subquery: *IN (select max(to_date(to_char(a.lastmoddat)*

Indeed, the FILTER predicate which appears in the unnested version of your second execution plan acts as a NESTED LOOPS would do which has certainly degraded the performance of your query.

If this is a COST BASED canceled transformation then hinting your query like below will work around the problem

SELECT     e1.ename,

    e1.sal,

    e1.deptno

FROM     emp e1

WHERE     sal = (

        SELECT /*+ opt_param('_unnest_subquery' 'false') */

            MAX(e2.sal)

        FROM             emp e2

        WHERE             e2.deptno = e1.deptno

    );

But, if 19.9 introduces a new limitation to the subquery unnesting transformation then we need to know what this limitation is?

Best regards

Mohamed

Le mer. 17 févr. 2021 à 15:02, Charles Schultz <sacrophyte_at_gmail.com> a écrit :

> Good day,
>
> tl&dr - what changed in 19.9 to cause the optimizer to 1) favor SORT
> AGGREGATE over HASH JOIN, and 2) profiles generated under 19.8 fail basic
> validity checks under 19.9?
>
> We have a query that performs well under 19.8, but horrible under 19.9.
> After isolating the issue to be a result of the October 2020 RU, I tried to
> compare 10053 trace event outputs (and was further surprised by how the
> formatting of the 10053 trace has changed a little bit), and I found that
> 19.8 is favoring a HASH JOIN, while 19.9 was favoring the nested-loop-like
> SORT AGGREGATE. I have not yet figured out the new jargon used in 19.9 to
> be able to determine exactly why the optimizer chose SORT AGGREGATE over a
> HASH JOIN - still working on that.
>
> Another fascinating item I have observed is that the outline/profile
> generated with coe_xfr_sql_profile under 19.8 is actually invalid under
> 19.9 - the 19.9 10053 trace shows:
> Hint Report:
> Query Block: SEL$2
> Unused: UNNEST(_at_"SEL$2")
> reason: Failed basic validity checks
>
> We are testing with two Enterprise Edition databases, one still at 19.8,
> the other patched to 19.9 this morning (Wednesday, Feb 17).
>
> The query is (I didn't write it, and I have already shown that a rewrite
> with CTE works around the problem):
> SELECT NOTES.NOTETEXT as NOTETEXT, NOTES.ENTITYID as ENTITYID,
> NOTES.ENTITYSUBTYPEID as ENTITYSUBTYPEID FROM NOTES WHERE
> to_date(to_char(NOTES.LASTMODDATE,'yyyymmdd') || to_char
> (NOTES.LASTMODTIME,'hh24miss'),'yyyymmddhh24miss')
> IN (SELECT MAX(to_date(to_char(A.LASTMODDATE,'yyyymmdd') || to_char
> (A.LASTMODTIME,'hh24miss'),'yyyymmddhh24miss'))
> FROM NOTES A
> WHERE A.ENTITYSUBTYPEID=NOTES.ENTITYSUBTYPEID
> AND A.ENTITYID=NOTES.ENTITYID)
> /
>
> The query plan in 19.8:
>
> ----------------------------------------+-----------------------------------+
> | Id | Operation | Name | Rows | Bytes | Cost | Time
> |
>
> ----------------------------------------+-----------------------------------+
> | 0 | SELECT STATEMENT | | | | 12K |
> |
> | 1 | HASH JOIN | | 621 | 458K | 12K |
> 00:02:27 |
> | 2 | VIEW | VW_SQ_1 | 329K | 17M | 11K |
> 00:02:12 |
> | 3 | HASH GROUP BY | | 329K | 11M | 11K |
> 00:02:12 |
> | 4 | TABLE ACCESS FULL | NOTES | 374K | 13M | 7720 |
> 00:02:33 |
> | 5 | TABLE ACCESS FULL | NOTES | 4889 | 1681K | 100 |
> 00:00:02 |
>
> ----------------------------------------+-----------------------------------+
>
> The query plan in 19.9:
>
> ---------------------------------------+-----------------------------------+
> | Id | Operation | Name | Rows | Bytes | Cost | Time
> |
>
> ---------------------------------------+-----------------------------------+
> | 0 | SELECT STATEMENT | | | | 2814M |
> |
> | 1 | FILTER | | | | |
> |
> | 2 | TABLE ACCESS FULL | NOTES | 377K | 130M | 7738 | 00:02:33
> |
> | 3 | SORT AGGREGATE | | 1 | 35 | |
> |
> | 4 | TABLE ACCESS FULL | NOTES | 1 | 35 | 7719 | 00:02:33
> |
>
> ---------------------------------------+-----------------------------------+
>
> Bottom line question for you all - what changed in 19.9 to cause this?
>
> --
> Charles Schultz
>

-- 

Houri Mohamed

Oracle DBA-Developer-Performance & Tuning

Visit My         - Blog <http://www.hourim.wordpress.com/>

Let's Connect -
<http://fr.linkedin.com/pub/mohamed-houri/11/329/857/>*Linkedin
Profile <http://fr.linkedin.com/pub/mohamed-houri/11/329/857/>*

My Twitter <https://twitter.com/MohamedHouri>      - MohamedHouri
<https://twitter.com/MohamedHouri>

--
http://www.freelists.org/webpage/oracle-l
Received on Wed Feb 17 2021 - 16:43:13 CET

Original text of this message