Strange cell offload behavior

  • From: Lok P <loknath.73@xxxxxxxxx>
  • To: Oracle L <oracle-l@xxxxxxxxxxxxx>
  • Date: Sun, 23 May 2021 22:12:35 +0530

Hello Listers,

Its version 19C of oracle and optimizer_features_enable 19.1.0.

While working on a separate issue, we came across a situation which is a
bit odd. A simple SELECT query fetching ~13 columns from a table - TAB1
showing odd behaviour. Sometimes within seconds and sometimes more than a
minute. When , It was running for more than a minute , it happened to be
clear that it's not doing cell offloading from its sql monitor. And then by
just removing one column from its SELECT list , the smartscan started
happening and the query finished in a few seconds.

Then I started running the same query for all the ~13 columns in the SELECT
list but this time by setting session level "serial_direct_read"= always.
And here we see the smart scan again started happening and the query
finished in quick time. Is this behaviour because of any bug ? Because I
have not seen any such criteria in which the smartscan is restricted by the
number of columns in the SELECT list.

 Attached is the sample table script with the test case which produces the
above scenario.  Table TAB1 is a non partition table with size ~7GB and
there are ~64million rows in it.

Note- Its a third party database and we see few of the optimizer parameters
set to non default as its clear from the outline section. But at least none
of these should be impacting the choice of smartscan.


SELECT      A_ID,       A_ACTN,       RNM,       FNM,       OVL,
 NWVL,       COL1,       COL2,       COL3,       COL4,       COL5,
 COL6,       COL7
  FROM USER2.TAB1
 WHERE     OVL <> NWVL
       AND (   (RNM = 'XXXX' AND COL1 = '1')
            OR (RNM = 'YYYY' AND COL1 = '1'))

Regards
Lok
************* Create table script***************

CREATE TABLE USER2.TAB1
(
  A_ID  VARCHAR2(30 CHAR)                NOT NULL,
  A_STMP  TIMESTAMP(6),
  A_ACTN   VARCHAR2(1 CHAR)                 NOT NULL,
  RNM      VARCHAR2(15 CHAR)                NOT NULL,
  FNM    VARCHAR2(18 CHAR)                NOT NULL,
  OVL     VARCHAR2(254 CHAR)               NOT NULL,
  NWVL     VARCHAR2(254 CHAR)               NOT NULL,
  COL1         VARCHAR2(65 CHAR)                NOT NULL,
  COL2         VARCHAR2(65 CHAR)                NOT NULL,
  COL3         VARCHAR2(65 CHAR)                NOT NULL,
  COL4         VARCHAR2(65 CHAR)                NOT NULL,
  COL5         VARCHAR2(65 CHAR)                NOT NULL,
  COL6         VARCHAR2(65 CHAR)                NOT NULL,
  COL7         VARCHAR2(65 CHAR)                NOT NULL,
  COL8         VARCHAR2(65 CHAR)                NOT NULL,
  COL9         VARCHAR2(65 CHAR)                NOT NULL,
  COL10        VARCHAR2(65 CHAR)                NOT NULL,
  COL11        VARCHAR2(65 CHAR)                NOT NULL,
  COL12        VARCHAR2(65 CHAR)                NOT NULL,
  COL13        VARCHAR2(65 CHAR)                NOT NULL,
  COL14        VARCHAR2(65 CHAR)                NOT NULL,
  COL15        VARCHAR2(65 CHAR)                NOT NULL
)
TABLESPACE TBS1
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          1M
            NEXT             1M
            MAXSIZE          UNLIMITED
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
            CELL_FLASH_CACHE KEEP
           )
LOGGING 
NOCOMPRESS 
NOCACHE
MONITORING;


********************** Test case ****************************

SQL Monitoring Report

SQL Text
------------------------------
SELECT /*+ monitor test6*/
      A_ID,
       A_ACTN,
       RNM,
       FNM,
       OVL,
       NWVL,
       COL1,
       COL2,
       COL3,
       COL4,
       COL5,
       COL6/*,
       COL7*/
  FROM USER2.TAB1
 WHERE     OVL <> NWVL
       AND (   (RNM = 'XXXX' AND COL1 = '1')
            OR (RNM = 'YYYY' AND COL1 = '1'))
                        
