Índice do fórum Treinamentos Avançados Treinamento Oracle Tuning - SQL Query mal feita - comportamento estranho

Query mal feita - comportamento estranho

Dúvidas, dicas e atualizações sobre o Treinamento Oracle Tuning - SQL.

Mensagem Qui Abr 16, 2015 12:57 pm

Mensagens: 0
Pessoal, gravei um vídeo com um caso bem estranho. Expliquei pro Portilho via Skype, mas achei mais fácil gravar para mostrar o que acontece.

https://www.youtube.com/watch?v=tdaP7mV0hIQ

Segue anexo também um print screen do select na V$SQL: está criando childs para cada vez que executo a mesma query.

O que pode causar esse comportamento?
Anexos
717.png
717.png (77.05 KiB) Exibido 4227 vezes


Mensagens: 0
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('bs3dgshd1rtuf',0));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID bs3dgshd1rtuf, child number 0
-------------------------------------
select * from (select qr.*, ROWNUM rn from (SELECT * FROM
V_UIW_REL_DIVERGENCE_DEV WHERE upper(CARGA) like '%1302129%') qr where
ROWNUM <= 200) where rn >= 0
Plan hash value: 4165110479
--------------------------------------------------------------------------------
| Id | Operation | Name | Row
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | VIEW | |
|* 2 | COUNT STOPKEY | |
| 3 | NESTED LOOPS OUTER | |
|* 4 | HASH JOIN OUTER | |
| 5 | NESTED LOOPS | |
| 6 | NESTED LOOPS | |
|* 7 | HASH JOIN | |
|* 8 | HASH JOIN | |

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|* 9 | HASH JOIN | |
|* 10 | TABLE ACCESS FULL | DIVERGENCE_HIST |
| 11 | VIEW | V_UIW_INVLINE_FULL | 14
| 12 | SORT UNIQUE | | 14
| 13 | UNION-ALL | |
| 14 | TABLE ACCESS FULL | INV_LINE | 1
| 15 | TABLE ACCESS FULL | INV_LINE_HIST | 13
| 16 | TABLE ACCESS FULL | ARTICLE | 4
| 17 | VIEW | V_UIW_INVOICE_FULL | 4
| 18 | SORT UNIQUE | | 4
| 19 | UNION-ALL | |
| 20 | TABLE ACCESS FULL | INVOICE |
| 21 | TABLE ACCESS FULL | INVOICE_HIST | 4
| 22 | TABLE ACCESS BY INDEX ROWID | MANDATOR |
|* 23 | INDEX RANGE SCAN | IDX_MA_CNPJ |
| 24 | VIEW | V_UIW_LOAD_FULL |
| 25 | SORT UNIQUE | |
| 26 | UNION ALL PUSHED PREDICATE | |
|* 27 | TABLE ACCESS BY INDEX ROWID | LOAD |
|* 28 | INDEX UNIQUE SCAN | SYS_C0015322 |
|* 29 | TABLE ACCESS BY INDEX ROWID | LOAD_HIST |

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|* 30 | INDEX RANGE SCAN | IDX_LOH_LO_ID |
| 31 | VIEW | V_EA_FULL |
| 32 | UNION-ALL | |
| 33 | TABLE ACCESS FULL | ENTRANCE_AUTHORIZATION |
| 34 | TABLE ACCESS FULL | ENTRANCE_AUTHORIZATION_HIST |
| 35 | VIEW PUSHED PREDICATE | V_WMS_INBOUND_FILIAL |
| 36 | SORT GROUP BY | |
| 37 | VIEW | |
| 38 | SORT UNIQUE | |
| 39 | NESTED LOOPS | |
| 40 | NESTED LOOPS | |
| 41 | TABLE ACCESS BY INDEX ROWID| INVOICE |
|* 42 | INDEX RANGE SCAN | IDXINV_LO |
|* 43 | INDEX RANGE SCAN | IDX_MA_CNPJ |
| 44 | TABLE ACCESS BY INDEX ROWID | MANDATOR |
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("RN">=0)

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
2 - filter(ROWNUM<=200)
4 - access("L"."LO_ID"="EA"."EA_LO_ID")
7 - access("DIVERGENCE_HIST"."DIH_INVID"="INV"."INV_ID")
8 - access("DIVERGENCE_HIST"."DIH_ATID"="ARTICLE"."AT_ID" AND "IL"."IL_ATID"=
9 - access("DIVERGENCE_HIST"."DIH_ILID"="IL"."IL_ID")
10 - filter(("DIVERGENCE_HIST"."DIH_STATUS"=2 AND ("NBITFILTER"("DIVERGENCE_HI
"NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",2)=1 OR "NBITFILTER"("DI
"NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",8)=1 OR "NBITFILTER"("DI
"NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",64)=1)))
23 - access("INV"."INV_MA_CNPJ"="MANDATOR"."MA_CNPJ")
27 - filter(("LO_LOADTYPE"=3 OR "LO_LOADTYPE"=4 OR "LO_LOADTYPE"=6))
28 - access("LO_ID"="INV"."INV_LOID")
filter(UPPER(TO_CHAR("LO_ID")) LIKE '%1302129%')
29 - filter(("LOH_LOADTYPE"=3 OR "LOH_LOADTYPE"=4 OR "LOH_LOADTYPE"=6))
30 - access("LOH_LO_ID"="INV"."INV_LOID")
filter(UPPER(TO_CHAR("LOH_LO_ID")) LIKE '%1302129%')
42 - access("INV_LOID"="L"."LO_ID")
43 - access("INV_OWNER"="MA_CNPJ")

81 rows selected

SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('bs3dgshd1rtuf',1));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID bs3dgshd1rtuf, child number 1
-------------------------------------
select * from (select qr.*, ROWNUM rn from (SELECT * FROM
V_UIW_REL_DIVERGENCE_DEV WHERE upper(CARGA) like '%1302129%') qr where
ROWNUM <= 200) where rn >= 0
Plan hash value: 1580942050
--------------------------------------------------------------------------------
| Id | Operation | Name | Ro
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | VIEW | |
|* 2 | COUNT STOPKEY | |
| 3 | NESTED LOOPS OUTER | |
| 4 | NESTED LOOPS OUTER | |
|* 5 | HASH JOIN | |
| 6 | VIEW | V_UIW_LOAD_FULL |
| 7 | SORT UNIQUE | |
| 8 | UNION-ALL | |

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|* 9 | TABLE ACCESS FULL | LOAD |
|* 10 | TABLE ACCESS FULL | LOAD_HIST |
| 11 | NESTED LOOPS | |
| 12 | NESTED LOOPS | |
| 13 | NESTED LOOPS | |
|* 14 | HASH JOIN | |
|* 15 | TABLE ACCESS FULL | DIVERGENCE_HIST | 23
| 16 | NESTED LOOPS | |
| 17 | NESTED LOOPS | |
| 18 | VIEW | V_UIW_INVLINE_FULL | 1
| 19 | SORT UNIQUE | |
| 20 | UNION-ALL | |
| 21 | TABLE ACCESS FULL | INV_LINE | 2
| 22 | TABLE ACCESS FULL | INV_LINE_HIST |
|* 23 | INDEX UNIQUE SCAN | PK_AT_ID |
| 24 | TABLE ACCESS BY INDEX ROWID| ARTICLE |
|* 25 | VIEW | V_UIW_INVOICE_FULL |
| 26 | SORT UNIQUE | | 31
| 27 | UNION-ALL | |
| 28 | TABLE ACCESS FULL | INVOICE |
| 29 | TABLE ACCESS FULL | INVOICE_HIST | 31

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|* 30 | INDEX RANGE SCAN | IDX_MA_CNPJ |
| 31 | TABLE ACCESS BY INDEX ROWID | MANDATOR |
| 32 | VIEW PUSHED PREDICATE | V_WMS_INBOUND_FILIAL |
| 33 | SORT GROUP BY | |
| 34 | VIEW | |
| 35 | SORT UNIQUE | |
| 36 | NESTED LOOPS | |
| 37 | NESTED LOOPS | |
| 38 | TABLE ACCESS BY INDEX ROWID| INVOICE |
|* 39 | INDEX RANGE SCAN | IDXINV_LO |
|* 40 | INDEX RANGE SCAN | IDX_MA_CNPJ |
| 41 | TABLE ACCESS BY INDEX ROWID | MANDATOR |
|* 42 | VIEW | V_EA_FULL |
| 43 | UNION-ALL | |
| 44 | TABLE ACCESS FULL | ENTRANCE_AUTHORIZATION | 1
| 45 | TABLE ACCESS FULL | ENTRANCE_AUTHORIZATION_HIST | 15
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
1 - filter("RN">=0)
2 - filter(ROWNUM<=200)
5 - access("INV"."INV_LOID"="L"."LO_ID")
9 - filter((INTERNAL_FUNCTION("LO_LOADTYPE") AND UPPER(TO_CHAR("LO_ID")) LIKE
10 - filter((INTERNAL_FUNCTION("LOH_LOADTYPE") AND UPPER(TO_CHAR("LOH_LO_ID"))
14 - access("DIVERGENCE_HIST"."DIH_ATID"="ARTICLE"."AT_ID" AND "DIVERGENCE_HIS
15 - filter(("DIVERGENCE_HIST"."DIH_STATUS"=2 AND ("NBITFILTER"("DIVERGENCE_HI
"NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",2)=1 OR "NBITFILTER"("DI
"NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",8)=1 OR "NBITFILTER"("DI
"NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",64)=1)))
23 - access("IL"."IL_ATID"="ARTICLE"."AT_ID")
25 - filter("DIVERGENCE_HIST"."DIH_INVID"="INV"."INV_ID")
30 - access("INV"."INV_MA_CNPJ"="MANDATOR"."MA_CNPJ")
39 - access("INV_LOID"="L"."LO_ID")
40 - access("INV_OWNER"="MA_CNPJ")
42 - filter("L"."LO_ID"="EA"."EA_LO_ID")
Note
-----
- cardinality feedback used for this statement

83 rows selected


Mensagens: 0
Meu post anterior ficou mal formatado... segue novamente:

PLAN_TABLE_OUTPUT
SQL_ID  bs3dgshd1rtuf, child number 0
-------------------------------------
select * from (select qr.*, ROWNUM rn from (SELECT * FROM
V_UIW_REL_DIVERGENCE_DEV WHERE upper(CARGA) like '%1302129%') qr where
ROWNUM <= 200) where rn >= 0
 
Plan hash value: 4165110479
 
--------------------------------------------------------------------------------------------------------------------
| Id  | Operation                            | Name                        | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |                             |       |       |    72 (100)|          |
|*  1 |  VIEW                                |                             |     1 |  6283 |    72  (14)| 00:00:01 |
|*  2 |   COUNT STOPKEY                      |                             |       |       |            |          |
|   3 |    NESTED LOOPS OUTER                |                             |     1 |  2301 |    72  (14)| 00:00:01 |
|*  4 |     HASH JOIN OUTER                  |                             |     1 |   297 |    66  (13)| 00:00:01 |
|   5 |      NESTED LOOPS                    |                             |     1 |   285 |    59  (14)| 00:00:01 |
|   6 |       NESTED LOOPS                   |                             |     1 |   252 |    54  (12)| 00:00:01 |
|*  7 |        HASH JOIN                     |                             |     1 |   195 |    52  (12)| 00:00:01 |
|*  8 |         HASH JOIN                    |                             |     1 |   136 |    41   (8)| 00:00:01 |
|*  9 |          HASH JOIN                   |                             |    65 |  6760 |    23  (14)| 00:00:01 |
|* 10 |           TABLE ACCESS FULL          | DIVERGENCE_HIST             |     7 |   154 |     6   (0)| 00:00:01 |
|  11 |           VIEW                       | V_UIW_INVLINE_FULL          |  1499 |   120K|    16  (13)| 00:00:01 |
|  12 |            SORT UNIQUE               |                             |  1499 | 55593 |    16  (75)| 00:00:01 |
|  13 |             UNION-ALL                |                             |       |       |            |          |
|  14 |              TABLE ACCESS FULL       | INV_LINE                    |   130 |  4940 |     4   (0)| 00:00:01 |
|  15 |              TABLE ACCESS FULL       | INV_LINE_HIST               |  1369 | 50653 |    10   (0)| 00:00:01 |
|  16 |          TABLE ACCESS FULL           | ARTICLE                     |   476 | 15232 |    18   (0)| 00:00:01 |
|  17 |         VIEW                         | V_UIW_INVOICE_FULL          |   442 | 26078 |    10  (20)| 00:00:01 |
|  18 |          SORT UNIQUE                 |                             |   442 | 22130 |    10  (60)| 00:00:01 |
|  19 |           UNION-ALL                  |                             |       |       |            |          |
|  20 |            TABLE ACCESS FULL         | INVOICE                     |    15 |   780 |     4   (0)| 00:00:01 |
|  21 |            TABLE ACCESS FULL         | INVOICE_HIST                |   427 | 21350 |     4   (0)| 00:00:01 |
|  22 |        TABLE ACCESS BY INDEX ROWID   | MANDATOR                    |     1 |    57 |     2   (0)| 00:00:01 |
|* 23 |         INDEX RANGE SCAN             | IDX_MA_CNPJ                 |     1 |       |     1   (0)| 00:00:01 |
|  24 |       VIEW                           | V_UIW_LOAD_FULL             |     1 |    33 |     5  (40)| 00:00:01 |
|  25 |        SORT UNIQUE                   |                             |     2 |   235 |     5  (80)| 00:00:01 |
|  26 |         UNION ALL PUSHED PREDICATE   |                             |       |       |            |          |
|* 27 |          TABLE ACCESS BY INDEX ROWID | LOAD                        |     1 |   121 |     1   (0)| 00:00:01 |
|* 28 |           INDEX UNIQUE SCAN          | SYS_C0015322                |     1 |       |     0   (0)|          |
|* 29 |          TABLE ACCESS BY INDEX ROWID | LOAD_HIST                   |     1 |   114 |     2   (0)| 00:00:01 |
|* 30 |           INDEX RANGE SCAN           | IDX_LOH_LO_ID               |     1 |       |     1   (0)| 00:00:01 |
|  31 |      VIEW                            | V_EA_FULL                   |    70 |   840 |     7   (0)| 00:00:01 |
|  32 |       UNION-ALL                      |                             |       |       |            |          |
|  33 |        TABLE ACCESS FULL             | ENTRANCE_AUTHORIZATION      |    18 |   198 |     4   (0)| 00:00:01 |
|  34 |        TABLE ACCESS FULL             | ENTRANCE_AUTHORIZATION_HIST |    52 |   572 |     3   (0)| 00:00:01 |
|  35 |     VIEW PUSHED PREDICATE            | V_WMS_INBOUND_FILIAL        |     1 |  2004 |     5  (20)| 00:00:01 |
|  36 |      SORT GROUP BY                   |                             |     1 |    82 |     5  (20)| 00:00:01 |
|  37 |       VIEW                           |                             |     1 |    82 |     5  (20)| 00:00:01 |
|  38 |        SORT UNIQUE                   |                             |     1 |    76 |     5  (20)| 00:00:01 |
|  39 |         NESTED LOOPS                 |                             |       |       |            |          |
|  40 |          NESTED LOOPS                |                             |     1 |    76 |     4   (0)| 00:00:01 |
|  41 |           TABLE ACCESS BY INDEX ROWID| INVOICE                     |     1 |    19 |     2   (0)| 00:00:01 |
|* 42 |            INDEX RANGE SCAN          | IDXINV_LO                   |     1 |       |     1   (0)| 00:00:01 |
|* 43 |           INDEX RANGE SCAN           | IDX_MA_CNPJ                 |     1 |       |     1   (0)| 00:00:01 |
|  44 |          TABLE ACCESS BY INDEX ROWID | MANDATOR                    |     1 |    57 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - filter("RN">=0)
   2 - filter(ROWNUM<=200)
   4 - access("L"."LO_ID"="EA"."EA_LO_ID")
   7 - access("DIVERGENCE_HIST"."DIH_INVID"="INV"."INV_ID")
   8 - access("DIVERGENCE_HIST"."DIH_ATID"="ARTICLE"."AT_ID" AND "IL"."IL_ATID"="ARTICLE"."AT_ID")
   9 - access("DIVERGENCE_HIST"."DIH_ILID"="IL"."IL_ID")
  10 - filter(("DIVERGENCE_HIST"."DIH_STATUS"=2 AND ("NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",1)=1 OR
              "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",2)=1 OR "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",4)=1 OR
              "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",8)=1 OR "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",32)=1 OR
              "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",64)=1)))
  23 - access("INV"."INV_MA_CNPJ"="MANDATOR"."MA_CNPJ")
  27 - filter(("LO_LOADTYPE"=3 OR "LO_LOADTYPE"=4 OR "LO_LOADTYPE"=6))
  28 - access("LO_ID"="INV"."INV_LOID")
       filter(UPPER(TO_CHAR("LO_ID")) LIKE '%1302129%')
  29 - filter(("LOH_LOADTYPE"=3 OR "LOH_LOADTYPE"=4 OR "LOH_LOADTYPE"=6))
  30 - access("LOH_LO_ID"="INV"."INV_LOID")
       filter(UPPER(TO_CHAR("LOH_LO_ID")) LIKE '%1302129%')
  42 - access("INV_LOID"="L"."LO_ID")
  43 - access("INV_OWNER"="MA_CNPJ")


