2016-05-11 2 views
0

IMAGE OF TOAD: query waitsКак отладить запрос Oracle с учетом плана объяснения?

WITH 
    NJ AS (SELECT CNATJUR FROM RE_CD.CDTD005_NATUR_JURIDICA WHERE DESCRICAO = 'Particulares' AND DTEND_VER = '9999-12-31 00:00' ), 
    PAISES AS (SELECT PAIS_BST FROM RE_CD.CDTD006_PAISES WHERE GRUPO_PAIS = 'RESTO UNIAO EUROPEIA' AND DTEND_VER = '9999-12-31 00:00' ), 
    GAR AS (SELECT /*+PARALLEL(4)*/ CCONTA, CREFERENCIA_IMP FROM RE_DM.DMTD002_GAR_CONTRATO WHERE TIPO_GAR  = 'GAR REAL' AND TIPO_GAR2  = 'GAR DINERARIA' AND FLAG_PRIORIDADE = 1 AND IDVERSAO  = (SELECT MAX(IDVERSAO) FROM RE_DM.DMTD001_VERSOES WHERE TABELA = 'RE_DM.DMTD002_GAR_CONTRATO' AND DTEND_VER = '9999-12-31 00:00' ) ) 

    SELECT /*+PARALLEL(4)*/ MOROS.COD_PERIMETRO, MOROS.SOCIEDADE 
    FROM RE_DM.DMTF020_MOROS MOROS 
     INNER JOIN GAR ON MOROS.CCONTA = GAR.CCONTA AND MOROS.CREFERENCIA = GAR.CREFERENCIA_IMP 
     INNER JOIN NJ  ON MOROS.COD_NATJUR = NJ.CNATJUR 
     INNER JOIN PAISES ON MOROS.COD_PAIS = PAISES.PAIS_BST 
    WHERE MOROS.IDVERSAO    = 167 
     AND MOROS.SEGMENTO <> 'PC' AND MOROS.SEGMENTO <> 'LO' AND MOROS.SEGMENTO <> 'GA' 
     AND MOROS.SEGMENTO <> 'G1' AND MOROS.SEGMENTO <> 'G2' AND MOROS.SEGMENTO <> 'G3' 
     AND MOROS.INPUT      = 'IMP' 
     AND MOROS.FLAG_MOROSIDADE   = 0; 

    Plan hash value: 441958758 

---------------------------------------------------------------------------------------------------------------------------------------- 
| Id | Operation      | Name     | Rows | Bytes | Cost (%CPU)| Time  | TQ |IN-OUT| PQ Distrib | 
---------------------------------------------------------------------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT     |      | 76752 | 16M| 22115 (1)| 00:01:07 |  |  |   | 
| 1 | PX COORDINATOR     |      |  |  |   |   |  |  |   | 
| 2 | PX SEND QC (RANDOM)   | :TQ20002    | 76752 | 16M| 22113 (1)| 00:01:07 | Q2,02 | P->S | QC (RAND) | 
|* 3 | HASH JOIN      |      | 76752 | 16M| 22113 (1)| 00:01:07 | Q2,02 | PCWP |   | 
| 4 |  PX RECEIVE     |      | 42 | 1512 |  2 (0)| 00:00:01 | Q2,02 | PCWP |   | 
| 5 |  PX SEND BROADCAST   | :TQ20000    | 42 | 1512 |  2 (0)| 00:00:01 | Q2,00 | P->P | BROADCAST | 
| 6 |  PX BLOCK ITERATOR   |      | 42 | 1512 |  2 (0)| 00:00:01 | Q2,00 | PCWC |   | 
|* 7 |  TABLE ACCESS FULL   | CDTD006_PAISES   | 42 | 1512 |  2 (0)| 00:00:01 | Q2,00 | PCWP |   | 
|* 8 |  HASH JOIN     |      | 237K| 41M| 22110 (1)| 00:01:07 | Q2,02 | PCWP |   | 
| 9 |  PX RECEIVE     |      | 23 | 1150 |  2 (0)| 00:00:01 | Q2,02 | PCWP |   | 
| 10 |  PX SEND BROADCAST   | :TQ20001    | 23 | 1150 |  2 (0)| 00:00:01 | Q2,01 | P->P | BROADCAST | 
| 11 |  PX BLOCK ITERATOR   |      | 23 | 1150 |  2 (0)| 00:00:01 | Q2,01 | PCWC |   | 
|* 12 |   TABLE ACCESS FULL  | CDTD005_NATUR_JURIDICA | 23 | 1150 |  2 (0)| 00:00:01 | Q2,01 | PCWP |   | 
| 13 |  NESTED LOOPS    |      |  |  |   |   | Q2,02 | PCWP |   | 
| 14 |  NESTED LOOPS    |      | 795K| 100M| 22105 (1)| 00:01:07 | Q2,02 | PCWP |   | 
| 15 |  PX BLOCK ITERATOR   |      |  |  |   |   | Q2,02 | PCWC |   | 
|* 16 |   TABLE ACCESS FULL  | DMTD002_GAR_CONTRATO | 6357 | 341K| 4423 (1)| 00:00:14 | Q2,02 | PCWP |   | 
| 17 |   SORT AGGREGATE   |      |  1 | 42 |   |   | Q2,02 | PCWP |   | 
| 18 |   PX COORDINATOR   |      |  |  |   |   |  |  |   | 
| 19 |   PX SEND QC (RANDOM) | :TQ10000    |  1 | 42 |   |   | Q1,00 | P->S | QC (RAND) | 
| 20 |    SORT AGGREGATE  |      |  1 | 42 |   |   | Q1,00 | PCWP |   | 
| 21 |    PX BLOCK ITERATOR |      |  1 | 42 |  2 (0)| 00:00:01 | Q1,00 | PCWC |   | 
|* 22 |    TABLE ACCESS FULL | DMTD001_VERSOES  |  1 | 42 |  2 (0)| 00:00:01 | Q1,00 | PCWP |   | 
|* 23 |  INDEX RANGE SCAN   | DMTF020_MOROS_INDEX2 | 21 |  |  1 (0)| 00:00:01 | Q2,02 | PCWP |   | 
|* 24 |  TABLE ACCESS BY INDEX ROWID| DMTF020_MOROS   | 125 | 9750 |  3 (0)| 00:00:01 | Q2,02 | PCWP |   | 
---------------------------------------------------------------------------------------------------------------------------------------- 

