RE: Exadata Smart Scan/ORDER BY/Chained Rows

From: Jonathan Lewis <jonathan_at_jlcomp.demon.co.uk>
Date: Fri, 13 May 2016 10:11:48 +0000
Message-ID: <CE70217733273F49A8A162EE074F64D9282D3AA5_at_EXMBX01.thus.corp>


What's the level of table compression ?
How many columns in the table definition, and how many of them are likely to have been populated There are no stats reported about compression units - is this you being selective about the stats you're showing use.

The first set of stats suggest that you've got rows with more than 255 columns The second set of stats suggest that you've got columnar compression in place - which is why I ask about the reported stats

Key detail - your order by clause is on a column that's not in the select list, and the position of that column in the table definition could affect both the cost and the run-time mechanism that has to be used.

Regards
Jonathan Lewis
Send<https://webmail.demon.co.uk/owa/?ae=PreFormAction&a=ReplyAll&t=IPM.Note&id=RgAAAAD3x7gzDZuUQbmvte7pqTsiBwDOcCF3Myc%2fSaihYu4HT2TZAAAACimhAADOcCF3Myc%2fSaihYu4HT2TZAAAoLKgZAAAJ&pspid=_1463133384485_94279059#> http://jonathanlewis.wordpress.com
_at_jloracle



From: oracle-l-bounce_at_freelists.org [oracle-l-bounce_at_freelists.org] on behalf of Patrick Jolliffe [jolliffe_at_gmail.com] Sent: 13 May 2016 10:41
To: oracle-l
Subject: Exadata Smart Scan/ORDER BY/Chained Rows

Trying to understand some behaviour we are seeing on our Exadata instance (12.1.0.2). Below list some SQL statments, a selection of stats for each execution, and some analysis of chained rows.

First thing I am struggling with is that ORDER BY clause seems to stop smart scan from taking place. My understanding of mechanism is that the TABLE ACCESS STORAGE FULL step should be unaware of the parent operation. Also can see that storage and filter details are same in both cases. Note I have done some analysis and can see that 99% of table is in buffer cache so could understand that as a reason that smart scan is not taking place, but again I don't understand why the ORDER BY would make any difference.

Second, (not sure whether or not related) I don't understand why each block accessed seems to translate to a table fetch continued row. Per analysis we only have 22,000 chained rows.

Happy to provide any further details or statistics as required, but didn't want to overload the email. Note is Friday evening in my time zone, so apologies if I am not able to get required information for a couple of days.

Regard, Patrick

SQL> SELECT /*+MONITOR GATHER_PLAN_STATISTICS*/ NULL   2 FROM F4101Z1
  3 WHERE SZTYTN = 'JDEITEM' AND SZDRIN = '2' AND SZTNAC = 'UA'   4 AND (SZUPMJ > 116134 OR (SZUPMJ = 116134 AND SZTDAY >= 152503 ))   5 AND (SZUPMJ < 116134 OR (SZUPMJ = 116134 AND SZTDAY < 153003 ))   6 ORDER BY SZEDBT;


| Id  | Operation                  | Name    | Starts | E-Rows | A-Rows |   A-Time   | Buffers |

------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 0 |00:00:09.06 | 4987K| | 1 | SORT ORDER BY | | 1 | 1 | 0 |00:00:09.06 | 4987K| |* 2 | TABLE ACCESS STORAGE FULL| F4101Z1 | 1 | 1 | 0 |00:00:09.06 | 4987K|
------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):


   2 - storage((("SZUPMJ">116134 OR ("SZUPMJ"=116134 AND "SZTDAY">=152503)) AND

              "SZTNAC"=U'UA' AND "SZTYTN"=U'JDEITEM' AND "SZDRIN"=U'2' AND ("SZUPMJ"<116134 OR
              ("SZUPMJ"=116134 AND "SZTDAY"<153003))))
       filter((("SZUPMJ">116134 OR ("SZUPMJ"=116134 AND "SZTDAY">=152503)) AND
              "SZTNAC"=U'UA' AND "SZTYTN"=U'JDEITEM' AND "SZDRIN"=U'2' AND ("SZUPMJ"<116134 OR
              ("SZUPMJ"=116134 AND "SZTDAY"<153003))))

STAT    table scan rows gotten                                                   7,563,531
STAT    table scan blocks gotten                                                 1,254,770
STAT    table fetch continued row                                                1,265,216
STAT    logical read bytes from cache                                       40,857,534,464
********************************************************************************************************************************************
********************************************************************************************************************************************

-----------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | OMem | 1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 0 |00:00:01.10 | 1258K| 1254K| | | | |* 1 | TABLE ACCESS STORAGE FULL| F4101Z1 | 1 | 1 | 0 |00:00:01.10 | 1258K| 1254K| 1025K| 1025K| 3085K (0)|
-----------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):


   1 - storage((("SZUPMJ">116134 OR ("SZUPMJ"=116134 AND "SZTDAY">=152503)) AND "SZTNAC"=U'UA' AND "SZTYTN"=U'JDEITEM' AND

              "SZDRIN"=U'2' AND ("SZUPMJ"<116134 OR ("SZUPMJ"=116134 AND "SZTDAY"<153003))))
       filter((("SZUPMJ">116134 OR ("SZUPMJ"=116134 AND "SZTDAY">=152503)) AND "SZTNAC"=U'UA' AND "SZTYTN"=U'JDEITEM' AND
              "SZDRIN"=U'2' AND ("SZUPMJ"<116134 OR ("SZUPMJ"=116134 AND "SZTDAY"<153003))))

STAT    table scans (direct read)                                                        1
STAT    table scans (long tables)                                                        1
STAT    table scan blocks gotten                                                       736
STAT    table fetch continued row                                                    3,357
STAT    chained rows rejected by cell                                                3,358
STAT    chained rows skipped by cell                                                 3,358
STAT    table scan rows gotten                                                       4,253
STAT    chained rows processed by cell                                           3,729,316
STAT    physical read bytes                                                 10,279,075,840
********************************************************************************************************************************************
********************************************************************************************************************************************
ANALYZE TABLE CRPDTA.F4101Z1 LIST CHAINED ROWS INTO CHAINED_ROWS; select count(*) from chained_rows;

   22 695

select count(*) from CRPDTA.F4101Z1 ;
3 778 849

--
http://www.freelists.org/webpage/oracle-l
Received on Fri May 13 2016 - 12:11:48 CEST

Original text of this message