Boa tarde, caros colegas.

Estou neste momento trabalhando no tune de uma query em particular e
gostaria da opinião de vocês quanto à tomada de decisão.

Banco 10.2.0.4.0

Existe essa query que faz parte de uma procedure que roda diariamente.

SELECT  fcal.business_owner_dim_id,
           fcal.date_dim_id,
           dprd.call_type_cd,
           DPRD.call_type_nm,
           fcal.gl_product_dim_id,
           CM.CLASS_OF_SERVICE_ID,
           TRUNC (SYSDATE) start_effective_date,
           SUM (billable_minutes) minutes,
           COUNT ( * ) calls,
           SUM (FCAL.ACTUAL_CONNECTIONS) connections,
           SUM (netbasetotcallamt) revenue,
           ut.USE_TYPE_CATEGORY
    FROM   gdwhs_adm.f_call fcal,
           gdwhs_adm.d_product dprd,
           ODS_SFDC.SFDC_BTC_GL_COS_MAP cm,
           gdwhs_adm.d_use_type ut
   WHERE   partition_key BETWEEN ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -6)
                             AND  SYSDATE
           AND fcal.product_dim_id = dprd.product_dim_id
           AND FCAL.GL_PRODUCT_DIM_ID = CM.GL_PRODUCT_DIM_ID
           AND FCAL.USE_TYPE_DIM_ID = UT.USE_TYPE_DIM_ID
GROUP BY   fcal.business_owner_dim_id,
           fcal.date_dim_id,
           dprd.call_type_cd,
           DPRD.call_type_nm,
           fcal.gl_product_dim_id,
           ut.USE_TYPE_CATEGORY,
           CM.CLASS_OF_SERVICE_ID


O plano de execução para a mesma é o seguinte:

-----------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name                | Rows  |
Bytes |TempSpc| Cost (%CPU)| Time     | Pstart| Pstop |    TQ  |IN-OUT| PQ
Distrib |
-----------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |                     |   339K|
 29M|       |   137K  (1)| 00:32:10 |       |       |        |      |
     |
|*  1 |  PX COORDINATOR                |                     |       |
  |       |            |          |       |       |        |      |
   |
|   2 |   PX SEND QC (RANDOM)          | :TQ10004            |   339K|
 29M|       |   137K  (1)| 00:32:10 |       |       |  Q1,04 | P->S | QC
(RAND)  |
|   3 |    SORT GROUP BY               |                     |   339K|
 29M|    67M|   137K  (1)| 00:32:10 |       |       |  Q1,04 | PCWP |
     |
|   4 |     PX RECEIVE                 |                     |   339K|
 29M|       |   137K  (1)| 00:32:10 |       |       |  Q1,04 | PCWP |
     |
|   5 |      PX SEND HASH              | :TQ10003            |   339K|
 29M|       |   137K  (1)| 00:32:10 |       |       |  Q1,03 | P->P | HASH
      |
|   6 |       SORT GROUP BY            |                     |   339K|
 29M|    67M|   137K  (1)| 00:32:10 |       |       |  Q1,03 | PCWP |
     |
|*  7 |        FILTER                  |                     |       |
  |       |            |          |       |       |  Q1,03 | PCWC |
   |
|*  8 |         HASH JOIN              |                     |   339K|
 29M|       |   137K  (1)| 00:32:10 |       |       |  Q1,03 | PCWP |
     |
|   9 |          PX RECEIVE            |                     |  2189 |
45969 |       |    85   (0)| 00:00:02 |       |       |  Q1,03 | PCWP |
       |
|  10 |           PX SEND BROADCAST    | :TQ10001            |  2189 |
45969 |       |    85   (0)| 00:00:02 |       |       |  Q1,01 | P->P |
BROADCAST  |
|  11 |            PX BLOCK ITERATOR   |                     |  2189 |
45969 |       |    85   (0)| 00:00:02 |       |       |  Q1,01 | PCWC |
       |
|  12 |             TABLE ACCESS FULL  | D_PRODUCT           |  2189 |
45969 |       |    85   (0)| 00:00:02 |       |       |  Q1,01 | PCWP |
       |
|* 13 |          HASH JOIN             |                     |   339K|
 22M|       |   137K  (1)| 00:32:09 |       |       |  Q1,03 | PCWP |
     |