Global Information
------------------------------
 Status              :  DONE (ALL ROWS)          
 Instance ID         :  2                        
 Session             :  USER1 (801:56452) 
 SQL ID              :  0btm2vq7jy9sf            
 SQL Execution ID    :  33554432                 
 Execution Started   :  05/23/2021 10:57:30      
 First Refresh Time  :  05/23/2021 10:57:30      
 Last Refresh Time   :  05/23/2021 10:57:31      
 Duration            :  1s                       
 Module/Action       :  SQL*Plus/-               
 Service             :  XXXXXXXXXXXXXXXX 
 Program             :  sqlplus.exe              
 Fetch Calls         :  2                        

Global Stats
=====================================================================================================================================
| Elapsed |   Cpu   |    IO    | Application | Fetch | Buffer | Read | Read  | 
Uncompressed |  Offload   |    Offload     |  Cell   |
| Time(s) | Time(s) | Waits(s) |  Waits(s)   | Calls |  Gets  | Reqs | Bytes |  
  Bytes     | Elig Bytes | Returned Bytes | Offload |
=====================================================================================================================================
|    0.09 |    0.08 |     0.01 |        0.00 |     2 |   908K | 114K |   7GB |  
        4MB |        7GB |            5MB |  99.93% |
=====================================================================================================================================

SQL Plan Monitoring Details (Plan Hash Value=2942457346)
=========================================================================================================================================================================
| Id |               Operation                |    Name    |  Rows   | Cost |   
Time    | Start  | Execs |   Rows   | Read | Read  |  Mem  | Activity | 
Activity Detail |
|    |                                        |            | (Estim) |      | 
Active(s) | Active |       | (Actual) | Reqs | Bytes | (Max) |   (%)    |   (# 
samples)   |
=========================================================================================================================================================================
|  0 | SELECT STATEMENT                       |            |         |      |   
      2 |     +0 |     1 |        3 |      |       |     . |          |         
        |
|  1 |   TABLE ACCESS STORAGE FULL FIRST ROWS | TAB1       |       1 | 147K |   
      2 |     +0 |     1 |        3 | 114K |   7GB |  12MB |          |         
        |
=========================================================================================================================================================================


                        
Outline Data
-------------
 
  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      OPT_PARAM('_unnest_subquery' 'false')
      OPT_PARAM('_optimizer_skip_scan_enabled' 'false')
      OPT_PARAM('_gby_hash_aggregation_enabled' 'false')
      OPT_PARAM('_optimizer_partial_join_eval' 'false')
      OPT_PARAM('_optimizer_aggr_groupby_elim' 'false')
      OPT_PARAM('_optimizer_reduce_groupby_key' 'false')
      OPT_PARAM('optimizer_index_cost_adj' 50)
      OPT_PARAM('optimizer_index_caching' 80)
      OPT_PARAM('_fix_control' '14033181:0')
      FIRST_ROWS(1)
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "TAB1"@"SEL$1")
      END_OUTLINE_DATA
  */
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - storage(("COL1"='1' AND INTERNAL_FUNCTION("RNM") AND "OVL"<>"NWVL"))
       filter(("COL1"='1' AND INTERNAL_FUNCTION("RNM") AND "OVL"<>"NWVL"))
 
Column Projection Information (identified by operation id):
-----------------------------------------------------------
 
   1 - "A_ID"[VARCHAR2,120], "A_ACTN"[VARCHAR2,4], "RNM"[VARCHAR2,60], 
       "FNM"[VARCHAR2,72], "OVL"[VARCHAR2,1016], "NWVL"[VARCHAR2,1016], 
       "COL1"[VARCHAR2,260], "COL2"[VARCHAR2,260], "COL3"[VARCHAR2,260], 
"COL4"[VARCHAR2,260], 
       "COL5"[VARCHAR2,260], "COL6"[VARCHAR2,260]


Statistics
----------------------------------------------------------
          3  recursive calls
          0  db block gets
     907558  consistent gets
     907395  physical reads
          0  redo size
       1117  bytes sent via SQL*Net to client
        500  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed

*****************************************


SELECT /*+ monitor test7*/
      A_ID,
       A_ACTN,
       RNM,
       FNM,
       OVL,
       NWVL,
       COL1,
       COL2,
       COL3,
       COL4,
       COL5,
       COL6,
       COL7
  FROM USER2.TAB1
 WHERE     OVL <> NWVL
       AND (   (RNM = 'XXXX' AND COL1 = '1')
            OR (RNM = 'YYYY' AND COL1 = '1'))
                        
                        

