Oracle11g CBO issue

Main Env info : OLAP, RAC, 4 node. block size=16k

SQL> select * from v$version where rownum=1;

BANNER
-----------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production

SQL> show parameter cpu

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- -----
cpu_count                            integer                           24
parallel_threads_per_cpu             integer                           2
resource_manager_cpu_allocation      integer                           24

SQL> show parameter sga

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- -------------
lock_sga                             boolean                           FALSE
pre_page_sga                         boolean                           FALSE
sga_max_size                         big integer                       21G
sga_target                           big integer                       21G
SQL> show parameter pga

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- -------------
pga_aggregate_target                 big integer                       30G

 

Today ETL developer asked me to check a long running SQL which had running for about 2 hours without results.

Below is the SQL code.

create table OPT_ACCT_BRAND_FY_SPDNG_FCT1
parallel 2   TABLESPACE OPTIMA01M
nologging as
SELECT BRAND.PROD_SKID,
       CALENDAR.MTH_SKID,
       CALENDAR.FISC_YR_SKID,
       BU.BUS_UNIT_SKID,
       ACCT.ACCT_SKID,
       ACCT.ACCT_NAME ACCOUNT,
       ACCT.NAME ACCOUNT_ID,
       CAT.PROD_DESC CATEGORY,
       CAT.PROD_NAME CATEGORY_ID,
       BRAND.PROD_DESC BRAND,
       BRAND.PROD_NAME BRAND_ID,
       CALENDAR.MTH_NAME MONTH_NAME,
       BU.BUS_UNIT_NAME,
       CALENDAR.FISC_YR_ABBR_NAME,
       --Optima R11, Dec 28th, Barbara Modified Begin, For TSP accounts, show NULL for Base and Increment SU
       DECODE(SUBSTR(ACCT.FUND_FRCST_MODEL_DESC,1,3),'TSP',NULL,SUM (BRAND_BASLN.ESTMT_BASLN_CASES_AMT)) BASE_SU,
       DECODE(SUBSTR(ACCT.FUND_FRCST_MODEL_DESC,1,3),'TSP',NULL,SUM (BRAND_BASLN.INCRM_SU_AMT)) INC_SU,
       --Optima R11, Dec 28th, Barbara Modified End
       SUM (BRAND_BASLN.TOT_PLAN_SU_AMT) TOTAL_SU,
       SUM (BRAND_BASLN.TOT_PLAN_GIV_AMT) GIV,
       SUM (BRAND_BASLN.TOT_PLAN_NIV_AMT) NIV,
       --Modified By Barbara on Nov 22nd 2010 in R11 for B018,
       --TOT_PLAN_NOS_AMT in opt_brand_basln_ifct has been aggregated result along account hierarchy, in this view, we do not want aggregated result
       --SUM (BRAND_BASLN.TOT_PLAN_NOS_AMT) NOS,
       SUM (BRAND_BASLN.TOT_PLAN_GIV_AMT) - SUM (BRAND_BASLN.TOT_SLOG_AMT)  - SUM (TOT_MDA_LOR) NOS,
       SUM (BRAND_BASLN.TOT_SLOG_AMT) SLOG,
       SUM (ESTMT_FIXED_MDA_LOR) ESTMT_FIXED_MDA_LOR,
       SUM (ESTMT_VARIABLE_MDA_LOR) ESTMT_VARIABLE_MDA_LOR,
       SUM (ESTMT_FIXED_MDA_EXPENSE) ESTMT_FIXED_MDA_EXPENSE,
       SUM (ESTMT_VARIABLE_MDA_EXPENSE) ESTMT_VARIABLE_MDA_EXPENSE
  FROM (SELECT PROD_SKID,
               DATE_SKID,
               FY_DATE_SKID,
              PRMTN_ACCT_SKID,
               BUS_UNIT_SKID,
               SUM (ESTMT_BASLN_CASES_AMT) ESTMT_BASLN_CASES_AMT,
               SUM (INCRM_SU_AMT) INCRM_SU_AMT,
               SUM (TOT_PLAN_SU_AMT) TOT_PLAN_SU_AMT,
               SUM (TOT_PLAN_GIV_AMT) TOT_PLAN_GIV_AMT,
               SUM (TOT_PLAN_NIV_AMT) TOT_PLAN_NIV_AMT,
               SUM (TOT_PLAN_NOS_AMT) TOT_PLAN_NOS_AMT,
               SUM ((SLOG_TRADE_TERM_PCT/100) * TOT_PLAN_GIV_AMT) TOT_SLOG_AMT,
               0 TOT_MDA_LOR,
               0 ESTMT_FIXED_MDA_LOR,
               0 ESTMT_VARIABLE_MDA_LOR,
               0 ESTMT_FIXED_MDA_EXPENSE,
               0 ESTMT_VARIABLE_MDA_EXPENSE
          FROM OPT_BRAND_BASLN_IFCT
            --Optima R11,Dec 28th, Barbara Add Begin,for OPT_BRAND_BASLN_IFCT contains many more accounts because of account aggregation
         WHERE PRMTN_ACCT_SKID IN (SELECT ACCT_SKID
                                     FROM OPT_PRMTN_DIM
                                    UNION all
                                   SELECT ACCT_SKID
                                     FROM OPT_FUND_DIM)
            --Optima R11,Dec 28th, Barbara Add End                            
         GROUP BY PROD_SKID,
               DATE_SKID,
               FY_DATE_SKID,
               PRMTN_ACCT_SKID,
               BUS_UNIT_SKID
         UNION ALL
        SELECT BRAND_SKID PROD_SKID,
               MTH_SKID DATE_SKID,
               FY_DATE_SKID,
               ACCT_SKID PRMTN_ACCT_SKID,
               BUS_UNIT_SKID,
               0 ESTMT_BASLN_CASES_AMT,
               0 INCRM_SU_AMT,
               0 TOT_PLAN_SU_AMT,
               0 TOT_PLAN_GIV_AMT,
               0 TOT_PLAN_NIV_AMT,
               0 TOT_PLAN_NOS_AMT,
               0 TOT_SLOG_AMT,
               SUM (TOT_MDA_LOR) TOT_MDA_LOR,
               SUM (ESTMT_FIXED_MDA_LOR) ESTMT_FIXED_MDA_LOR,
               SUM (ESTMT_VARIABLE_MDA_LOR) ESTMT_VARIABLE_MDA_LOR,
               SUM (ESTMT_FIXED_MDA_EXPENSE) ESTMT_FIXED_MDA_EXPENSE,
               SUM (ESTMT_VARIABLE_MDA_EXPENSE) ESTMT_VARIABLE_MDA_EXPENSE
          FROM OPT_ACCT_BRAND_FY_SPDNG_TEMP
         GROUP BY BRAND_SKID,
               MTH_SKID,
               FY_DATE_SKID,
               ACCT_SKID,
               BUS_UNIT_SKID) BRAND_BASLN,
           OPT_PROD_FY_FDIM BRAND,
           OPT_PROD_FY_FDIM CAT,
           OPT_CAL_MASTR_MV01 CALENDAR,
           OPT_ACCT_FDIM ACCT,
           OPT_BUS_UNIT_FDIM BU
      WHERE     BRAND_BASLN.PROD_SKID = BRAND.PROD_SKID
            AND BRAND_BASLN.FY_DATE_SKID = BRAND.FY_DATE_SKID
            AND BRAND.FY_DATE_SKID = CAT.FY_DATE_SKID
            AND BRAND.PARNT_PROD_ID = CAT.PROD_ID
            AND BRAND_BASLN.PRMTN_ACCT_SKID = ACCT_SKID
            AND BRAND_BASLN.BUS_UNIT_SKID = BRAND.BUS_UNIT_SKID
            AND BRAND_BASLN.DATE_SKID = CALENDAR.CAL_MASTR_SKID
            AND BRAND_BASLN.BUS_UNIT_SKID = BU.BUS_UNIT_SKID
      GROUP BY ACCT.ACCT_NAME,
               ACCT.NAME,
               CAT.PROD_DESC,
               CAT.PROD_NAME,
               BRAND.PROD_DESC,
               BRAND.PROD_NAME,
               CALENDAR.MTH_NAME,
               BU.BUS_UNIT_NAME,
               CALENDAR.FISC_YR_ABBR_NAME,
               BRAND.PROD_SKID,
               CALENDAR.MTH_SKID,
               BU.BUS_UNIT_SKID,
               CALENDAR.FISC_YR_SKID,
               ACCT.FUND_FRCST_MODEL_DESC,
               ACCT.ACCT_SKID;

Below is the execution plan

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 1551275144

-------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                                | Name                         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                         |                              |   370M|   164G|       |    19M  (3)| 16:58:01 |
|   1 |  PX COORDINATOR                                          |                              |    |  |       |            |          |       |
|   2 |   PX SEND QC (RANDOM)                                    | :TQ10010                     |   370M|   164G|       |    19M  (3)| 16:58:01 |
|   3 |    HASH GROUP BY                                         |                              |   370M|   164G|   171G|    19M  (3)| 16:58:01 |
|*  4 |     HASH JOIN                                            |                              |   370M|   164G|       |   105K (58)| 00:05:30 |
|   5 |      BUFFER SORT                                         |                              |    |  |       |            |          |       |
|   6 |       PX RECEIVE                                         |                              |   219K|    12M|       |  2161   (4)| 00:00:07 |
|   7 |        PX SEND HASH                                      | :TQ10004                     |   219K|    12M|       |  2161   (4)| 00:00:07 |
|   8 |         PARTITION LIST ALL                               |                              |   219K|    12M|       |  2161   (4)| 00:00:07 |
|   9 |          TABLE ACCESS FULL                               | OPT_ACCT_FDIM                |   219K|    12M|       |  2161   (4)| 00:00:07 |
|  10 |      PX RECEIVE                                          |                              |   368M|   142G|       | 91951  (55)| 00:04:48 |
|  11 |       PX SEND HASH                                       | :TQ10009                     |   368M|   142G|       | 91951  (55)| 00:04:48 |
|* 12 |        HASH JOIN BUFFERED                                |                              |   368M|   142G|       | 91951  (55)| 00:04:48 |
|  13 |         BUFFER SORT                                      |                              |    |  |       |            |          |       |
|  14 |          PX RECEIVE                                      |                              | 37190 |  1271K|       |    41  (10)| 00:00:01 |
|  15 |           PX SEND HASH                                   | :TQ10003                     | 37190 |  1271K|       |    41  (10)| 00:00:01 |
|  16 |            TABLE ACCESS FULL                             | OPT_CAL_MASTR_MV01           | 37190 |  1271K|       |    41  (10)| 00:00:01 |
|  17 |         PX RECEIVE                                       |                              |   368M|   130G|       | 80727  (48)| 00:04:13 |
|  18 |          PX SEND HASH                                    | :TQ10008                     |   368M|   130G|       | 80727  (48)| 00:04:13 |
|* 19 |           HASH JOIN BUFFERED                             |                              |   368M|   130G|       | 80727  (48)| 00:04:13 |
|  20 |            BUFFER SORT                                   |                              |    |  |       |            |          |       |
|  21 |             PX RECEIVE                                   |                              |    29 |   406 |       |     1   (0)| 00:00:01 |
|  22 |              PX SEND HASH                                | :TQ10002                     |    29 |   406 |       |     1   (0)| 00:00:01 |
|  23 |               INDEX FULL SCAN                            | OPT_BUS_UNIT_FDIM_UX2        |    29 |   406 |       |     1   (0)| 00:00:01 |
|  24 |            PX RECEIVE                                    |                              |   368M|   125G|       | 69546  (40)| 00:03:38 |
|  25 |             PX SEND HASH                                 | :TQ10007                     |   368M|   125G|       | 69546  (40)| 00:03:38 |
|* 26 |              HASH JOIN BUFFERED                          |                              |   368M|   125G|       | 69546  (40)| 00:03:38 |
|  27 |               BUFFER SORT                                |                              |    |  |       |            |          |       |
|  28 |                PX RECEIVE                                |                              |  1277K|   193M|       |  7514  (14)| 00:00:24 |
|  29 |                 PX SEND HASH                             | :TQ10001                     |  1277K|   193M|       |  7514  (14)| 00:00:24 |
|  30 |                  PARTITION RANGE ALL                     |                              |  1277K|   193M|       |  7514  (14)| 00:00:24 |
|  31 |                   MERGE JOIN                             |                              |  1277K|   193M|       |  7514  (14)| 00:00:24 |
|  32 |                    SORT JOIN                             |                              |  1277K|   103M|   254M|  3823  (16)| 00:00:12 |
|  33 |                     PARTITION LIST ALL                   |                              |  1277K|   103M|       |  3515   (8)| 00:00:11 |
|  34 |                      TABLE ACCESS FULL                   | OPT_PROD_FY_FDIM             |  1277K|   103M|       |  3515   (8)| 00:00:11 |
|* 35 |                    SORT JOIN                             |                              |  1277K|    90M|   215M|  3691  (13)| 00:00:12 |
|  36 |                     PARTITION LIST ALL                   |                              |  1277K|    90M|       |  3383   (5)| 00:00:11 |
|  37 |                      TABLE ACCESS FULL                   | OPT_PROD_FY_FDIM             |  1277K|    90M|       |  3383   (5)| 00:00:11 |
|  38 |               PX RECEIVE                                 |                              |   368M|    71G|       | 45115  (21)| 00:02:22 |
|  39 |                PX SEND HASH                              | :TQ10006                     |   368M|    71G|       | 45115  (21)| 00:02:22 |
|  40 |                 BUFFER SORT                              |                              |   370M|   164G|       |    19M  (3)| 16:58:01 |
|  41 |                  VIEW                                    |                              |   368M|    71G|       | 45115  (21)| 00:02:22 |
|  42 |                   UNION-ALL                              |                              |    |  |       |            |          |       |
|  43 |                    BUFFER SORT                           |                              |    |  |       |            |          |       |
|  44 |                     PX RECEIVE                           |                              |    |  |       |            |          |       |
|  45 |                      PX SEND ROUND-ROBIN                 | :TQ10000                     |    |  |       |            |          |       |
|  46 |                       HASH GROUP BY                      |                              |   362M|    68G|       | 38247  (33)| 00:02:00 |
|  47 |                        MERGE JOIN                        |                              |   362M|    68G|       | 38247  (33)| 00:02:00 |
|  48 |                         SORT JOIN                        |                              |  3262K|   588M|       | 25060   (7)| 00:01:19 |
|  49 |                          VIEW                            | VW_GBC_7                     |  3262K|   588M|       | 25060   (7)| 00:01:19 |
|  50 |                           HASH GROUP BY                  |                              |  3262K|   164M|   324M| 25060   (7)| 00:01:19 |
|  51 |                            PARTITION RANGE ALL           |                              |  3262K|   164M|       |  2150  (21)| 00:00:07 |
|  52 |                             PARTITION LIST ALL           |                              |  3262K|   164M|       |  2150  (21)| 00:00:07 |
|  53 |                              TABLE ACCESS FULL           | OPT_BRAND_BASLN_IFCT         |  3262K|   164M|       |  2150  (21)| 00:00:07 |
|* 54 |                         SORT JOIN                        |                              |   220K|  2798K|  8656K|  2280   (4)| 00:00:08 |
|  55 |                          VIEW                            | VW_NSO_1                     |   220K|  2798K|       |  1687   (2)| 00:00:06 |
|  56 |                           HASH UNIQUE                    |                              |   220K|  1291K|       |  1687  (99)| 00:00:06 |
|  57 |                            UNION-ALL                     |                              |    |  |       |            |          |       |
|  58 |                             PARTITION LIST ALL           |                              | 84900 |   497K|       |    27   (0)| 00:00:01 |
|  59 |                              BITMAP CONVERSION TO ROWIDS |                              | 84900 |   497K|       |    27   (0)| 00:00:01 |
|  60 |                               BITMAP INDEX FAST FULL SCAN| OPT_PRMTN_DIM_BX2            |    |  |       |            |          |     1 |
|  61 |                             PARTITION LIST ALL           |                              |   135K|   794K|       |  1660   (2)| 00:00:06 |
|  62 |                              TABLE ACCESS FULL           | OPT_FUND_DIM                 |   135K|   794K|       |  1660   (2)| 00:00:06 |
|  63 |                    HASH GROUP BY                         |                              |  5699K|   706M|       |  6867  (19)| 00:00:22 |
|  64 |                     PX RECEIVE                           |                              |  5699K|   706M|       |  6867  (19)| 00:00:22 |
|  65 |                      PX SEND HASH                        | :TQ10005                     |  5699K|   706M|       |  6867  (19)| 00:00:22 |
|  66 |                       HASH GROUP BY                      |                              |  5699K|   706M|       |  6867  (19)| 00:00:22 |
|  67 |                        PX BLOCK ITERATOR                 |                              |  5699K|   706M|       |  5945   (6)| 00:00:19 |
|  68 |                         TABLE ACCESS FULL                | OPT_ACCT_BRAND_FY_SPDNG_TEMP |  5699K|   706M|       |  5945   (6)| 00:00:19 |
-------------------------------------------------------------------------------------------------------------------------------------------------

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

 4 - access("BRAND_BASLN"."PRMTN_ACCT_SKID"="ACCT_SKID")
12 - access("BRAND_BASLN"."DATE_SKID"="CALENDAR"."CAL_MASTR_SKID")
19 - access("BRAND_BASLN"."BUS_UNIT_SKID"="BU"."BUS_UNIT_SKID")
26 - access("BRAND_BASLN"."PROD_SKID"="BRAND"."PROD_SKID" AND "BRAND_BASLN"."FY_DATE_SKID"="BRAND"."FY_DATE_SKID" AND "BRAND_BASLN"."BUS_UNIT_SKID"="BRAND"."BUS_UNIT_SKID")
35 - access("BRAND"."FY_DATE_SKID"="CAT"."FY_DATE_SKID" AND "BRAND"."PARNT_PROD_ID"="CAT"."PROD_ID")
     filter("BRAND"."PARNT_PROD_ID"="CAT"."PROD_ID" AND "BRAND"."FY_DATE_SKID"="CAT"."FY_DATE_SKID")
54 - access("ITEM_1"="ACCT_SKID")
     filter("ITEM_1"="ACCT_SKID")

87 rows selected.

 

Please see ID=48 ,operation is MERGE JOIN and Bytes=68G. That's too strange.And why Oracle not use HASH JOIN?

SQL> alter session set optimizer_features_enable='10.2.0.3';

Session altered.
Let's Check Execution Plan again.

 

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 3669890889

---------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                                  | Name                         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                           |                              |    13M|  6341M|       |  2036K  (9)| 01:46:08 |
|   1 |  PX COORDINATOR                                            |                              |    |          |       |            |          |
|   2 |   PX SEND QC (RANDOM)                                      | :TQ10012                     |    13M|  6341M|       |  2036K  (9)| 01:46:08 |
|   3 |    HASH GROUP BY                                           |                              |    13M|  6341M|    12G|  2036K  (9)| 01:46:08 |
|*  4 |     HASH JOIN                                              |                              |    13M|  6341M|       |  1304K (14)| 01:08:01 |
|   5 |      BUFFER SORT                                           |                              |    |          |       |            |          |
|   6 |       PX RECEIVE                                           |                              |   219K|    12M|       |  2161   (4)| 00:00:07 |
|   7 |        PX SEND HASH                                        | :TQ10005                     |   219K|    12M|       |  2161   (4)| 00:00:07 |
|   8 |         PARTITION LIST ALL                                 |                              |   219K|    12M|       |  2161   (4)| 00:00:07 |
|   9 |          TABLE ACCESS FULL                                 | OPT_ACCT_FDIM                |   219K|    12M|       |  2161   (4)| 00:00:07 |
|  10 |      PX RECEIVE                                            |                              |    13M|  5512M|       |  1302K (14)| 01:07:52 |
|  11 |       PX SEND HASH                                         | :TQ10011                     |    13M|  5512M|       |  1302K (14)| 01:07:52 |
|* 12 |        HASH JOIN BUFFERED                                  |                              |    13M|  5512M|       |  1302K (14)| 01:07:52 |
|  13 |         BUFFER SORT                                        |                              |    |          |       |            |          |
|  14 |          PX RECEIVE                                        |                              |  1277K|    90M|       |  3383   (5)| 00:00:11 |
|  15 |           PX SEND HASH                                     | :TQ10004                     |  1277K|    90M|       |  3383   (5)| 00:00:11 |
|  16 |            PARTITION RANGE ALL                             |                              |  1277K|    90M|       |  3383   (5)| 00:00:11 |
|  17 |             PARTITION LIST ALL                             |                              |  1277K|    90M|       |  3383   (5)| 00:00:11 |
|  18 |              TABLE ACCESS FULL                             | OPT_PROD_FY_FDIM             |  1277K|    90M|       |  3383   (5)| 00:00:11 |
|  19 |         PX RECEIVE                                         |                              |    13M|  4531M|       |  1298K (14)| 01:07:40 |
|  20 |          PX SEND HASH                                      | :TQ10010                     |    13M|  4531M|       |  1298K (14)| 01:07:40 |
|* 21 |           HASH JOIN BUFFERED                               |                              |    13M|  4531M|       |  1298K (14)| 01:07:40 |
|  22 |            BUFFER SORT                                     |                              |    |          |       |            |          |
|  23 |             PX RECEIVE                                     |                              |  1277K|   103M|       |  3515   (8)| 00:00:11 |
|  24 |              PX SEND HASH                                  | :TQ10003                     |  1277K|   103M|       |  3515   (8)| 00:00:11 |
|  25 |               PARTITION RANGE ALL                          |                              |  1277K|   103M|       |  3515   (8)| 00:00:11 |
|  26 |                PARTITION LIST ALL                          |                              |  1277K|   103M|       |  3515   (8)| 00:00:11 |
|  27 |                 TABLE ACCESS FULL                          | OPT_PROD_FY_FDIM             |  1277K|   103M|       |  3515   (8)| 00:00:11 |
|  28 |            PX RECEIVE                                      |                              |    13M|  3405M|       |  1294K (14)| 01:07:28 |
|  29 |             PX SEND HASH                                   | :TQ10009                     |    13M|  3405M|       |  1294K (14)| 01:07:28 |
|* 30 |              HASH JOIN BUFFERED                            |                              |    13M|  3405M|       |  1294K (14)| 01:07:28 |
|  31 |               BUFFER SORT                                  |                              |    |          |       |            |          |
|  32 |                PX RECEIVE                                  |                              | 37190 |  1271K|       |    41  (10)| 00:00:01 |
|  33 |                 PX SEND HASH                               | :TQ10002                     | 37190 |  1271K|       |    41  (10)| 00:00:01 |
|  34 |                  TABLE ACCESS FULL                         | OPT_CAL_MASTR_MV01           | 37190 |  1271K|       |    41  (10)| 00:00:01 |
|  35 |               PX RECEIVE                                   |                              |    13M|  2941M|       |  1293K (14)| 01:07:26 |
|  36 |                PX SEND HASH                                | :TQ10008                     |    13M|  2941M|       |  1293K (14)| 01:07:26 |
|* 37 |                 HASH JOIN BUFFERED                         |                              |    13M|  2941M|       |  1293K (14)| 01:07:26 |
|  38 |                  BUFFER SORT                               |                              |    |          |       |            |          |
|  39 |                   PX RECEIVE                               |                              |    29 |   406 |       |     1   (0)| 00:00:01 |
|  40 |                    PX SEND HASH                            | :TQ10001                     |    29 |   406 |       |     1   (0)| 00:00:01 |
|  41 |                     INDEX FULL SCAN                        | OPT_BUS_UNIT_FDIM_UX2        |    29 |   406 |       |     1   (0)| 00:00:01 |
|  42 |                  PX RECEIVE                                |                              |    13M|  2756M|       |  1287K (13)| 01:07:08 |
|  43 |                   PX SEND HASH                             | :TQ10007                     |    13M|  2756M|       |  1287K (13)| 01:07:08 |
|  44 |                    BUFFER SORT                             |                              |    13M|  6341M|       |  2036K  (9)| 01:46:08 |
|  45 |                     VIEW                                   |                              |    13M|  2756M|       |  1287K (13)| 01:07:08 |
|  46 |                      UNION-ALL                             |                              |    |          |       |            |          |
|  47 |                       BUFFER SORT                          |                              |    |          |       |            |          |
|  48 |                        PX RECEIVE                          |                              |    |          |       |            |          |
|  49 |                         PX SEND ROUND-ROBIN                | :TQ10000                     |    |          |       |            |          |
|  50 |                          HASH GROUP BY                     |                              |  8194K|   515M|    33G|  1280K (14)| 01:06:46 |
|* 51 |                           HASH JOIN                        |                              |   362M|    22G|  5392K| 18070  (65)| 00:00:57 |
|  52 |                            VIEW                            | VW_NSO_1                     |   220K|  2798K|       |  1687   (2)| 00:00:06 |
|  53 |                             HASH UNIQUE                    |                              |   220K|  1291K|       |  1687  (99)| 00:00:06 |
|  54 |                              UNION-ALL                     |                              |    |          |       |            |          |
|  55 |                               PARTITION LIST ALL           |                              | 84900 |   497K|       |    27   (0)| 00:00:01 |
|  56 |                                BITMAP CONVERSION TO ROWIDS |                              | 84900 |   497K|       |    27   (0)| 00:00:01 |
|  57 |                                 BITMAP INDEX FAST FULL SCAN| OPT_PRMTN_DIM_BX2            |    |          |       |            |          |
|  58 |                               PARTITION LIST ALL           |                              |   135K|   794K|       |  1660   (2)| 00:00:06 |
|  59 |                                TABLE ACCESS FULL           | OPT_FUND_DIM                 |   135K|   794K|       |  1660   (2)| 00:00:06 |
|  60 |                            PARTITION RANGE ALL             |                              |  3262K|   164M|       |  2150  (21)| 00:00:07 |
|  61 |                             PARTITION LIST ALL             |                              |  3262K|   164M|       |  2150  (21)| 00:00:07 |
|  62 |                              TABLE ACCESS FULL             | OPT_BRAND_BASLN_IFCT         |  3262K|   164M|       |  2150  (21)| 00:00:07 |
|  63 |                       HASH GROUP BY                        |                              |  5699K|   706M|       |  6874  (19)| 00:00:22 |
|  64 |                        PX RECEIVE                          |                              |  5699K|   706M|       |  6874  (19)| 00:00:22 |
|  65 |                         PX SEND HASH                       | :TQ10006                     |  5699K|   706M|       |  6874  (19)| 00:00:22 |
|  66 |                          HASH GROUP BY                     |                              |  5699K|   706M|       |  6874  (19)| 00:00:22 |
|  67 |                           PX BLOCK ITERATOR                |                              |  5699K|   706M|       |  5945   (6)| 00:00:19 |
|  68 |                            TABLE ACCESS FULL               | OPT_ACCT_BRAND_FY_SPDNG_TEMP |  5699K|   706M|       |  5945   (6)| 00:00:19 |
-------------------------------------------------------------------------------------------------------------------------------------------------------

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

   4 - access("BRAND_BASLN"."PRMTN_ACCT_SKID"="ACCT_SKID")
  12 - access("BRAND"."FY_DATE_SKID"="CAT"."FY_DATE_SKID" AND "BRAND"."PARNT_PROD_ID"="CAT"."PROD_ID")
  21 - access("BRAND_BASLN"."PROD_SKID"="BRAND"."PROD_SKID" AND "BRAND_BASLN"."FY_DATE_SKID"="BRAND"."FY_DATE_SKID" AND "BRAND_BASLN"."BUS_UNIT_SKID"="
  30 - access("BRAND_BASLN"."DATE_SKID"="CALENDAR"."CAL_MASTR_SKID")
  37 - access("BRAND_BASLN"."BUS_UNIT_SKID"="BU"."BUS_UNIT_SKID")
  51 - access("PRMTN_ACCT_SKID"="ACCT_SKID")

85 rows selected.

There is no SORT MERGE JOIN, try to run SQL

SQL> create table OPT_ACCT_BRAND_FY_SPDNG_FCT1
  2  parallel 2   TABLESPACE OPTIMA01M
  3  nologging as
  4  SELECT BRAND.PROD_SKID,
  5         CALENDAR.MTH_SKID,
  6         CALENDAR.FISC_YR_SKID,
  7         BU.BUS_UNIT_SKID,
  8         ACCT.ACCT_SKID,
  9         ACCT.ACCT_NAME ACCOUNT,
 10         ACCT.NAME ACCOUNT_ID,
 11         CAT.PROD_DESC CATEGORY,
 12         CAT.PROD_NAME CATEGORY_ID,
 13         BRAND.PROD_DESC BRAND,
 14         BRAND.PROD_NAME BRAND_ID,
 15         CALENDAR.MTH_NAME MONTH_NAME,
 16         BU.BUS_UNIT_NAME,
 17         CALENDAR.FISC_YR_ABBR_NAME,
 18         --Optima R11, Dec 28th, Barbara Modified Begin, For TSP accounts, show NULL for Base and Increment SU
 19         DECODE(SUBSTR(ACCT.FUND_FRCST_MODEL_DESC,1,3),'TSP',NULL,SUM (BRAND_BASLN.ESTMT_BASLN_CASES_AMT)) BASE_SU,
 20         DECODE(SUBSTR(ACCT.FUND_FRCST_MODEL_DESC,1,3),'TSP',NULL,SUM (BRAND_BASLN.INCRM_SU_AMT)) INC_SU,
 21         --Optima R11, Dec 28th, Barbara Modified End
 22         SUM (BRAND_BASLN.TOT_PLAN_SU_AMT) TOTAL_SU,
 23         SUM (BRAND_BASLN.TOT_PLAN_GIV_AMT) GIV,
 24         SUM (BRAND_BASLN.TOT_PLAN_NIV_AMT) NIV,
 25         --Modified By Barbara on Nov 22nd 2010 in R11 for B018,
 26         --TOT_PLAN_NOS_AMT in opt_brand_basln_ifct has been aggregated result along account hierarchy, in this view, we do not want aggregated result
 27         --SUM (BRAND_BASLN.TOT_PLAN_NOS_AMT) NOS,
 28         SUM (BRAND_BASLN.TOT_PLAN_GIV_AMT) - SUM (BRAND_BASLN.TOT_SLOG_AMT)  - SUM (TOT_MDA_LOR) NOS,
 29         SUM (BRAND_BASLN.TOT_SLOG_AMT) SLOG,
 30         SUM (ESTMT_FIXED_MDA_LOR) ESTMT_FIXED_MDA_LOR,
 31         SUM (ESTMT_VARIABLE_MDA_LOR) ESTMT_VARIABLE_MDA_LOR,
 32         SUM (ESTMT_FIXED_MDA_EXPENSE) ESTMT_FIXED_MDA_EXPENSE,
 33         SUM (ESTMT_VARIABLE_MDA_EXPENSE) ESTMT_VARIABLE_MDA_EXPENSE
 34    FROM (SELECT PROD_SKID,
 35                 DATE_SKID,
 36                 FY_DATE_SKID,
 37                PRMTN_ACCT_SKID,
 38                 BUS_UNIT_SKID,
 39                 SUM (ESTMT_BASLN_CASES_AMT) ESTMT_BASLN_CASES_AMT,
 40                 SUM (INCRM_SU_AMT) INCRM_SU_AMT,
 41                 SUM (TOT_PLAN_SU_AMT) TOT_PLAN_SU_AMT,
 42                 SUM (TOT_PLAN_GIV_AMT) TOT_PLAN_GIV_AMT,
 43                 SUM (TOT_PLAN_NIV_AMT) TOT_PLAN_NIV_AMT,
 44                 SUM (TOT_PLAN_NOS_AMT) TOT_PLAN_NOS_AMT,
 45                 SUM ((SLOG_TRADE_TERM_PCT/100) * TOT_PLAN_GIV_AMT) TOT_SLOG_AMT,
 46                 0 TOT_MDA_LOR,
 47                 0 ESTMT_FIXED_MDA_LOR,
 48                 0 ESTMT_VARIABLE_MDA_LOR,
 49                 0 ESTMT_FIXED_MDA_EXPENSE,
 50                 0 ESTMT_VARIABLE_MDA_EXPENSE
 51            FROM OPT_BRAND_BASLN_IFCT
 52              --Optima R11,Dec 28th, Barbara Add Begin,for OPT_BRAND_BASLN_IFCT contains many more accounts because of account aggregation
 53           WHERE PRMTN_ACCT_SKID IN (SELECT ACCT_SKID
 54                                       FROM OPT_PRMTN_DIM
 55                                      UNION all
 56                                     SELECT ACCT_SKID
 57                                       FROM OPT_FUND_DIM)
 58              --Optima R11,Dec 28th, Barbara Add End
 59           GROUP BY PROD_SKID,
 60                 DATE_SKID,
 61                 FY_DATE_SKID,
 62                 PRMTN_ACCT_SKID,
 63                 BUS_UNIT_SKID
 64           UNION ALL
 65          SELECT BRAND_SKID PROD_SKID,
 66                 MTH_SKID DATE_SKID,
 67                 FY_DATE_SKID,
 68                 ACCT_SKID PRMTN_ACCT_SKID,
 69                 BUS_UNIT_SKID,
 70                 0 ESTMT_BASLN_CASES_AMT,
 71                 0 INCRM_SU_AMT,
 72                 0 TOT_PLAN_SU_AMT,
 73                 0 TOT_PLAN_GIV_AMT,
 74                 0 TOT_PLAN_NIV_AMT,
 75                 0 TOT_PLAN_NOS_AMT,
 76                 0 TOT_SLOG_AMT,
 77                 SUM (TOT_MDA_LOR) TOT_MDA_LOR,
 78                 SUM (ESTMT_FIXED_MDA_LOR) ESTMT_FIXED_MDA_LOR,
 79                 SUM (ESTMT_VARIABLE_MDA_LOR) ESTMT_VARIABLE_MDA_LOR,
 80                 SUM (ESTMT_FIXED_MDA_EXPENSE) ESTMT_FIXED_MDA_EXPENSE,
 81                 SUM (ESTMT_VARIABLE_MDA_EXPENSE) ESTMT_VARIABLE_MDA_EXPENSE
 82            FROM OPT_ACCT_BRAND_FY_SPDNG_TEMP
 83           GROUP BY BRAND_SKID,
 84                 MTH_SKID,
 85                 FY_DATE_SKID,
 86                 ACCT_SKID,
 87                 BUS_UNIT_SKID) BRAND_BASLN,
 88             OPT_PROD_FY_FDIM BRAND,
 89             OPT_PROD_FY_FDIM CAT,
 90             OPT_CAL_MASTR_MV01 CALENDAR,
 91             OPT_ACCT_FDIM ACCT,
 92             OPT_BUS_UNIT_FDIM BU
 93        WHERE     BRAND_BASLN.PROD_SKID = BRAND.PROD_SKID
 94              AND BRAND_BASLN.FY_DATE_SKID = BRAND.FY_DATE_SKID
 95              AND BRAND.FY_DATE_SKID = CAT.FY_DATE_SKID
 96              AND BRAND.PARNT_PROD_ID = CAT.PROD_ID
 97              AND BRAND_BASLN.PRMTN_ACCT_SKID = ACCT_SKID
 98              AND BRAND_BASLN.BUS_UNIT_SKID = BRAND.BUS_UNIT_SKID
 99              AND BRAND_BASLN.DATE_SKID = CALENDAR.CAL_MASTR_SKID
100              AND BRAND_BASLN.BUS_UNIT_SKID = BU.BUS_UNIT_SKID
101        GROUP BY ACCT.ACCT_NAME,
102                 ACCT.NAME,
103                 CAT.PROD_DESC,
104                 CAT.PROD_NAME,
105                 BRAND.PROD_DESC,
106                 BRAND.PROD_NAME,
107                 CALENDAR.MTH_NAME,
108                 BU.BUS_UNIT_NAME,
109                 CALENDAR.FISC_YR_ABBR_NAME,
110                 BRAND.PROD_SKID,
111                 CALENDAR.MTH_SKID,
112                 BU.BUS_UNIT_SKID,
113                 CALENDAR.FISC_YR_SKID,
114                 ACCT.FUND_FRCST_MODEL_DESC,
115                 ACCT.ACCT_SKID;

Table created.

Elapsed: 00:04:20.81

check if stats is stale using below SQL.

exec dbms_stats.flush_database_monitoring_info;

select owner || '.' || table_name name , object_type,stale_stats,last_analyzed from dba_tab_statistics
where owner='ADWU_OPTIMA_CE11' and table_name in
('OPT_ACCT_BRAND_FY_SPDNG_TEMP',
 'OPT_BRAND_BASLN_IFCT',
 'OPT_PRMTN_DIM',
 'OPT_FUND_DIM'
) and stale_stats='YES';

I find table OPT_PRMTN_DIM is stale

SQL> BEGIN
  2  DBMS_STATS.GATHER_TABLE_STATS(ownname => 'ADWU_OPTIMA_CE11',
  3  tabname => 'OPT_PRMTN_DIM',
  4  estimate_percent => 30,
  5  method_opt => 'for all columns size repeat',
  6  degree => 6,
  7  granularity => 'ALL',
  8  cascade=>TRUE
  9  );
 10  END;
 11  /

PL/SQL procedure successfully completed.

Check Execution Plan again.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 1551275144

-------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                                | Name                         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                         |                              |   369M|   163G|       |    19M  (3)| 16:54:53 |
|   1 |  PX COORDINATOR                                          |                              |    |  |       |            |          |       |
|   2 |   PX SEND QC (RANDOM)                                    | :TQ10010                     |   369M|   163G|       |    19M  (3)| 16:54:53 |
|   3 |    HASH GROUP BY                                         |                              |   369M|   163G|   170G|    19M  (3)| 16:54:53 |
|*  4 |     HASH JOIN                                            |                              |   369M|   163G|       |   105K (58)| 00:05:29 |
|   5 |      BUFFER SORT                                         |                              |    |  |       |            |          |       |
|   6 |       PX RECEIVE                                         |                              |   219K|    12M|       |  2161   (4)| 00:00:07 |
|   7 |        PX SEND HASH                                      | :TQ10004                     |   219K|    12M|       |  2161   (4)| 00:00:07 |
|   8 |         PARTITION LIST ALL                               |                              |   219K|    12M|       |  2161   (4)| 00:00:07 |
|   9 |          TABLE ACCESS FULL                               | OPT_ACCT_FDIM                |   219K|    12M|       |  2161   (4)| 00:00:07 |
|  10 |      PX RECEIVE                                          |                              |   367M|   142G|       | 91813  (54)| 00:04:48 |
|  11 |       PX SEND HASH                                       | :TQ10009                     |   367M|   142G|       | 91813  (54)| 00:04:48 |
|* 12 |        HASH JOIN BUFFERED                                |                              |   367M|   142G|       | 91813  (54)| 00:04:48 |
|  13 |         BUFFER SORT                                      |                              |    |  |       |            |          |       |
|  14 |          PX RECEIVE                                      |                              | 37190 |  1271K|       |    41  (10)| 00:00:01 |
|  15 |           PX SEND HASH                                   | :TQ10003                     | 37190 |  1271K|       |    41  (10)| 00:00:01 |
|  16 |            TABLE ACCESS FULL                             | OPT_CAL_MASTR_MV01           | 37190 |  1271K|       |    41  (10)| 00:00:01 |
|  17 |         PX RECEIVE                                       |                              |   367M|   130G|       | 80624  (48)| 00:04:13 |
|  18 |          PX SEND HASH                                    | :TQ10008                     |   367M|   130G|       | 80624  (48)| 00:04:13 |
|* 19 |           HASH JOIN BUFFERED                             |                              |   367M|   130G|       | 80624  (48)| 00:04:13 |
|  20 |            BUFFER SORT                                   |                              |    |  |       |            |          |       |
|  21 |             PX RECEIVE                                   |                              |    29 |   406 |       |     1   (0)| 00:00:01 |
|  22 |              PX SEND HASH                                | :TQ10002                     |    29 |   406 |       |     1   (0)| 00:00:01 |
|  23 |               INDEX FULL SCAN                            | OPT_BUS_UNIT_FDIM_UX2        |    29 |   406 |       |     1   (0)| 00:00:01 |
|  24 |            PX RECEIVE                                    |                              |   367M|   125G|       | 69477  (40)| 00:03:38 |
|  25 |             PX SEND HASH                                 | :TQ10007                     |   367M|   125G|       | 69477  (40)| 00:03:38 |
|* 26 |              HASH JOIN BUFFERED                          |                              |   367M|   125G|       | 69477  (40)| 00:03:38 |
|  27 |               BUFFER SORT                                |                              |    |  |       |            |          |       |
|  28 |                PX RECEIVE                                |                              |  1277K|   193M|       |  7514  (14)| 00:00:24 |
|  29 |                 PX SEND HASH                             | :TQ10001                     |  1277K|   193M|       |  7514  (14)| 00:00:24 |
|  30 |                  PARTITION RANGE ALL                     |                              |  1277K|   193M|       |  7514  (14)| 00:00:24 |
|  31 |                   MERGE JOIN                             |                              |  1277K|   193M|       |  7514  (14)| 00:00:24 |
|  32 |                    SORT JOIN                             |                              |  1277K|   103M|   254M|  3823  (16)| 00:00:12 |
|  33 |                     PARTITION LIST ALL                   |                              |  1277K|   103M|       |  3515   (8)| 00:00:11 |
|  34 |                      TABLE ACCESS FULL                   | OPT_PROD_FY_FDIM             |  1277K|   103M|       |  3515   (8)| 00:00:11 |
|* 35 |                    SORT JOIN                             |                              |  1277K|    90M|   215M|  3691  (13)| 00:00:12 |
|  36 |                     PARTITION LIST ALL                   |                              |  1277K|    90M|       |  3383   (5)| 00:00:11 |
|  37 |                      TABLE ACCESS FULL                   | OPT_PROD_FY_FDIM             |  1277K|    90M|       |  3383   (5)| 00:00:11 |
|  38 |               PX RECEIVE                                 |                              |   367M|    71G|       | 45080  (21)| 00:02:21 |
|  39 |                PX SEND HASH                              | :TQ10006                     |   367M|    71G|       | 45080  (21)| 00:02:21 |
|  40 |                 BUFFER SORT                              |                              |   369M|   163G|       |    19M  (3)| 16:54:53 |
|  41 |                  VIEW                                    |                              |   367M|    71G|       | 45080  (21)| 00:02:21 |
|  42 |                   UNION-ALL                              |                              |    |  |       |            |          |       |
|  43 |                    BUFFER SORT                           |                              |    |  |       |            |          |       |
|  44 |                     PX RECEIVE                           |                              |    |  |       |            |          |       |
|  45 |                      PX SEND ROUND-ROBIN                 | :TQ10000                     |    |  |       |            |          |       |
|  46 |                       HASH GROUP BY                      |                              |   361M|    68G|       | 38212  (33)| 00:02:00 |
|  47 |                        MERGE JOIN                        |                              |   361M|    68G|       | 38212  (33)| 00:02:00 |
|  48 |                         SORT JOIN                        |                              |  3262K|   588M|       | 25060   (7)| 00:01:19 |
|  49 |                          VIEW                            | VW_GBC_7                     |  3262K|   588M|       | 25060   (7)| 00:01:19 |
|  50 |                           HASH GROUP BY                  |                              |  3262K|   164M|   324M| 25060   (7)| 00:01:19 |
|  51 |                            PARTITION RANGE ALL           |                              |  3262K|   164M|       |  2150  (21)| 00:00:07 |
|  52 |                             PARTITION LIST ALL           |                              |  3262K|   164M|       |  2150  (21)| 00:00:07 |
|  53 |                              TABLE ACCESS FULL           | OPT_BRAND_BASLN_IFCT         |  3262K|   164M|       |  2150  (21)| 00:00:07 |
|* 54 |                         SORT JOIN                        |                              |   219K|  2790K|  8624K|  2280   (4)| 00:00:08 |
|  55 |                          VIEW                            | VW_NSO_1                     |   219K|  2790K|       |  1688   (2)| 00:00:06 |
|  56 |                           HASH UNIQUE                    |                              |   219K|  1287K|       |  1688  (99)| 00:00:06 |
|  57 |                            UNION-ALL                     |                              |    |  |       |            |          |       |
|  58 |                             PARTITION LIST ALL           |                              | 84210 |   493K|       |    28   (0)| 00:00:01 |
|  59 |                              BITMAP CONVERSION TO ROWIDS |                              | 84210 |   493K|       |    28   (0)| 00:00:01 |
|  60 |                               BITMAP INDEX FAST FULL SCAN| OPT_PRMTN_DIM_BX2            |    |  |       |            |          |     1 |
|  61 |                             PARTITION LIST ALL           |                              |   135K|   794K|       |  1660   (2)| 00:00:06 |
|  62 |                              TABLE ACCESS FULL           | OPT_FUND_DIM                 |   135K|   794K|       |  1660   (2)| 00:00:06 |
|  63 |                    HASH GROUP BY                         |                              |  5699K|   706M|       |  6867  (19)| 00:00:22 |
|  64 |                     PX RECEIVE                           |                              |  5699K|   706M|       |  6867  (19)| 00:00:22 |
|  65 |                      PX SEND HASH                        | :TQ10005                     |  5699K|   706M|       |  6867  (19)| 00:00:22 |
|  66 |                       HASH GROUP BY                      |                              |  5699K|   706M|       |  6867  (19)| 00:00:22 |
|  67 |                        PX BLOCK ITERATOR                 |                              |  5699K|   706M|       |  5945   (6)| 00:00:19 |
|  68 |                         TABLE ACCESS FULL                | OPT_ACCT_BRAND_FY_SPDNG_TEMP |  5699K|   706M|       |  5945   (6)| 00:00:19 |
-------------------------------------------------------------------------------------------------------------------------------------------------

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

   4 - access("BRAND_BASLN"."PRMTN_ACCT_SKID"="ACCT_SKID")
  12 - access("BRAND_BASLN"."DATE_SKID"="CALENDAR"."CAL_MASTR_SKID")
  19 - access("BRAND_BASLN"."BUS_UNIT_SKID"="BU"."BUS_UNIT_SKID")
  26 - access("BRAND_BASLN"."PROD_SKID"="BRAND"."PROD_SKID" AND "BRAND_BASLN"."FY_DATE_SKID"="BRAND"."FY_DATE_SKID" AND "BRAND_BASLN"."BUS_UNIT_S
  35 - access("BRAND"."FY_DATE_SKID"="CAT"."FY_DATE_SKID" AND "BRAND"."PARNT_PROD_ID"="CAT"."PROD_ID")
       filter("BRAND"."PARNT_PROD_ID"="CAT"."PROD_ID" AND "BRAND"."FY_DATE_SKID"="CAT"."FY_DATE_SKID")
  54 - access("ITEM_1"="ACCT_SKID")
       filter("ITEM_1"="ACCT_SKID")

87 rows selected.

Still use SORT MERGE JOIN instead of HASH JOIN

I searched Metalink, not related bugs.

But it's no doubt that the issue is CBO issue. 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值