|  14 |           BUFFER SORT          |                     |       |
  |       |            |          |       |       |  Q1,03 | PCWC |
   |
|  15 |            PX RECEIVE          |                     |    73 |
 1898 |       |     3   (0)| 00:00:01 |       |       |  Q1,03 | PCWP |
       |
|  16 |             PX SEND BROADCAST  | :TQ10000            |    73 |
 1898 |       |     3   (0)| 00:00:01 |       |       |        | S->P |
BROADCAST  |
|  17 |              TABLE ACCESS FULL | SFDC_BTC_GL_COS_MAP |    73 |
 1898 |       |     3   (0)| 00:00:01 |       |       |        |      |
       |
|* 18 |           HASH JOIN            |                     |   339K|
 14M|       |   137K  (1)| 00:32:09 |       |       |  Q1,03 | PCWP |
     |
|  19 |            PX RECEIVE          |                     |    10 |
 60 |       |     2   (0)| 00:00:01 |       |       |  Q1,03 | PCWP |
     |
|  20 |             PX SEND BROADCAST  | :TQ10002            |    10 |
 60 |       |     2   (0)| 00:00:01 |       |       |  Q1,02 | P->P |
BROADCAST  |
|  21 |              PX BLOCK ITERATOR |                     |    10 |
 60 |       |     2   (0)| 00:00:01 |       |       |  Q1,02 | PCWC |
     |
|  22 |               TABLE ACCESS FULL| D_USE_TYPE          |    10 |
 60 |       |     2   (0)| 00:00:01 |       |       |  Q1,02 | PCWP |
     |
|  23 |            PX BLOCK ITERATOR   |                     |   339K|
 12M|       |   137K  (1)| 00:32:09 |   KEY |   KEY |  Q1,03 | PCWC |
     |
|* 24 |             TABLE ACCESS FULL  | F_CALL              |   339K|
 12M|       |   137K  (1)| 00:32:09 |   KEY |   KEY |  Q1,03 | PCWP |
     |
-----------------------------------------------------------------------------------------------------------------------------------------------------------

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

   1 - filter(TO_DATE(:I_6C_BI_FROM_DATE)<=TO_DATE(:I_REFRESH_DATE))
   7 - filter(TO_DATE(:I_6C_BI_FROM_DATE)<=TO_DATE(:I_REFRESH_DATE))
   8 - access("FCAL"."PRODUCT_DIM_ID"="DPRD"."PRODUCT_DIM_ID")
  13 - access("FCAL"."GL_PRODUCT_DIM_ID"="CM"."GL_PRODUCT_DIM_ID")
  18 - access("FCAL"."USE_TYPE_DIM_ID"="UT"."USE_TYPE_DIM_ID")
  24 - filter("PARTITION_KEY">=:I_6C_BI_FROM_DATE AND
"PARTITION_KEY"<=:I_REFRESH_DATE)


Existe um indice para gdwhs_adm.f_call.partition_key , um bitmat index, mas
o mesmo não está sendo usado.

Tentei forçar o indice, bem como forçar um parallel no bitmap index usando
as hints index_ffs e parallel_index, mas não houve melhora significativa.


Essa tabela F_CALL é particionada anualmente. Então, pretendo sugerir um
particionamento mensal, visto que, da forma como está hoje, e utilizando os
mesmos filtros, caso estejamos no começo do ano, serão lidos dados de 2
anos inteiros para que sejam filtrados apenas dados de 6 meses.

Gostaria da impressão de vocês quanto a isso, se alguém tem alguma idéia
melhor.

Forte a braço, e agradeço desde já pela ajuda.

Evandro Giachetto
Oracle DBA
evandrogiache...@gmail.com
  • [oracle_br] Ajuda... Evandro Giachetto evandrogiache...@gmail.com [oracle_br]
    • [oracle_br] ... jlchia...@yahoo.com.br [oracle_br]
      • Re: [ora... Andre Santos andre.psantos...@gmail.com [oracle_br]
      • Re: [ora... Evandro Giachetto evandrogiache...@gmail.com [oracle_br]
        • Re: ... jlchia...@yahoo.com.br [oracle_br]

Responder a