SQL Text
------------------------------

Global Information
------------------------------
 Status              :  DONE (ALL ROWS)          
 Instance ID         :  2                        
 Session             :  USER1 (801:56452) 
 SQL ID              :  1pkt94kfsfv07            
 SQL Execution ID    :  33554432                 
 Execution Started   :  05/23/2021 11:01:27      
 First Refresh Time  :  05/23/2021 11:01:27      
 Last Refresh Time   :  05/23/2021 11:02:40      
 Duration            :  73s                      
 Module/Action       :  SQL*Plus/-               
 Service             :  XXXXXXXXXXXXXXXX 
 Program             :  sqlplus.exe              
 Fetch Calls         :  2                        

Global Stats
================================================================
| Elapsed |   Cpu   |    IO    | Fetch | Buffer | Read | Read  |
| Time(s) | Time(s) | Waits(s) | Calls |  Gets  | Reqs | Bytes |
================================================================
|      79 |      21 |       58 |     2 |   908K | 114K |   7GB |
================================================================

SQL Plan Monitoring Details (Plan Hash Value=2942457346)
=================================================================================================================================================================
| Id |               Operation                |    Name    |  Rows   | Cost |   
Time    | Start  | Execs |   Rows   | Read | Read  | Activity | Activity Detail 
|
|    |                                        |            | (Estim) |      | 
Active(s) | Active |       | (Actual) | Reqs | Bytes |   (%)    |   (# samples) 
  |
=================================================================================================================================================================
|  0 | SELECT STATEMENT                       |            |         |      |   
     72 |     +2 |     1 |        3 |      |       |          |                 
|
|  1 |   TABLE ACCESS STORAGE FULL FIRST ROWS | TAB1       |       1 | 147K |   
     73 |     +1 |     1 |        3 | 114K |   7GB |          |                 
|
=================================================================================================================================================================


Outline Data
-------------
 
  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      OPT_PARAM('_unnest_subquery' 'false')
      OPT_PARAM('_optimizer_skip_scan_enabled' 'false')
      OPT_PARAM('_gby_hash_aggregation_enabled' 'false')
      OPT_PARAM('_optimizer_partial_join_eval' 'false')
      OPT_PARAM('_optimizer_aggr_groupby_elim' 'false')
      OPT_PARAM('_optimizer_reduce_groupby_key' 'false')
      OPT_PARAM('optimizer_index_cost_adj' 50)
      OPT_PARAM('optimizer_index_caching' 80)
      OPT_PARAM('_fix_control' '14033181:0')
      FIRST_ROWS(1)
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "TAB1"@"SEL$1")
      END_OUTLINE_DATA
  */
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - storage(("COL1"='1' AND INTERNAL_FUNCTION("RNM") AND "OVL"<>"NWVL"))
       filter(("COL1"='1' AND INTERNAL_FUNCTION("RNM") AND "OVL"<>"NWVL"))
 
Column Projection Information (identified by operation id):
-----------------------------------------------------------
 
   1 - "A_ID"[VARCHAR2,120], "A_ACTN"[VARCHAR2,4], "RNM"[VARCHAR2,60], 
       "FNM"[VARCHAR2,72], "OVL"[VARCHAR2,1016], "NWVL"[VARCHAR2,1016], 
       "COL1"[VARCHAR2,260], "COL2"[VARCHAR2,260], "COL3"[VARCHAR2,260], 
"COL4"[VARCHAR2,260], 
       "COL5"[VARCHAR2,260], "COL6"[VARCHAR2,260], "COL7"[VARCHAR2,260]


Statistics
----------------------------------------------------------
          3  recursive calls
          0  db block gets
     908127  consistent gets
     907395  physical reads
   35394640  redo size
       1175  bytes sent via SQL*Net to client
        500  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed



****************************
                  
alter session set "_serial_direct_read"=always;


SELECT /*+ monitor test8*/
      A_ID,
       A_ACTN,
       RNM,
       FNM,
       OVL,
       NWVL,
       COL1,
       COL2,
       COL3,
       COL4,
       COL5,
       COL6,
       COL7
  FROM USER2.TAB1
 WHERE     OVL <> NWVL
       AND (   (RNM = 'XXXX' AND COL1 = '1')
            OR (RNM = 'YYYY' AND COL1 = '1'))