Mensagens: 0
E agora o plano da segunda execução (child 1):

PLAN_TABLE_OUTPUT
SQL_ID  bs3dgshd1rtuf, child number 1
-------------------------------------
select * from (select qr.*, ROWNUM rn from (SELECT * FROM
V_UIW_REL_DIVERGENCE_DEV WHERE upper(CARGA) like '%1302129%') qr where
ROWNUM <= 200) where rn >= 0
 
Plan hash value: 1580942050
 
-----------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                             | Name                        | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                      |                             |       |       |       |   127 (100)|          |
|*  1 |  VIEW                                 |                             |   200 |  1227K|       |   127   (4)| 00:00:02 |
|*  2 |   COUNT STOPKEY                       |                             |       |       |       |            |          |
|   3 |    NESTED LOOPS OUTER                 |                             |   257 |   669K|       |   127   (4)| 00:00:02 |
|   4 |     NESTED LOOPS OUTER                |                             |     1 |  2655 |       |   124   (5)| 00:00:02 |
|*  5 |      HASH JOIN                        |                             |     1 |   651 |       |   119   (4)| 00:00:02 |
|   6 |       VIEW                            | V_UIW_LOAD_FULL             |     4 |   132 |       |    26   (8)| 00:00:01 |
|   7 |        SORT UNIQUE                    |                             |     4 |   463 |       |    26  (27)| 00:00:01 |
|   8 |         UNION-ALL                     |                             |       |       |       |            |          |
|*  9 |          TABLE ACCESS FULL            | LOAD                        |     1 |   121 |       |    19   (0)| 00:00:01 |
|* 10 |          TABLE ACCESS FULL            | LOAD_HIST                   |     3 |   342 |       |     5   (0)| 00:00:01 |
|  11 |       NESTED LOOPS                    |                             |       |       |       |            |          |
|  12 |        NESTED LOOPS                   |                             |    32 | 11712 |       |    92   (2)| 00:00:02 |
|  13 |         NESTED LOOPS                  |                             |    32 |  9888 |       |    28   (4)| 00:00:01 |
|* 14 |          HASH JOIN                    |                             |     1 |   250 |       |    12   (9)| 00:00:01 |
|* 15 |           TABLE ACCESS FULL           | DIVERGENCE_HIST             | 23698 |   509K|       |     6   (0)| 00:00:01 |
|  16 |           NESTED LOOPS                |                             |       |       |       |            |          |
|  17 |            NESTED LOOPS               |                             |     4 |   456 |       |     5   (0)| 00:00:01 |
|  18 |             VIEW                      | V_UIW_INVLINE_FULL          |  1904 |   152K|       |     1   (0)| 00:00:01 |
|  19 |              SORT UNIQUE              |                             |   105K|  3822K|  5704K|  1025 (100)| 00:00:13 |
|  20 |               UNION-ALL               |                             |       |       |       |            |          |
|  21 |                TABLE ACCESS FULL      | INV_LINE                    |  2612 | 99256 |       |     4   (0)| 00:00:01 |
|  22 |                TABLE ACCESS FULL      | INV_LINE_HIST               |   103K|  3725K|       |    17  (42)| 00:00:01 |
|* 23 |             INDEX UNIQUE SCAN         | PK_AT_ID                    |     1 |       |       |     0   (0)|          |
|  24 |            TABLE ACCESS BY INDEX ROWID| ARTICLE                     |     1 |    32 |       |     1   (0)| 00:00:01 |
|* 25 |          VIEW                         | V_UIW_INVOICE_FULL          |    25 |  1475 |       |    16   (0)| 00:00:01 |
|  26 |           SORT UNIQUE                 |                             | 31916 |  1560K|  2080K|   396  (99)| 00:00:05 |
|  27 |            UNION-ALL                  |                             |       |       |       |            |          |
|  28 |             TABLE ACCESS FULL         | INVOICE                     |   886 | 46072 |       |     4   (0)| 00:00:01 |
|  29 |             TABLE ACCESS FULL         | INVOICE_HIST                | 31030 |  1515K|       |     5  (20)| 00:00:01 |
|* 30 |         INDEX RANGE SCAN              | IDX_MA_CNPJ                 |     1 |       |       |     1   (0)| 00:00:01 |
|  31 |        TABLE ACCESS BY INDEX ROWID    | MANDATOR                    |     1 |    57 |       |     2   (0)| 00:00:01 |
|  32 |      VIEW PUSHED PREDICATE            | V_WMS_INBOUND_FILIAL        |     1 |  2004 |       |     5  (20)| 00:00:01 |
|  33 |       SORT GROUP BY                   |                             |     1 |    82 |       |     5  (20)| 00:00:01 |
|  34 |        VIEW                           |                             |     1 |    82 |       |     5  (20)| 00:00:01 |
|  35 |         SORT UNIQUE                   |                             |     1 |    76 |       |     5  (20)| 00:00:01 |
|  36 |          NESTED LOOPS                 |                             |       |       |       |            |          |
|  37 |           NESTED LOOPS                |                             |     1 |    76 |       |     4   (0)| 00:00:01 |
|  38 |            TABLE ACCESS BY INDEX ROWID| INVOICE                     |     1 |    19 |       |     2   (0)| 00:00:01 |
|* 39 |             INDEX RANGE SCAN          | IDXINV_LO                   |     1 |       |       |     1   (0)| 00:00:01 |
|* 40 |            INDEX RANGE SCAN           | IDX_MA_CNPJ                 |     1 |       |       |     1   (0)| 00:00:01 |
|  41 |           TABLE ACCESS BY INDEX ROWID | MANDATOR                    |     1 |    57 |       |     2   (0)| 00:00:01 |
|* 42 |     VIEW                              | V_EA_FULL                   |   201 |  2412 |       |     3   (0)| 00:00:01 |
|  43 |      UNION-ALL                        |                             |       |       |       |            |          |
|  44 |       TABLE ACCESS FULL               | ENTRANCE_AUTHORIZATION      |  1101 | 12111 |       |     4   (0)| 00:00:01 |
|  45 |       TABLE ACCESS FULL               | ENTRANCE_AUTHORIZATION_HIST | 15688 |   168K|       |     4  (25)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - filter("RN">=0)
   2 - filter(ROWNUM<=200)
   5 - access("INV"."INV_LOID"="L"."LO_ID")
   9 - filter((INTERNAL_FUNCTION("LO_LOADTYPE") AND UPPER(TO_CHAR("LO_ID")) LIKE '%1302129%'))
  10 - filter((INTERNAL_FUNCTION("LOH_LOADTYPE") AND UPPER(TO_CHAR("LOH_LO_ID")) LIKE '%1302129%'))
  14 - access("DIVERGENCE_HIST"."DIH_ATID"="ARTICLE"."AT_ID" AND "DIVERGENCE_HIST"."DIH_ILID"="IL"."IL_ID")
  15 - filter(("DIVERGENCE_HIST"."DIH_STATUS"=2 AND ("NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",1)=1 OR
              "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",2)=1 OR "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",4)=1 OR
              "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",8)=1 OR "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",32)=1 OR
              "NBITFILTER"("DIVERGENCE_HIST"."DIH_TYPE",64)=1)))
  23 - access("IL"."IL_ATID"="ARTICLE"."AT_ID")
  25 - filter("DIVERGENCE_HIST"."DIH_INVID"="INV"."INV_ID")
  30 - access("INV"."INV_MA_CNPJ"="MANDATOR"."MA_CNPJ")
  39 - access("INV_LOID"="L"."LO_ID")
  40 - access("INV_OWNER"="MA_CNPJ")
  42 - filter("L"."LO_ID"="EA"."EA_LO_ID")
 
Note
-----
   - cardinality feedback used for this statement
 

portilho Site Admin

Mensagens: 482
Oi Milton.

Bom, eu nem ia falar do "WHERE upper(CARGA) like '%1302129%'", pois você já sabe, e ao que parece, você não pode mudar isso. Mas para que os outros saibam, tem três coisas terrivelmente erradas aí: um UPPER de números, talvez uma conversão implícita ('' em coluna NUMBER, mas acho que ela é VARCHAR2), e o %% (que a aplicação deve colocar automaticamente, pelo o que eu me lembro).
Outra coisa que atrapalha o CBO é o ROWNUM. Vários tipos de Query Transformation são impedidos pela presença de ROWNUM.

Agora, precisamos de mais dados, pois este DISPLAY_CURSOR não veio com A-Rows e E-Rows, para sabermos em que ponto o CBO está errando. O A-Rows e E-Rows não apareceu porque o STATISTICS_LEVEL deve estar em TYPICAL. Execute o SQL com a HINT GATHER_PLAN_STATISTICS, e execute novamente o DISPLAY_CURSOR.


Mensagens: 0
Sim Portilho, no próprio vídeo do youtube (você viu?) eu comentei, falando desses erros.

Já acionei o programador PHP pra arrumar isso - falei pra ele consultar a USER_TAB_COLUMNS pra pegar o tipo de dado de cada coluna ao fazer o filtro, assim, se for NUMBER ele não aplica UPPER e nem as aspas simples com %% nem o like.
Mas isso vai levar um tempinho, alterar sistema que tá em produção tem que ter cuidado.

Infelizmente não vou conseguir mais coletar essas informações!
Fiz uma melhoria nessa view, e com isso ela ficou mais rápida e não está mais acontecendo esse comportamento (planos diferentes a partir da segunda execução).
Tive que fazer isso pois os usuários precisam desse relatório e estava demorando demais (dava timeout na tela), então melhorei a view com algumas das regrinhas que aprendi no treinamento e já melhorou pelo menos o suficiente pra ser aceitável pelo cliente. Mas vou continuar cobrando do programador PHP a melhoria na montagem desses filtros.

Sobre o ROWNUM, ele é feito para paginar os dados no grid da tela da aplicação.
Não é feito assim usualmente?

portilho Site Admin

Mensagens: 482
Oi Milton! Desculpe, eu só vi o vídeo agora, tinha me esquecido que você tinha mencionado ele lá no começo.
Mas eu já tinha imaginado que você sabia da conversão implícita e do problema do LIKE.

No vídeo fica fantástico o comportamento do SQL.
Pena não termos acesso a mais informações. Gostei muito do caso, queria tentar reproduzi-lo.
Você consegue me mandar o DDL dos objetos envolvidos, e quantidade de linhas?

Sobre o ROWNUM, mesmo que ele impeça alguns Query Transformations, temos realmente que utilizar ele para restringir o resultado. Até o 12c, onde foi lançado o LiMIT:
http://oracle-base.com/articles/12c/row ... -12cr1.php


Voltar para Treinamento Oracle Tuning - SQL

cron