Predicate Information (identified by operation id): 
--------------------------------------------------- 

    3 - access("MOROS"."COD_PAIS"="PAIS_BST") 
    7 - filter("GRUPO_PAIS"='RESTO UNIAO EUROPEIA' AND "DTEND_VER"='9999-12-31 00:00') 
    8 - access("MOROS"."COD_NATJUR"="CNATJUR") 
    12 - filter("DESCRICAO"='Particulares' AND "DTEND_VER"='9999-12-31 00:00') 
    16 - filter("TIPO_GAR2"='GAR DINERARIA' AND "TIPO_GAR"='GAR REAL' AND "FLAG_PRIORIDADE"=1 AND "IDVERSAO"= (SELECT 
       MAX(SYS_OP_CSR(SYS_OP_MSR(MAX("IDVERSAO")),0)) FROM "RE_DM"."DMTD001_VERSOES" "DMTD001_VERSOES" WHERE 
       "TABELA"='RE_DM.DMTD002_GAR_CONTRATO' AND "DTEND_VER"='9999-12-31 00:00')) 
    22 - filter("TABELA"='RE_DM.DMTD002_GAR_CONTRATO' AND "DTEND_VER"='9999-12-31 00:00') 
    23 - access("MOROS"."CREFERENCIA"="CREFERENCIA_IMP") 
     filter("MOROS"."CREFERENCIA" IS NOT NULL) 
    24 - filter("MOROS"."IDVERSAO"=167 AND "MOROS"."CCONTA" IS NOT NULL AND TO_NUMBER("MOROS"."FLAG_MOROSIDADE")=0 AND 
       "MOROS"."INPUT"='IMP' AND "MOROS"."SEGMENTO"<>'GA' AND "MOROS"."SEGMENTO"<>'G1' AND "MOROS"."SEGMENTO"<>'PC' AND 
       "MOROS"."SEGMENTO"<>'G2' AND "MOROS"."SEGMENTO"<>'G3' AND "MOROS"."SEGMENTO"<>'LO' AND "MOROS"."CCONTA"="CCONTA") 

Note 
----- 
    - dynamic sampling used for this statement (level=5) 
    - Degree of Parallelism is 4 because of hint 

Кто-нибудь увидеть что-то подозрительное с этим "объяснить план"? Я добавил индексы, я запустил статистику, перестроил индексы ... сервер - это ноутбук с 8 ГБ оперативной памяти, жесткий диск SSD и i7 cpu.

Любые идеи?

+0

Пожалуйста, сгенерируйте план еще раз и включите ** весь ** план в вопросе. Не существует «предикатной информации», которая печатается под таблицей плана. Используйте 'EXPLAIN PLAN FOR your_query', а затем' SELECT * FROM Table (DBMS_XPLAN.DISPLAY) 'команды для создания плана. – krokodilko

+0

Объясните план, добавленный в исходное сообщение. –

+2

'TO_NUMBER (« MOROS ».« FLAG_MOROSIDADE ») = 0' => это означает, что 'FLAG_MOROSIDADE' имеет тип данных VARCHAR или CHAR, но запрос сравнивает его с числом' 0' и происходит неявное преобразование. Пожалуйста, перепишите эту связь в 'MOROS.FLAG_MOROSIDADE = '0'', это устранит неявное преобразование. Это также позволяет Oracle использовать индекс в этом столбце (он создается таким индексом). – krokodilko

ответ

0

Очевидно, что вы ищете полное сканирование таблицы, но они не всегда являются виновниками. Проблема, похоже, связана с вложенными циклами.

Я бы сосредоточил внимание на DMTD002_GAR_CONTRATO и, возможно, разместил индекс для устранения полного сканирования таблицы ; однако я подозреваю, что основная проблема может быть в подзапросе в предложении where, которое создает псевдоним таблицы «GAR».

Было бы полезно поэкспериментировать с жестко запрограммированным значением, а не подзапросом, чтобы увидеть, повышает ли он производительность.

+0

Попробуем это. Спасибо за ответ. –

0

(Отправлено от имени ОП).

Наше временное табличное пространство было очень маленьким. После увеличения размера все вещи начинают идти быстрее и плавнее. Благодаря всем, что помогло.

+1

Спасибо, мой друг! –

Смежные вопросы