SQL Text
------------------------------

Global Information
------------------------------
 Status              :  DONE (ALL ROWS)          
 Instance ID         :  2                        
 Session             :  USER1 (801:56452) 
 SQL ID              :  7c63a9zbuk5m7            
 SQL Execution ID    :  33554432                 
 Execution Started   :  05/23/2021 11:21:41      
 First Refresh Time  :  05/23/2021 11:21:41      
 Last Refresh Time   :  05/23/2021 11:21:41      
 Duration            :  .092809s                 
 Module/Action       :  SQL*Plus/-               
 Service             :  XXXXXXXXXXXXXXXX 
 Program             :  sqlplus.exe              
 Fetch Calls         :  2                        

Global Stats
=====================================================================================================================================
| Elapsed |   Cpu   |    IO    | Application | Fetch | Buffer | Read | Read  | 
Uncompressed |  Offload   |    Offload     |  Cell   |
| Time(s) | Time(s) | Waits(s) |  Waits(s)   | Calls |  Gets  | Reqs | Bytes |  
  Bytes     | Elig Bytes | Returned Bytes | Offload |
=====================================================================================================================================
|    0.09 |    0.08 |     0.01 |        0.00 |     2 |   908K | 114K |   7GB |  
        4MB |        7GB |            5MB |  99.93% |
=====================================================================================================================================

SQL Plan Monitoring Details (Plan Hash Value=2942457346)
=========================================================================================================================================================================
| Id |               Operation                |    Name    |  Rows   | Cost |   
Time    | Start  | Execs |   Rows   | Read | Read  |  Mem  | Activity | 
Activity Detail |
|    |                                        |            | (Estim) |      | 
Active(s) | Active |       | (Actual) | Reqs | Bytes | (Max) |   (%)    |   (# 
samples)   |
=========================================================================================================================================================================
|  0 | SELECT STATEMENT                       |            |         |      |   
      1 |     +0 |     1 |        3 |      |       |     . |          |         
        |
|  1 |   TABLE ACCESS STORAGE FULL FIRST ROWS | TAB1       |       1 | 147K |   
      1 |     +0 |     1 |        3 | 114K |   7GB |  12MB |          |         
        |
=========================================================================================================================================================================



Outline Data
-------------
 
  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      OPT_PARAM('_unnest_subquery' 'false')
      OPT_PARAM('_optimizer_skip_scan_enabled' 'false')
      OPT_PARAM('_gby_hash_aggregation_enabled' 'false')
      OPT_PARAM('_optimizer_partial_join_eval' 'false')
      OPT_PARAM('_optimizer_aggr_groupby_elim' 'false')
      OPT_PARAM('_optimizer_reduce_groupby_key' 'false')
      OPT_PARAM('optimizer_index_cost_adj' 50)
      OPT_PARAM('optimizer_index_caching' 80)
      OPT_PARAM('_fix_control' '14033181:0')
      FIRST_ROWS(1)
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "TAB1"@"SEL$1")
      END_OUTLINE_DATA
  */
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - storage(("COL1"='1' AND INTERNAL_FUNCTION("RNM") AND "OVL"<>"NWVL"))
       filter(("COL1"='1' AND INTERNAL_FUNCTION("RNM") AND "OVL"<>"NWVL"))
 
Column Projection Information (identified by operation id):
-----------------------------------------------------------
 
   1 - "A_ID"[VARCHAR2,120], "A_ACTN"[VARCHAR2,4], "RNM"[VARCHAR2,60], 
       "FNM"[VARCHAR2,72], "OVL"[VARCHAR2,1016], "NWVL"[VARCHAR2,1016], 
       "COL1"[VARCHAR2,260], "COL2"[VARCHAR2,260], "COL3"[VARCHAR2,260], 
"COL4"[VARCHAR2,260], 
       "COL5"[VARCHAR2,260], "COL6"[VARCHAR2,260], "COL7"[VARCHAR2,260]


Statistics
----------------------------------------------------------
          3  recursive calls
          0  db block gets
     907558  consistent gets
     907395  physical reads
          0  redo size
       1175  bytes sent via SQL*Net to client
        500  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed

Other related posts: