Bug 10190002: POOR PERFORMANCE WITH /*+ OPT_PARAM('_OPTIMIZER_PUSH_PRED_COST_BASED','TRUE')*/ _optim...

Recently I’ve met many long running issues that due to hidden paraleter _optimizer_extend_jppd_view_types set to true.
I have open an SR (3-3225436011) to oracle, and oracle said that it’s a bug

Bug 10190002: POOR PERFORMANCE WITH /*+ OPT_PARAM('_OPTIMIZER_PUSH_PRED_COST_BASED','TRUE')*/

Here is an example for this bug:

SQL:

CREATE TABLE robinson AS

SELECT PRMTN.BUS_UNIT_SKID,

PRMTN.ACCT_PRMTN_SKID,

PRMTN.PRMTN_SKID,

CASE WHEN (PRMTN.PRMTN_STTUS_CODE <> 'Completed' AND NVL(ACTVY.ACTL_MDA_LOR_AMT, 0 ) < NVL(ACTVY.ESTMT_MDA_LOR_AMT, 0))

THEN DECODE( ( PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM ), 0, 0, ( NVL(BASLN.ACTL_TMP_GIV - BASLN.BASLN_TMP_GIV, 0 ) - NVL(ACTVY.ESTMT_MDA_LOR_AMT, 0 ) ) / ( PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM ))

ELSE DECODE( ( PRMTN.ACTL_COST_TOT + PRMTN.ACTL_SPND_NUM ), 0, 0, ( NVL(BASLN.ACTL_TMP_GIV - BASLN.BASLN_TMP_GIV, 0 ) - NVL(ACTVY.ACTL_MDA_LOR_AMT, 0) ) / ( PRMTN.ACTL_COST_TOT + PRMTN.ACTL_SPND_NUM ))

END AS ACTL_EVENT_ROI, -- Actual Event ROI

/*DECODE((PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM), 0, 0, ( NVL(PRMTN.ESTMT_INCRM_NR_AMT, 0) - NVL(ACTVY.ESTMT_ROI_MDA_LOR_AMT, 0) ) / (PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM)) AS ESTMT_EVENT_ROI, -- Estimated Event ROI*/

(NVL(PRMTN_PROD.ACTL_TMP_NOS, 0 ) * ( 100 - PRMTN.PCT_CNBLN_NUM) / 100 - CASE WHEN (PRMTN.PRMTN_STTUS_CODE <> 'Completed' AND NVL(ACTVY.ACTL_MDA_LOR_AMT, 0 ) < NVL(ACTVY.ESTMT_MDA_LOR_AMT, 0 ))

THEN NVL(ACTVY.ESTMT_MDA_LOR_AMT, 0 ) ELSE NVL(ACTVY.ACTL_MDA_LOR_AMT, 0 ) END) AS ACTL_NOS_AMT, -- Actual NOS

(NVL(BASLN.ACTL_TMP_GIV - BASLN.BASLN_TMP_GIV, 0 ) - CASE WHEN (PRMTN.PRMTN_STTUS_CODE <> 'Completed' AND NVL(ACTVY.ACTL_MDA_LOR_AMT, 0 ) < NVL(ACTVY.ESTMT_MDA_LOR_AMT, 0 ))

THEN NVL(ACTVY.ESTMT_MDA_LOR_AMT, 0 ) ELSE NVL(ACTVY.ACTL_MDA_LOR_AMT, 0 ) END ) AS ACTL_INCRM_NOS_AMT, -- Actual Incremental NOS

(NVL(PRMTN_PROD.ESTMT_TMP_NOS , 0 ) * ( 100 - PRMTN.PCT_CNBLN_NUM) / 100 - NVL(ACTVY.ESTMT_MDA_LOR_AMT , 0 )) AS ESTMT_NOS_AMT, -- Estimated NOS

(NVL(PRMTN_PROD.ESTMT_TMP_INC_NOS , 0 ) * ( 100 - PRMTN.PCT_CNBLN_NUM ) / 100 - NVL(ACTVY.ESTMT_MDA_LOR_AMT , 0 )) AS ESTMT_INCRM_NOS_AMT, -- Estimated Incremental NOS

NVL(ACTVY.ESTMT_MDA_LOR_AMT , 0 ) AS ESTMT_MDA_LOR_AMT, -- Estimated MDA LOR

NVL(ACTVY.ACTL_MDA_LOR_AMT , 0 ) AS ACTL_MDA_LOR_AMT, -- Actual MDA LOR,

NVL(EPOS_FCT.ACTL_EPOS_SU_AMT , 0 ) AS ACTL_EPOS_SU_AMT, -- EPOS SU Amount

CASE WHEN (PRMTN.PRMTN_STTUS_CODE <> 'Completed' AND NVL(ACTVY.ACTL_MDA_LOR_AMT , 0 ) < NVL(ACTVY.ESTMT_MDA_LOR_AMT , 0 ))

THEN NVL(EPOS_BASLN.EPOS_ACTL_TMP_GIV - EPOS_BASLN.EPOS_BASLN_TMP_GIV , 0) - NVL(ACTVY.ESTMT_MDA_LOR_AMT , 0)

ELSE NVL(EPOS_BASLN.EPOS_ACTL_TMP_GIV - EPOS_BASLN.EPOS_BASLN_TMP_GIV , 0) - NVL(ACTVY.ACTL_MDA_LOR_AMT , 0)

END AS ACTL_EPOS_INCRM_NOS_AMT, -- Actual ePOS Incremental NOS

CASE WHEN (PRMTN.PRMTN_STTUS_CODE <> 'Completed' AND NVL(ACTVY.ACTL_MDA_LOR_AMT , 0 ) < NVL(ACTVY.ESTMT_MDA_LOR_AMT , 0 ))

THEN DECODE( ( PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM ), 0, 0, ( NVL(EPOS_BASLN.EPOS_ACTL_TMP_GIV - EPOS_BASLN.EPOS_BASLN_TMP_GIV , 0) - NVL(ACTVY.ESTMT_MDA_LOR_AMT,0) ) / ( PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM ))

ELSE DECODE( ( PRMTN.ACTL_COST_TOT + PRMTN.ACTL_SPND_NUM ), 0, 0, ( NVL(EPOS_BASLN.EPOS_ACTL_TMP_GIV - EPOS_BASLN.EPOS_BASLN_TMP_GIV , 0) - NVL(ACTVY.ACTL_MDA_LOR_AMT, 0) ) / ( PRMTN.ACTL_COST_TOT + PRMTN.ACTL_SPND_NUM ))

END AS ACTL_EPOS_EVENT_ROI, -- Actual ePOS Event ROI

------ Optima90, B010, Bean, Begin

( PRMTN.ESTMT_INCRM_NIV_AX_AMT - (PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT - PRMTN.ESTMT_VAR_COST_ON_INVC_NUM) ) AS ESTMT_INCRM_NOS_NIV_AMT,

---Estimated Incremental Net Outside Sales by Net Invoice Value Amount

(DECODE((PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM),NULL,0,0,0,

( PRMTN.ESTMT_INCRM_NIV_AX_AMT - (PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT - PRMTN.ESTMT_VAR_COST_ON_INVC_NUM)) / (PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM))) AS ESTMT_EVENT_ROI_NIV_RATE, ---Estimated Event Return On Investment by Net Invoice Value

CASE WHEN (PRMTN.PRMTN_STTUS_CODE <> 'Completed' AND

((((PRMTN.CALC_INDEX_NUM + PRMTN.ACTL_VAR_COST_NUM) - PRMTN.ACTL_VAR_COST_ON_INVC_NUM)) ----ACTUAL INCREMENTAL NIV - ACTUAL MDA NOT PAID ON INVOICE

< (((PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT) - PRMTN.ESTMT_VAR_COST_ON_INVC_NUM )))) ----- ESTIMATED INCREMENTAL NIV - ESTIMATED MDA NOT PAID ON INVOICE

THEN ( NVL(BASLN.ACTL_TMP_NIV - BASLN.BASLN_TMP_NIV, 0 ) - NVL(((PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT) - PRMTN.ESTMT_VAR_COST_ON_INVC_NUM ),0))

ELSE ( NVL(BASLN.ACTL_TMP_NIV - BASLN.BASLN_TMP_NIV, 0 ) - NVL(((PRMTN.CALC_INDEX_NUM + PRMTN.ACTL_VAR_COST_NUM) - PRMTN.ACTL_VAR_COST_ON_INVC_NUM),0))

END AS ACTL_INCRM_NOS_NIV_AMT, ---Actual Incremental Net Outside Sales by Net Invoice Value Amount

-----Actual Event Return On Investment by Net Invoice Value

CASE WHEN (PRMTN.PRMTN_STTUS_CODE <> 'Completed' AND

((((PRMTN.CALC_INDEX_NUM + PRMTN.ACTL_VAR_COST_NUM) - PRMTN.ACTL_VAR_COST_ON_INVC_NUM)) ----ACTUAL INCREMENTAL NIV - ACTUAL MDA NOT PAID ON INVOICE

< ((PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT) - PRMTN.ESTMT_VAR_COST_ON_INVC_NUM ))) ----- ESTIMATED INCREMENTAL NIV - ESTIMATED MDA NOT PAID ON INVOICE

THEN DECODE((PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM),null,0,0,0,

( NVL(BASLN.ACTL_TMP_NIV - BASLN.BASLN_TMP_NIV, 0 ) - NVL(((PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT) - PRMTN.ESTMT_VAR_COST_ON_INVC_NUM ),0)) /

(PRMTN.FIXED_COST_ESTMT_AMT + PRMTN.VAR_COST_ESTMT_AMT + PRMTN.BASE_COST_AMT + PRMTN.ESTMT_SPND_NUM))

ELSE DECODE(PRMTN.ACTL_COST_TOT + PRMTN.ACTL_SPND_NUM, null, 0, 0, 0, (( BASLN.ACTL_TMP_NIV - BASLN.BASLN_TMP_NIV) - ((PRMTN.CALC_INDEX_NUM + PRMTN.ACTL_VAR_COST_NUM) - PRMTN.ACTL_VAR_COST_ON_INVC_NUM))/(PRMTN.ACTL_COST_TOT + PRMTN.ACTL_SPND_NUM))

END AS ACTL_EVENT_ROI_NIV_RATE, --- Actual Event Return On Investment by Net Invoice Value

BASLN.ACTL_TMP_NIV AS ACTL_SHPMT_NIV_AMT,

BASLN.BASLN_TMP_NIV AS ACTL_SHPMT_BASLN_NIV_AMT

FROM (

SELECT BFCT.PRMTN_SKID,BFCT.ACCT_SKID,

SUM( BFCT.ACTL_GIV_AMT * (100 - NVL(BRAND_BASLN_FCT.TRADE_TERM_PCT,0)) / 100 ) AS ACTL_TMP_GIV,

SUM( BFCT.BASLN_GIV_AMT * (100 - NVL(BRAND_BASLN_FCT.TRADE_TERM_PCT,0)) / 100 ) AS BASLN_TMP_GIV,

------ Optima90, B010, Bean, Begin

SUM( BFCT.ACTL_NIV_AMT ) AS ACTL_TMP_NIV,

SUM( BFCT.BASLN_NIV_AMT ) AS BASLN_TMP_NIV

------ Optima90, B010, Bean, End

FROM ( -- Agrregate Actual GIV and Baseline GIV from Week to Month Level

SELECT BFCT.BUS_UNIT_SKID, BFCT.PROD_SKID, BFCT.ACCT_SKID, BFCT.PRMTN_SKID, D.MTH_SKID,

SUM(BFCT.ACTL_GIV_AMT) AS ACTL_GIV_AMT,

SUM(BFCT.BASLN_GIV_AMT) AS BASLN_GIV_AMT,

------ Optima90, B010, Bean, Begin

SUM(BFCT.ACTL_NIV_AMT) AS ACTL_NIV_AMT,

SUM(BFCT.BASLN_NIV_AMT) AS BASLN_NIV_AMT

------ Optima90, B010, Bean, End

FROM OPT_BASLN_FCT BFCT, OPT_CAL_MASTR_MV01 D

WHERE BFCT.WK_SKID = D.CAL_MASTR_SKID

GROUP BY BFCT.BUS_UNIT_SKID, BFCT.PROD_SKID, BFCT.ACCT_SKID, BFCT.PRMTN_SKID, D.MTH_SKID

)BFCT, OPT_BRAND_BASLN_FCT BRAND_BASLN_FCT, (SELECT DISTINCT PFCT.BASE_PRMTN_SKID AS PRMTN_SKID

FROM OPT_PRMTN_FCT PFCT

/*WHERE PFCT.REGN_CODE = 'AP'*/) PRMTN_FLT

WHERE BFCT.BUS_UNIT_SKID = BRAND_BASLN_FCT.BUS_UNIT_SKID(+)

AND BFCT.PROD_SKID = BRAND_BASLN_FCT.PROD_SKID(+)

AND BFCT.ACCT_SKID = BRAND_BASLN_FCT.PRMTN_ACCT_SKID(+)

AND BFCT.MTH_SKID = BRAND_BASLN_FCT.DATE_SKID(+)

AND BFCT.PRMTN_SKID = PRMTN_FLT.PRMTN_SKID

GROUP BY BFCT.PRMTN_SKID,BFCT.ACCT_SKID

) BASLN,

(

SELECT PFCT.BUS_UNIT_SKID,

PFCT.ACCT_PRMTN_SKID,

PFCT.BASE_PRMTN_SKID AS PRMTN_SKID,

PFCT.ACTL_SPND_NUM AS ACTL_SPND_NUM,

PFCT.CALC_INDEX_NUM + PFCT.ACTL_VAR_COST_NUM AS ACTL_COST_TOT,

PDIM.PRMTN_STTUS_CODE,

PFCT.VAR_COST_ESTMT_AMT AS VAR_COST_ESTMT_AMT,

PFCT.FIXED_COST_ESTMT_AMT AS FIXED_COST_ESTMT_AMT,

PFCT.BASE_COST_AMT AS BASE_COST_AMT,

PFCT.ESTMT_SPND_NUM AS ESTMT_SPND_NUM,

PFCT.ACTL_VAR_COST_NUM AS ACTL_VAR_COST_NUM,

PFCT.ESTMT_INCRM_NR_AMT,

PFCT.PCT_CNBLN_NUM,

-- Optima90, B010, Bean, Begin

PFCT.ESTMT_VAR_COST_ON_INVC_NUM,

PFCT.ACTL_VAR_COST_ON_INVC_NUM,

PFCT.CALC_INDEX_NUM,

PFCT.ESTMT_INCRM_NIV_AX_AMT

-- Optima90, B010, Bean, End

FROM OPT_PRMTN_FCT PFCT, OPT_PRMTN_DIM PDIM, (SELECT DISTINCT PFCT.BASE_PRMTN_SKID AS PRMTN_SKID

FROM OPT_PRMTN_FCT PFCT

/*WHERE PFCT.REGN_CODE = 'AP'*/) PRMTN_FLT

WHERE PDIM.PRMTN_SKID = PFCT.BASE_PRMTN_SKID

AND PDIM.PRMTN_SKID<>0

AND PFCT.BASE_PRMTN_SKID = PRMTN_FLT.PRMTN_SKID

) PRMTN,

(

SELECT PRMTN_PROD_FCT.PRMTN_SKID,

SUM(PRMTN_PROD_FCT.ACTL_GIV_AMT * ( 100 - PRMTN_PROD_FCT.TRADE_TERM_PCT) / 100) AS ACTL_TMP_NOS,

SUM(PRMTN_PROD_FCT.TOT_IN_GIV_AMT * ( 100 - PRMTN_PROD_FCT.TRADE_TERM_PCT) / 100) AS ESTMT_TMP_NOS, -- ESTMT_SPND_AMT -> TOT_IN_GIV_AMT, Changed by joy on Oct. 21, 2009

SUM(PRMTN_PROD_FCT.INCRM_IN_GIV_AMT * ( 100 - PRMTN_PROD_FCT.TRADE_TERM_PCT) / 100) AS ESTMT_TMP_INC_NOS

FROM OPT_PRMTN_PROD_FCT PRMTN_PROD_FCT, (SELECT DISTINCT PFCT.BASE_PRMTN_SKID AS PRMTN_SKID

FROM OPT_PRMTN_FCT PFCT

/*WHERE PFCT.REGN_CODE = 'AP'*/) PRMTN_FLT

WHERE PRMTN_PROD_FCT.PRMTN_SKID = PRMTN_FLT.PRMTN_SKID

GROUP BY PRMTN_PROD_FCT.PRMTN_SKID

) PRMTN_PROD,

(

SELECT OPT_ACTVY_FCT.PRMTN_SKID,

-- optima90, B019, Bean, begin

-- SUM(DECODE(SUBSTR(OPT_ACTVY_FDIM.COST_ELEM_CODE,1,2),'30', OPT_ACTVY_FCT.PRDCT_FIXED_COST_AMT + OPT_ACTVY_FCT.VAR_COST_ESTMT_AMT)) AS ESTMT_MDA_LOR_AMT, -- Estimated MDA LOR

-- SUM(DECODE(SUBSTR(OPT_ACTVY_FDIM.COST_ELEM_CODE,1,2),'30', OPT_ACTVY_FCT.PRDCT_FIXED_COST_AMT * ( 100 + OPT_ACTVY_FDIM.ACTVY_PCT_SPLIT_NUM) / 100 + OPT_ACTVY_FCT.VAR_COST_ESTMT_AMT)) AS ESTMT_ROI_MDA_LOR_AMT,

-- Estimated MDA LOR for Estimated Event ROI

-- SUM(DECODE(SUBSTR(OPT_ACTVY_FDIM.COST_ELEM_CODE,1,2),'30', OPT_ACTVY_FCT.CALC_INDEX_NUM + OPT_ACTVY_FCT.ACTL_VAR_COST_NUM)) AS ACTL_MDA_LOR_AMT -- Actual MDA LOR

--Bean, optima90, B019, remarked end

-- optima90, B019, Bean, begin recalcuate Estimated MDA LOR, Actual MDA LOR to avoid cost double counting according to SRS B019

SUM(DECODE(SUBSTR(OPT_ACTVY_FDIM.COST_ELEM_CODE,1,2),'30',DECODE(OPT_ACTVY_FDIM.ACTVY_SPECL_PACK_IND , NULL, OPT_ACTVY_FCT.PRDCT_FIXED_COST_AMT + OPT_ACTVY_FCT.VAR_COST_ESTMT_AMT ,0))) AS ESTMT_MDA_LOR_AMT,

-- Estimated MDA LOR

-- optima90, B019, Bean, end

SUM(DECODE(SUBSTR(OPT_ACTVY_FDIM.COST_ELEM_CODE,1,2),'30', OPT_ACTVY_FCT.PRDCT_FIXED_COST_AMT * ( 100 + OPT_ACTVY_FDIM.ACTVY_PCT_SPLIT_NUM) / 100 + OPT_ACTVY_FCT.VAR_COST_ESTMT_AMT)) AS ESTMT_ROI_MDA_LOR_AMT,

-- Estimated MDA LOR for Estimated Event ROI

-- Optima90, B019, Bean Begin

SUM(DECODE(SUBSTR(OPT_ACTVY_FDIM.COST_ELEM_CODE,1,2),'30',DECODE(OPT_ACTVY_FDIM.ACTVY_SPECL_PACK_IND , NULL, OPT_ACTVY_FCT.CALC_INDEX_NUM + OPT_ACTVY_FCT.ACTL_VAR_COST_NUM, 0))) AS ACTL_MDA_LOR_AMT

-- Actual MDA LOR

-- Optima90, B019, Bean end

FROM OPT_ACTVY_FCT, OPT_ACTVY_FDIM, (SELECT DISTINCT PFCT.BASE_PRMTN_SKID AS PRMTN_SKID

FROM OPT_PRMTN_FCT PFCT

/*WHERE PFCT.REGN_CODE = 'AP'*/) PRMTN_FLT

WHERE OPT_ACTVY_FCT.ACTVY_SKID = OPT_ACTVY_FDIM.ACTVY_SKID

AND OPT_ACTVY_FCT.PRMTN_SKID = PRMTN_FLT.PRMTN_SKID

GROUP BY OPT_ACTVY_FCT.PRMTN_SKID

) ACTVY,

(

SELECT PRMTN_PROD_FCT.PRMTN_SKID AS PRMTN_SKID,

SUM(EPOS_FCT.VOL_SU) AS ACTL_EPOS_SU_AMT

FROM OPT_EPOS_FCT EPOS_FCT,

OPT_PRMTN_PROD_FCT PRMTN_PROD_FCT,

OPT_CAL_MASTR_MV01 CAL_MASTR,

OPT_PRMTN_FDIM PRMTN_FDIM,

/*

(SELECT ACCT_SKID,

CONNECT_BY_ROOT ACCT_SKID AS ROOT_ACCT_SKID,

ACCT_TYPE_DESC

FROM OPT_ACCT_FDIM

CONNECT BY PRIOR ACCT_ID = PARNT_ACCT_ID

) HIER,

*/

-- Type 2 Account denormalized dimension

OPT_ACCT_ASDN_TYPE2_DIM HIER, (SELECT DISTINCT PFCT.BASE_PRMTN_SKID AS PRMTN_SKID

FROM OPT_PRMTN_FCT PFCT

/*WHERE PFCT.REGN_CODE = 'AP'*/) PRMTN_FLT

WHERE EPOS_FCT.PROD_SKID = PRMTN_PROD_FCT.PROD_SKID

AND PRMTN_PROD_FCT.PRMTN_SKID = PRMTN_FDIM.PRMTN_SKID

AND EPOS_FCT.DATE_SKID = CAL_MASTR.CAL_MASTR_SKID

AND CAL_MASTR.DAY_DATE BETWEEN HIER.ASDN_EFF_START_DATE AND HIER.ASDN_EFF_END_DATE

AND CAL_MASTR.DAY_DATE BETWEEN PRMTN_FDIM.PGM_START_DATE AND PRMTN_FDIM.PGM_END_DATE

-- ACCT_SKID in EPOS_FCT is on lower level, so ACCT_SKID in OPT_ACCT_ASDN_TYPE2_DIM is used

AND EPOS_FCT.ACCT_SKID = HIER.ACCT_SKID

-- ACCT_SKID in PROMOTION dimension is on higher level, so ASSOC_ACCT_SKID in OPT_ACCT_ASDN_TYPE2_DIM is used

--AND HIER.ROOT_ACCT_SKID = PRMTN_FDIM.ACCT_SKID

AND HIER.ASSOC_ACCT_SKID = PRMTN_FDIM.ACCT_SKID

AND PRMTN_PROD_FCT.PRMTN_SKID = PRMTN_FLT.PRMTN_SKID

GROUP BY PRMTN_PROD_FCT.PRMTN_SKID

) EPOS_FCT,

(

SELECT EPOS_BFCT.PRMTN_SKID AS PRMTN_SKID,

SUM( EPOS_BFCT.ACTL_GIV_AMT * (100 - NVL(BRAND_BASLN_FCT.TRADE_TERM_PCT,0)) / 100 ) AS EPOS_ACTL_TMP_GIV,

SUM( EPOS_BFCT.BASLN_GIV_AMT * (100 - NVL(BRAND_BASLN_FCT.TRADE_TERM_PCT,0)) / 100 ) AS EPOS_BASLN_TMP_GIV

FROM ( -- Agrregate Actual GIV and Baseline GIV from Week to Month Level

SELECT EPOS_BFCT.BUS_UNIT_SKID, EPOS_BFCT.ACCT_SKID, EPOS_BFCT.PRMTN_SKID, EPOS_BFCT.PROD_SKID, D.MTH_SKID,

SUM(EPOS_BFCT.ACTL_GIV_AMT) AS ACTL_GIV_AMT,

SUM(EPOS_BFCT.BASLN_GIV_AMT) AS BASLN_GIV_AMT

FROM OPT_EPOS_POST_EVENT_BASLN_FCT EPOS_BFCT, OPT_CAL_MASTR_MV01 D

WHERE EPOS_BFCT.WK_SKID = D.CAL_MASTR_SKID

GROUP BY EPOS_BFCT.BUS_UNIT_SKID, EPOS_BFCT.ACCT_SKID, EPOS_BFCT.PRMTN_SKID, EPOS_BFCT.PROD_SKID, D.MTH_SKID

)EPOS_BFCT,

OPT_BRAND_BASLN_FCT BRAND_BASLN_FCT

WHERE EPOS_BFCT.BUS_UNIT_SKID = BRAND_BASLN_FCT.BUS_UNIT_SKID(+)

AND EPOS_BFCT.PROD_SKID = BRAND_BASLN_FCT.PROD_SKID(+)

AND EPOS_BFCT.ACCT_SKID = BRAND_BASLN_FCT.PRMTN_ACCT_SKID(+)

AND EPOS_BFCT.MTH_SKID = BRAND_BASLN_FCT.DATE_SKID(+)

-- AND EPOS_BFCT.PRMTN_SKID = PRMTN_FLT.PRMTN_SKID

AND EPOS_BFCT.PRMTN_SKID IN (SELECT DISTINCT PFCT.BASE_PRMTN_SKID AS PRMTN_SKID

FROM OPT_PRMTN_FCT PFCT

/*WHERE PFCT.REGN_CODE = 'AP'*/ )

GROUP BY EPOS_BFCT.PRMTN_SKID

) EPOS_BASLN

WHERE PRMTN.PRMTN_SKID = BASLN.PRMTN_SKID(+)

AND PRMTN.ACCT_PRMTN_SKID = BASLN.ACCT_SKID(+)

AND PRMTN.PRMTN_SKID = ACTVY.PRMTN_SKID(+)

AND PRMTN.PRMTN_SKID = PRMTN_PROD.PRMTN_SKID(+)

AND PRMTN.PRMTN_SKID = EPOS_FCT.PRMTN_SKID(+)

AND PRMTN.PRMTN_SKID = EPOS_BASLN.PRMTN_SKID(+);

Explain plan for the SQL , Execution plan as below:

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

PLAN_TABLE_OUTPUT

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 392063744

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

| 0 | CREATE TABLE STATEMENT | | 1 | 313 | 257K (1)| 00:13:27 | | | | | |

| 1 | LOAD AS SELECT | ROBINSON | | | | | | | | | |

| 2 | NESTED LOOPS | | | | | | | | | | |

| 3 | NESTED LOOPS | | 1 | 313 | 257K (1)| 00:13:27 | | | | | |

| 4 | NESTED LOOPS OUTER | | 1 | 297 | 257K (1)| 00:13:27 | | | | | |

| 5 | NESTED LOOPS OUTER | | 1 | 258 | 257K (1)| 00:13:26 | | | | | |

| 6 | NESTED LOOPS OUTER | | 1 | 232 | 257K (1)| 00:13:25 | | | | | |

| 7 | NESTED LOOPS OUTER | | 1 | 219 | 256K (1)| 00:13:23 | | | | | |

| 8 | NESTED LOOPS SEMI | | 1 | 193 | 256K (1)| 00:13:22 | | | | | |

| 9 | NESTED LOOPS OUTER | | 168K| 26M| 86690 (1)| 00:04:32 | | | | | |

| 10 | PARTITION LIST ALL | | 168K| 18M| 1279 (7)| 00:00:05 | 1 | 16 | | | |

|* 11 | TABLE ACCESS FULL | OPT_PRMTN_FCT | 168K| 18M| 1279 (7)| 00:00:05 | 1 | 16 | | | |

| 12 | VIEW PUSHED PREDICATE | | 1 | 52 | | | | | | | |

|* 13 | FILTER | | | | | | | | | | |

| 14 | SORT AGGREGATE | | 1 | 206 | | | | | | | |

|* 15 | FILTER | | | | | | | | | | |

| 16 | NESTED LOOPS OUTER | | 1 | 206 | 605 (7)| 00:00:02 | | | | | |

| 17 | NESTED LOOPS | | 1 | 182 | 56 (4)| 00:00:01 | | | | | |

| 18 | VIEW | | 1 | 13 | 19 (6)| 00:00:01 | | | | | |

| 19 | SORT UNIQUE | | 1 | 6 | 18 (6)| 00:00:01 | | | | | |

|* 20 | FILTER | | | | | | | | | | |

| 21 | PARTITION LIST ALL | | 1 | 6 | 17 (0)| 00:00:01 | 1 | 16 | | | |

|* 22 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_FCT_BX2 | 1 | 6 | 17 (0)| 00:00:01 | 1 | 16 | | | |

|* 23 | VIEW | | 1 | 169 | 37 (3)| 00:00:01 | | | | | |

| 24 | SORT GROUP BY | | 1 | 63 | 36 (3)| 00:00:01 | | | | | |

|* 25 | FILTER | | | | | | | | | | |

| 26 | NESTED LOOPS | | | | | | | | | | |

| 27 | NESTED LOOPS | | 1 | 63 | 35 (0)| 00:00:01 | | | | | |

| 28 | PARTITION LIST ALL | | 1 | 53 | 34 (0)| 00:00:01 | 1 | 16 | | | |

| 29 | TABLE ACCESS BY LOCAL INDEX ROWID | OPT_BASLN_FCT | 1 | 53 | 34 (0)| 00:00:01 | 1 | 16 | | | |

| 30 | BITMAP CONVERSION TO ROWIDS | | | | | | | | | | |

| 31 | BITMAP AND | | | | | | | | | | |

|* 32 | BITMAP INDEX SINGLE VALUE | OPT_BASLN_FCT_NX4 | | | | | 1 | 16 | | | |

|* 33 | BITMAP INDEX SINGLE VALUE | OPT_BASLN_FCT_NX3 | | | | | 1 | 16 | | | |

|* 34 | INDEX UNIQUE SCAN | OPT_CAL_MASTR_MV01_PK | 1 | | 0 (0)| 00:00:01 | | | | | |

| 35 | TABLE ACCESS BY INDEX ROWID | OPT_CAL_MASTR_MV01 | 1 | 10 | 1 (0)| 00:00:01 | | | | | |

| 36 | PX COORDINATOR | | | | | | | | | | |

| 37 | PX SEND QC (RANDOM) | :TQ10000 | 1 | 24 | 549 (7)| 00:00:02 | | | Q1,00 | P->S | QC (RAND) |

| 38 | PX BLOCK ITERATOR | | 1 | 24 | 549 (7)| 00:00:02 | KEY | KEY | Q1,00 | PCWC | |

|* 39 | TABLE ACCESS FULL | OPT_BRAND_BASLN_FCT | 1 | 24 | 549 (7)| 00:00:02 | KEY | KEY | Q1,00 | PCWP | |

| 40 | VIEW PUSHED PREDICATE | | 1 | 26 | | | | | | | |

|* 41 | FILTER | | | | | | | | | | |

| 42 | PARTITION LIST ALL | | 1 | 6 | 17 (0)| 00:00:01 | 1 | 16 | | | |

| 43 | BITMAP CONVERSION TO ROWIDS | | 1 | 6 | 17 (0)| 00:00:01 | | | | | |

|* 44 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_FCT_BX2 | | | | | 1 | 16 | | | |

| 45 | VIEW PUSHED PREDICATE | | 1 | 26 | | | | | | | |

|* 46 | FILTER | | | | | | | | | | |

| 47 | SORT AGGREGATE | | 1 | 147 | | | | | | | |

| 48 | NESTED LOOPS SEMI | | 1 | 147 | 569 (8)| 00:00:02 | | | | | |

| 49 | NESTED LOOPS OUTER | | 1 | 141 | 560 (8)| 00:00:02 | | | | | |

| 50 | VIEW | | 1 | 117 | 3 (34)| 00:00:01 | | | | | |

| 51 | SORT GROUP BY | | 1 | 101 | 2 (50)| 00:00:01 | | | | | |

|* 52 | FILTER | | | | | | | | | | |

| 53 | NESTED LOOPS | | | | | | | | | | |

| 54 | NESTED LOOPS | | 1 | 101 | 1 (0)| 00:00:01 | | | | | |

| 55 | PARTITION LIST ALL | | 1 | 91 | 1 (0)| 00:00:01 | 1 | 16 | | | |

| 56 | TABLE ACCESS BY LOCAL INDEX ROWID | OPT_EPOS_POST_EVENT_BASLN_FCT | 1 | 91 | 1 (0)| 00:00:01 | 1 | 16 | | | |

| 57 | BITMAP CONVERSION TO ROWIDS | | | | | | | | | | |

|* 58 | BITMAP INDEX SINGLE VALUE | OPT_EPOS_PST_EVNT_BSLN_FCT_BX4 | | | | | 1 | 16 | | | |

|* 59 | INDEX UNIQUE SCAN | OPT_CAL_MASTR_MV01_PK | 1 | | 0 (0)| 00:00:01 | | | | | |

| 60 | TABLE ACCESS BY INDEX ROWID | OPT_CAL_MASTR_MV01 | 1 | 10 | 0 (0)| 00:00:01 | | | | | |

| 61 | PX COORDINATOR | | | | | | | | | | |

| 62 | PX SEND QC (RANDOM) | :TQ20000 | 1 | 24 | 557 (8)| 00:00:02 | | | Q2,00 | P->S | QC (RAND) |

| 63 | PX BLOCK ITERATOR | | 1 | 24 | 557 (8)| 00:00:02 | KEY | KEY | Q2,00 | PCWC | |

|* 64 | TABLE ACCESS FULL | OPT_BRAND_BASLN_FCT | 1 | 24 | 557 (8)| 00:00:02 | KEY | KEY | Q2,00 | PCWP | |

| 65 | PARTITION LIST ALL | | 1 | 6 | 569 (8)| 00:00:02 | 1 | 16 | | | |

| 66 | BITMAP CONVERSION TO ROWIDS | | 1 | 6 | 569 (8)| 00:00:02 | | | | | |

|* 67 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_FCT_BX2 | | | | | 1 | 16 | | | |

| 68 | VIEW PUSHED PREDICATE | | 1 | 13 | | | | | | | |

|* 69 | FILTER | | | | | | | | | | |

| 70 | SORT AGGREGATE | | 1 | 135 | | | | | | | |

|* 71 | PX COORDINATOR | | | | | | | | | | |

| 72 | PX SEND QC (RANDOM) | :TQ30002 | 1 | 135 | | | | | Q3,02 | P->S | QC (RAND) |

| 73 | SORT AGGREGATE | | 1 | 135 | | | | | Q3,02 | PCWP | |

|* 74 | FILTER | | | | | | | | Q3,02 | PCWC | |

| 75 | NESTED LOOPS SEMI | | 1 | 135 | 655 (1)| 00:00:03 | | | Q3,02 | PCWP | |

| 76 | NESTED LOOPS | | 1 | 109 | 636 (1)| 00:00:02 | | | Q3,02 | PCWP | |

| 77 | NESTED LOOPS | | 1 | 81 | 634 (1)| 00:00:02 | | | Q3,02 | PCWP | |

|* 78 | HASH JOIN | | 3 | 204 | 633 (1)| 00:00:02 | | | Q3,02 | PCWP | |

|* 79 | HASH JOIN | | 1 | 46 | 334 (1)| 00:00:02 | | | Q3,02 | PCWP | |

| 80 | BUFFER SORT | | | | | | | | Q3,02 | PCWC | |

| 81 | PX RECEIVE | | 1 | 28 | 3 (0)| 00:00:01 | | | Q3,02 | PCWP | |

| 82 | PX SEND BROADCAST | :TQ30000 | 1 | 28 | 3 (0)| 00:00:01 | | | | S->P | BROADCAST |

| 83 | TABLE ACCESS BY GLOBAL INDEX ROWID| OPT_PRMTN_FDIM | 1 | 28 | 3 (0)| 00:00:01 | ROWID | ROWID | | | |

|* 84 | INDEX RANGE SCAN | OPT_PRMTN_FDIM_PK | 1 | | 2 (0)| 00:00:01 | | | | | |

| 85 | PX PARTITION LIST ALL | | 912 | 16416 | 330 (1)| 00:00:02 | 1 | 16 | Q3,02 | PCWC | |

| 86 | TABLE ACCESS BY LOCAL INDEX ROWID | OPT_PRMTN_PROD_FCT | 912 | 16416 | 330 (1)| 00:00:02 | 1 | 16 | Q3,02 | PCWP | |

| 87 | BITMAP CONVERSION TO ROWIDS | | | | | | | | Q3,02 | PCWP | |

|* 88 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_PROD_FCT_BX4 | | | | | 1 | 16 | Q3,02 | PCWP | |

| 89 | BUFFER SORT | | | | | | | | Q3,02 | PCWC | |

| 90 | PX RECEIVE | | 3039 | 66858 | 298 (2)| 00:00:01 | | | Q3,02 | PCWP | |

| 91 | PX SEND BROADCAST | :TQ30001 | 3039 | 66858 | 298 (2)| 00:00:01 | | | | S->P | BROADCAST |

| 92 | PARTITION RANGE ALL | | 3039 | 66858 | 298 (2)| 00:00:01 | 1 | 21 | | | |

| 93 | PARTITION LIST ALL | | 3039 | 66858 | 298 (2)| 00:00:01 | 1 | 5 | | | |

| 94 | TABLE ACCESS FULL | OPT_EPOS_FCT | 3039 | 66858 | 298 (2)| 00:00:01 | 1 | 105 | | | |

|* 95 | TABLE ACCESS BY INDEX ROWID | OPT_CAL_MASTR_MV01 | 1 | 13 | 1 (0)| 00:00:01 | | | Q3,02 | PCWP | |

|* 96 | INDEX UNIQUE SCAN | OPT_CAL_MASTR_MV01_PK | 1 | | 0 (0)| 00:00:01 | | | Q3,02 | PCWP | |

|* 97 | TABLE ACCESS BY GLOBAL INDEX ROWID | OPT_ACCT_ASDN_TYPE2_DIM | 1 | 28 | 3 (0)| 00:00:01 | ROWID | ROWID | Q3,02 | PCWP | |

|* 98 | INDEX RANGE SCAN | OPT_ACCT_ASDN_TYPE2_DIM_PK | 1 | | 2 (0)| 00:00:01 | | | Q3,02 | PCWP | |

| 99 | VIEW PUSHED PREDICATE | | 1 | 26 | | | | | Q3,02 | PCWP | |

|*100 | FILTER | | | | | | | | Q3,02 | PCWP | |

| 101 | PARTITION LIST ALL | | 1 | 6 | 17 (0)| 00:00:01 | 1 | 16 | Q3,02 | PCWP | |

| 102 | BITMAP CONVERSION TO ROWIDS | | 1 | 6 | 17 (0)| 00:00:01 | | | Q3,02 | PCWP | |

|*103 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_FCT_BX2 | | | | | 1 | 16 | Q3,02 | PCWP | |

| 104 | VIEW PUSHED PREDICATE | | 1 | 26 | | | | | | | |

|*105 | FILTER | | | | | | | | | | |

| 106 | SORT AGGREGATE | | 1 | 58 | | | | | | | |

|*107 | FILTER | | | | | | | | | | |

| 108 | NESTED LOOPS | | | | | | | | | | |

| 109 | NESTED LOOPS | | 1 | 58 | 39 (6)| 00:00:01 | | | | | |

|*110 | HASH JOIN | | 1 | 39 | 38 (6)| 00:00:01 | | | | | |

| 111 | VIEW | | 1 | 13 | 19 (6)| 00:00:01 | | | | | |

| 112 | SORT UNIQUE | | 1 | 6 | 18 (6)| 00:00:01 | | | | | |

|*113 | FILTER | | | | | | | | | | |

| 114 | PARTITION LIST ALL | | 1 | 6 | 17 (0)| 00:00:01 | 1 | 16 | | | |

|*115 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_FCT_BX2 | 1 | 6 | 17 (0)| 00:00:01 | 1 | 16 | | | |

| 116 | PARTITION LIST ALL | | 3 | 78 | 18 (0)| 00:00:01 | 1 | 16 | | | |

| 117 | TABLE ACCESS BY LOCAL INDEX ROWID | OPT_ACTVY_FCT | 3 | 78 | 18 (0)| 00:00:01 | 1 | 16 | | | |

| 118 | BITMAP CONVERSION TO ROWIDS | | | | | | | | | | |

|*119 | BITMAP INDEX SINGLE VALUE | OPT_ACTVY_FCT_BX6 | | | | | 1 | 16 | | | |

|*120 | INDEX UNIQUE SCAN | OPT_ACTVY_FDIM_PK | 1 | | 0 (0)| 00:00:01 | | | | | |

| 121 | TABLE ACCESS BY GLOBAL INDEX ROWID | OPT_ACTVY_FDIM | 1 | 19 | 1 (0)| 00:00:01 | ROWID | ROWID | | | |

| 122 | VIEW PUSHED PREDICATE | | 1 | 39 | | | | | | | |

|*123 | FILTER | | | | | | | | | | |

| 124 | SORT AGGREGATE | | 1 | 30 | | | | | | | |

|*125 | PX COORDINATOR | | | | | | | | | | |

| 126 | PX SEND QC (RANDOM) | :TQ40001 | 1 | 30 | | | | | Q4,01 | P->S | QC (RAND) |

| 127 | SORT AGGREGATE | | 1 | 30 | | | | | Q4,01 | PCWP | |

|*128 | FILTER | | | | | | | | Q4,01 | PCWC | |

|*129 | HASH JOIN | | 1 | 30 | 350 (1)| 00:00:02 | | | Q4,01 | PCWP | |

| 130 | BUFFER SORT | | | | | | | | Q4,01 | PCWC | |

| 131 | PX RECEIVE | | 1 | 13 | 19 (6)| 00:00:01 | | | Q4,01 | PCWP | |

| 132 | PX SEND BROADCAST | :TQ40000 | 1 | 13 | 19 (6)| 00:00:01 | | | | S->P | BROADCAST |

| 133 | VIEW | | 1 | 13 | 19 (6)| 00:00:01 | | | | | |

| 134 | SORT UNIQUE | | 1 | 6 | 18 (6)| 00:00:01 | | | | | |

|*135 | FILTER | | | | | | | | | | |

| 136 | PARTITION LIST ALL | | 1 | 6 | 17 (0)| 00:00:01 | 1 | 16 | | | |

|*137 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_FCT_BX2 | 1 | 6 | 17 (0)| 00:00:01 | 1 | 16 | | | |

| 138 | PX PARTITION LIST ALL | | 912 | 15504 | 330 (1)| 00:00:02 | 1 | 16 | Q4,01 | PCWC | |

| 139 | TABLE ACCESS BY LOCAL INDEX ROWID | OPT_PRMTN_PROD_FCT | 912 | 15504 | 330 (1)| 00:00:02 | 1 | 16 | Q4,01 | PCWP | |

| 140 | BITMAP CONVERSION TO ROWIDS | | | | | | | | Q4,01 | PCWP | |

|*141 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_PROD_FCT_BX4 | | | | | 1 | 16 | Q4,01 | PCWP | |

|*142 | INDEX RANGE SCAN | OPT_PRMTN_DIM_PK | 1 | | 1 (0)| 00:00:01 | | | | | |

| 143 | TABLE ACCESS BY GLOBAL INDEX ROWID | OPT_PRMTN_DIM | 1 | 16 | 2 (0)| 00:00:01 | ROWID | ROWID | | | |

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

11 - filter("PFCT"."BASE_PRMTN_SKID"<>0)

13 - filter(COUNT(*)>0)

15 - filter("PFCT"."BASE_PRMTN_SKID"<>0)

20 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

22 - access("PFCT"."BASE_PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PFCT"."BASE_PRMTN_SKID"<>0)

23 - filter("BFCT"."PRMTN_SKID"="PRMTN_FLT"."PRMTN_SKID")

25 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

32 - access("BFCT"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("BFCT"."PRMTN_SKID"<>0)

33 - access("BFCT"."ACCT_SKID"="PFCT"."ACCT_PRMTN_SKID")

34 - access("BFCT"."WK_SKID"="D"."CAL_MASTR_SKID")

39 - filter("BRAND_BASLN_FCT"."PRMTN_ACCT_SKID"(+)="PFCT"."ACCT_PRMTN_SKID" AND "BFCT"."BUS_UNIT_SKID"="BRAND_BASLN_FCT"."BUS_UNIT_SKID"(+) AND

"BFCT"."PROD_SKID"="BRAND_BASLN_FCT"."PROD_SKID"(+) AND "BFCT"."ACCT_SKID"="BRAND_BASLN_FCT"."PRMTN_ACCT_SKID"(+) AND "BFCT"."MTH_SKID"="BRAND_BASLN_FCT"."DATE_SKID"(+))

41 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

44 - access("PFCT"."BASE_PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PFCT"."BASE_PRMTN_SKID"<>0)

46 - filter(COUNT(*)>0)

52 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

58 - access("EPOS_BFCT"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("EPOS_BFCT"."PRMTN_SKID"<>0)

59 - access("EPOS_BFCT"."WK_SKID"="D"."CAL_MASTR_SKID")

64 - filter("EPOS_BFCT"."BUS_UNIT_SKID"="BRAND_BASLN_FCT"."BUS_UNIT_SKID"(+) AND "EPOS_BFCT"."PROD_SKID"="BRAND_BASLN_FCT"."PROD_SKID"(+) AND

"EPOS_BFCT"."ACCT_SKID"="BRAND_BASLN_FCT"."PRMTN_ACCT_SKID"(+) AND "EPOS_BFCT"."MTH_SKID"="BRAND_BASLN_FCT"."DATE_SKID"(+))

67 - access("EPOS_BFCT"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PFCT"."BASE_PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

69 - filter(COUNT(SYS_OP_CSR(SYS_OP_MSR(COUNT(*),SUM("EPOS_FCT"."VOL_SU")),0))>0)

71 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

74 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

78 - access("EPOS_FCT"."PROD_SKID"="PRMTN_PROD_FCT"."PROD_SKID")

79 - access("PRMTN_PROD_FCT"."PRMTN_SKID"="PRMTN_FDIM"."PRMTN_SKID")

84 - access("PRMTN_FDIM"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PRMTN_FDIM"."PRMTN_SKID"<>0)

88 - access("PRMTN_PROD_FCT"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PRMTN_PROD_FCT"."PRMTN_SKID"<>0)

95 - filter("CAL_MASTR"."DAY_DATE">="PRMTN_FDIM"."PGM_START_DATE" AND "CAL_MASTR"."DAY_DATE"<="PRMTN_FDIM"."PGM_END_DATE")

96 - access("EPOS_FCT"."DATE_SKID"="CAL_MASTR"."CAL_MASTR_SKID")

97 - filter("CAL_MASTR"."DAY_DATE"<="HIER"."ASDN_EFF_END_DATE")

98 - access("EPOS_FCT"."ACCT_SKID"="HIER"."ACCT_SKID" AND "HIER"."ASSOC_ACCT_SKID"="PRMTN_FDIM"."ACCT_SKID" AND "CAL_MASTR"."DAY_DATE">="HIER"."ASDN_EFF_START_DATE")

100 - filter(0<>"PRMTN_PROD_FCT"."PRMTN_SKID")

103 - access("PFCT"."BASE_PRMTN_SKID"="PRMTN_PROD_FCT"."PRMTN_SKID")

filter("PFCT"."BASE_PRMTN_SKID"<>0)

105 - filter(COUNT(*)>0)

107 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

110 - access("OPT_ACTVY_FCT"."PRMTN_SKID"="PRMTN_FLT"."PRMTN_SKID")

113 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

115 - access("PFCT"."BASE_PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PFCT"."BASE_PRMTN_SKID"<>0)

119 - access("OPT_ACTVY_FCT"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("OPT_ACTVY_FCT"."PRMTN_SKID"<>0)

120 - access("OPT_ACTVY_FCT"."ACTVY_SKID"="OPT_ACTVY_FDIM"."ACTVY_SKID")

123 - filter(COUNT(SYS_OP_CSR(SYS_OP_MSR(COUNT(*),SUM("PRMTN_PROD_FCT"."INCRM_IN_GIV_AMT"*(100-"PRMTN_PROD_FCT"."TRADE_TERM_PCT")/100),SUM("PRMTN_PROD_FCT"."TOT_IN_GIV_AMT"*(

100-"PRMTN_PROD_FCT"."TRADE_TERM_PCT")/100),SUM("PRMTN_PROD_FCT"."ACTL_GIV_AMT"*(100-"PRMTN_PROD_FCT"."TRADE_TERM_PCT")/100)),0))>0)

125 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

128 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

129 - access("PRMTN_PROD_FCT"."PRMTN_SKID"="PRMTN_FLT"."PRMTN_SKID")

135 - filter(0<>"PFCT"."BASE_PRMTN_SKID")

137 - access("PFCT"."BASE_PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PFCT"."BASE_PRMTN_SKID"<>0)

141 - access("PRMTN_PROD_FCT"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PRMTN_PROD_FCT"."PRMTN_SKID"<>0)

142 - access("PDIM"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PDIM"."PRMTN_SKID"<>0)

217 rows selected.

Elapsed: 00:00:08.32

This is the wrong execution plan, if using this execution plan ,SQL will run a long time(16hours)

please notice that CBO use VIEW PUSHED PREDICATE ,this is controlled by hidden parameter _optimizer_extend_jppd_view_types

And it’s a new CBO feature in 11g.

SQL> alter session set "_optimizer_extend_jppd_view_types"=false;

Session altered.

Execution plan the SQL, execution plan as below:

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

PLAN_TABLE_OUTPUT

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 85794673

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

| 0 | CREATE TABLE STATEMENT | | 168K| 50M| | 274K (11)| 00:14:17 | | | | | |

| 1 | LOAD AS SELECT | ROBINSON | | | | | | | | | | |

| 2 | PX COORDINATOR | | | | | | | | | | | |

| 3 | PX SEND QC (RANDOM) | :TQ20023 | 168K| 50M| | 273K (11)| 00:14:16 | | | Q2,23 | P->S | QC (RAND) |

|* 4 | HASH JOIN | | 168K| 50M| | 273K (11)| 00:14:16 | | | Q2,23 | PCWP | |

| 5 | BUFFER SORT | | | | | | | | | Q2,23 | PCWC | |

| 6 | PX RECEIVE | | 173K| 2706K| | 4292 (2)| 00:00:14 | | | Q2,23 | PCWP | |

| 7 | PX SEND BROADCAST | :TQ20007 | 173K| 2706K| | 4292 (2)| 00:00:14 | | | | S->P | BROADCAST |

| 8 | PARTITION LIST ALL | | 173K| 2706K| | 4292 (2)| 00:00:14 | 1 | 16 | | | |

|* 9 | TABLE ACCESS FULL | OPT_PRMTN_DIM | 173K| 2706K| | 4292 (2)| 00:00:14 | 1 | 16 | | | |

|* 10 | HASH JOIN | | 168K| 47M| | 269K (11)| 00:14:02 | | | Q2,23 | PCWP | |

| 11 | BUFFER SORT | | | | | | | | | Q2,23 | PCWC | |

| 12 | PX RECEIVE | | 168K| 2145K| | 940 (6)| 00:00:03 | | | Q2,23 | PCWP | |

| 13 | PX SEND BROADCAST | :TQ20008 | 168K| 2145K| | 940 (6)| 00:00:03 | | | | S->P | BROADCAST |

| 14 | VIEW | | 168K| 2145K| | 940 (6)| 00:00:03 | | | | | |

| 15 | HASH UNIQUE | | 168K| 990K| 2000K| 891 (6)| 00:00:03 | | | | | |

| 16 | PARTITION LIST ALL | | 168K| 990K| | 570 (2)| 00:00:02 | 1 | 16 | | | |

| 17 | BITMAP CONVERSION TO ROWIDS | | 168K| 990K| | 570 (2)| 00:00:02 | | | | | |

|* 18 | BITMAP INDEX FAST FULL SCAN | OPT_PRMTN_FCT_BX2 | | | | | | 1 | 16 | | | |

|* 19 | HASH JOIN RIGHT OUTER | | 168K| 45M| | 268K (11)| 00:13:59 | | | Q2,23 | PCWP | |

| 20 | PX RECEIVE | | 718 | 56004 | | 22203 (8)| 00:01:10 | | | Q2,23 | PCWP | |

| 21 | PX SEND BROADCAST | :TQ20020 | 718 | 56004 | | 22203 (8)| 00:01:10 | | | Q2,20 | P->P | BROADCAST |

| 22 | VIEW | | 718 | 56004 | | 22203 (8)| 00:01:10 | | | Q2,20 | PCWP | |

| 23 | HASH GROUP BY | | 718 | 78262 | | 20827 (8)| 00:01:06 | | | Q2,20 | PCWP | |

| 24 | PX RECEIVE | | 718 | 78262 | | 20827 (8)| 00:01:06 | | | Q2,20 | PCWP | |

| 25 | PX SEND HASH | :TQ20017 | 718 | 78262 | | 20827 (8)| 00:01:06 | | | Q2,17 | P->P | HASH |

| 26 | HASH GROUP BY | | 718 | 78262 | | 20827 (8)| 00:01:06 | | | Q2,17 | PCWP | |

|* 27 | HASH JOIN OUTER | | 1226K| 127M| | 20646 (8)| 00:01:05 | | | Q2,17 | PCWP | |

| 28 | PX RECEIVE | | 1226K| 99M| | 11592 (6)| 00:00:37 | | | Q2,17 | PCWP | |

| 29 | PX SEND PARTITION (KEY) | :TQ20015 | 1226K| 99M| | 11592 (6)| 00:00:37 | | | Q2,15 | P->P | PART (KEY) |

|* 30 | HASH JOIN | | 1226K| 99M| | 11592 (6)| 00:00:37 | | | Q2,15 | PCWP | |

| 31 | BUFFER SORT | | | | | | | | | Q2,15 | PCWC | |

| 32 | PX RECEIVE | | 168K| 990K| | 940 (6)| 00:00:03 | | | Q2,15 | PCWP | |

| 33 | PX SEND BROADCAST | :TQ20004 | 168K| 990K| | 940 (6)| 00:00:03 | | | | S->P | BROADCAST |

| 34 | VIEW | | 168K| 990K| | 940 (6)| 00:00:03 | | | | | |

| 35 | HASH UNIQUE | | 168K| 990K| 2000K| 891 (6)| 00:00:03 | | | | | |

| 36 | PARTITION LIST ALL | | 168K| 990K| | 570 (2)| 00:00:02 | 1 | 16 | | | |

|* 37 | BITMAP INDEX FAST FULL SCAN | OPT_PRMTN_FCT_BX2 | 168K| 990K| | 570 (2)| 00:00:02 | 1 | 16 | | | |

| 38 | VIEW | | 1849K| 139M| | 10620 (6)| 00:00:34 | | | Q2,15 | PCWP | |

| 39 | HASH GROUP BY | | 1849K| 111M| 156M| 9400 (6)| 00:00:30 | | | Q2,15 | PCWP | |

| 40 | PX RECEIVE | | 1849K| 111M| | 1909 (11)| 00:00:06 | | | Q2,15 | PCWP | |

| 41 | PX SEND HASH | :TQ20013 | 1849K| 111M| | 1909 (11)| 00:00:06 | | | Q2,13 | P->P | HASH |

|* 42 | HASH JOIN | | 1849K| 111M| | 1909 (11)| 00:00:06 | | | Q2,13 | PCWP | |

| 43 | BUFFER SORT | | | | | | | | | Q2,13 | PCWC | |

| 44 | PX RECEIVE | | 37190 | 363K| | 39 (6)| 00:00:01 | | | Q2,13 | PCWP | |

| 45 | PX SEND BROADCAST | :TQ20002 | 37190 | 363K| | 39 (6)| 00:00:01 | | | | S->P | BROADCAST |

| 46 | TABLE ACCESS FULL | OPT_CAL_MASTR_MV01 | 37190 | 363K| | 39 (6)| 00:00:01 | | | | | |

| 47 | PX BLOCK ITERATOR | | 1849K| 93M| | 1840 (10)| 00:00:06 | 1 | 16 | Q2,13 | PCWC | |

|* 48 | TABLE ACCESS FULL | OPT_BASLN_FCT | 1849K| 93M| | 1840 (10)| 00:00:06 | 1 | 16 | Q2,13 | PCWP | |

| 49 | PX PARTITION LIST ALL | | 7927K| 181M| | 8906 (8)| 00:00:28 | 1 | 16 | Q2,17 | PCWC | |

| 50 | TABLE ACCESS FULL | OPT_BRAND_BASLN_FCT | 7927K| 181M| | 8906 (8)| 00:00:28 | 1 | 16 | Q2,17 | PCWP | |

|* 51 | HASH JOIN RIGHT OUTER | | 168K| 33M| | 246K (11)| 00:12:50 | | | Q2,23 | PCWP | |

| 52 | BUFFER SORT | | | | | | | | | Q2,23 | PCWC | |

| 53 | PX RECEIVE | | 1 | 39 | | 570 (8)| 00:00:02 | | | Q2,23 | PCWP | |

| 54 | PX SEND BROADCAST | :TQ20009 | 1 | 39 | | 570 (8)| 00:00:02 | | | | S->P | BROADCAST |

| 55 | VIEW | | 1 | 39 | | 570 (8)| 00:00:02 | | | | | |

| 56 | HASH GROUP BY | | 1 | 113 | | 570 (8)| 00:00:02 | | | | | |

| 57 | NESTED LOOPS SEMI | | 1 | 113 | | 570 (8)| 00:00:02 | | | | | |

| 58 | NESTED LOOPS OUTER | | 1 | 107 | | 561 (8)| 00:00:02 | | | | | |

| 59 | VIEW | | 1 | 83 | | 4 (25)| 00:00:01 | | | | | |

| 60 | HASH GROUP BY | | 1 | 101 | | 3 (34)| 00:00:01 | | | | | |

| 61 | NESTED LOOPS | | | | | | | | | | | |

| 62 | NESTED LOOPS | | 1 | 101 | | 2 (0)| 00:00:01 | | | | | |

| 63 | PARTITION LIST ALL | | 1 | 91 | | 2 (0)| 00:00:01 | 1 | 16 | | | |

|* 64 | TABLE ACCESS FULL | OPT_EPOS_POST_EVENT_BASLN_FCT | 1 | 91 | | 2 (0)| 00:00:01 | 1 | 16 | | | |

|* 65 | INDEX UNIQUE SCAN | OPT_CAL_MASTR_MV01_PK | 1 | | | 0 (0)| 00:00:01 | | | | | |

| 66 | TABLE ACCESS BY INDEX ROWID | OPT_CAL_MASTR_MV01 | 1 | 10 | | 0 (0)| 00:00:01 | | | | | |

| 67 | PX COORDINATOR | | | | | | | | | | | |

| 68 | PX SEND QC (RANDOM) | :TQ10000 | 1 | 24 | | 557 (8)| 00:00:02 | | | Q1,00 | P->S | QC (RAND) |

| 69 | PX BLOCK ITERATOR | | 1 | 24 | | 557 (8)| 00:00:02 | KEY | KEY | Q1,00 | PCWC | |

|* 70 | TABLE ACCESS FULL | OPT_BRAND_BASLN_FCT | 1 | 24 | | 557 (8)| 00:00:02 | KEY | KEY | Q1,00 | PCWP | |

| 71 | PARTITION LIST ALL | | 1 | 6 | | 570 (8)| 00:00:02 | 1 | 16 | | | |

| 72 | BITMAP CONVERSION TO ROWIDS | | 1 | 6 | | 570 (8)| 00:00:02 | | | | | |

|* 73 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_FCT_BX2 | | | | | | 1 | 16 | | | |

|* 74 | HASH JOIN RIGHT OUTER | | 168K| 26M| | 245K (11)| 00:12:48 | | | Q2,23 | PCWP | |

| 75 | PX RECEIVE | | 1 | 26 | | 110K (7)| 00:05:45 | | | Q2,23 | PCWP | |

| 76 | PX SEND BROADCAST | :TQ20021 | 1 | 26 | | 110K (7)| 00:05:45 | | | Q2,21 | P->P | BROADCAST |

| 77 | VIEW | | 1 | 26 | | 110K (7)| 00:05:45 | | | Q2,21 | PCWP | |

| 78 | HASH GROUP BY | | 1 | 19 | | 110K (7)| 00:05:45 | | | Q2,21 | PCWP | |

| 79 | PX RECEIVE | | 1 | 19 | | 110K (7)| 00:05:45 | | | Q2,21 | PCWP | |

| 80 | PX SEND HASH | :TQ20018 | 1 | 19 | | 110K (7)| 00:05:45 | | | Q2,18 | P->P | HASH |

| 81 | HASH GROUP BY | | 1 | 19 | | 110K (7)| 00:05:45 | | | Q2,18 | PCWP | |

| 82 | VIEW | VM_NWVW_1 | 614 | 11666 | | 110K (7)| 00:05:45 | | | Q2,18 | PCWP | |

| 83 | HASH UNIQUE | | 614 | 101K| | 110K (7)| 00:05:45 | | | Q2,18 | PCWP | |

| 84 | PX RECEIVE | | 614 | 101K| | 110K (7)| 00:05:45 | | | Q2,18 | PCWP | |

| 85 | PX SEND HASH | :TQ20016 | 614 | 101K| | 110K (7)| 00:05:45 | | | Q2,16 | P->P | HASH |

|* 86 | HASH JOIN | | 614 | 101K| | 110K (7)| 00:05:45 | | | Q2,16 | PCWP | |

|* 87 | HASH JOIN | | 614 | 97K| | 109K (7)| 00:05:43 | | | Q2,16 | PCWP | |

| 88 | PX RECEIVE | | 43328 | 5881K| | 9831 (3)| 00:00:31 | | | Q2,16 | PCWP | |

| 89 | PX SEND BROADCAST | :TQ20014 | 43328 | 5881K| | 9831 (3)| 00:00:31 | | | Q2,14 | P->P | BROADCAST |

|* 90 | HASH JOIN | | 43328 | 5881K| | 9831 (3)| 00:00:31 | | | Q2,14 | PCWP | |

| 91 | PX RECEIVE | | 6345 | 613K| | 5544 (3)| 00:00:18 | | | Q2,14 | PCWP | |

| 92 | PX SEND HASH | :TQ20012 | 6345 | 613K| | 5544 (3)| 00:00:18 | | | Q2,12 | P->P | HASH |

|* 93 | HASH JOIN | | 6345 | 613K| | 5544 (3)| 00:00:18 | | | Q2,12 | PCWP | |

|* 94 | HASH JOIN | | 21392 | 1545K| | 5502 (3)| 00:00:18 | | | Q2,12 | PCWP | |

| 95 | BUFFER SORT | | | | | | | | | Q2,12 | PCWC | |

| 96 | PX RECEIVE | | 3039 | 100K| | 298 (2)| 00:00:01 | | | Q2,12 | PCWP | |

| 97 | PX SEND BROADCAST | :TQ20000 | 3039 | 100K| | 298 (2)| 00:00:01 | | | | S->P | BROADCAST |

| 98 | PARTITION RANGE ALL | | 3039 | 100K| | 298 (2)| 00:00:01 | 1 | 21 | | | |

| 99 | PARTITION LIST ALL | | 3039 | 100K| | 298 (2)| 00:00:01 | 1 | 5 | | | |

| 100 | TABLE ACCESS FULL | OPT_EPOS_FCT | 3039 | 100K| | 298 (2)| 00:00:01 | 1 | 105 | | | |

| 101 | PX BLOCK ITERATOR | | 2043K| 77M| | 5173 (2)| 00:00:17 | 1 | 16 | Q2,12 | PCWC | |

| 102 | TABLE ACCESS FULL | OPT_ACCT_ASDN_TYPE2_DIM | 2043K| 77M| | 5173 (2)| 00:00:17 | 1 | 16 | Q2,12 | PCWP | |

| 103 | BUFFER SORT | | | | | | | | | Q2,12 | PCWC | |

| 104 | PX RECEIVE | | 37190 | 907K| | 40 (8)| 00:00:01 | | | Q2,12 | PCWP | |

| 105 | PX SEND BROADCAST | :TQ20001 | 37190 | 907K| | 40 (8)| 00:00:01 | | | | S->P | BROADCAST |

| 106 | TABLE ACCESS FULL | OPT_CAL_MASTR_MV01 | 37190 | 907K| | 40 (8)| 00:00:01 | | | | | |

| 107 | BUFFER SORT | | | | | | | | | Q2,14 | PCWC | |

| 108 | PX RECEIVE | | 173K| 6783K| | 4283 (2)| 00:00:14 | | | Q2,14 | PCWP | |

| 109 | PX SEND HASH | :TQ20003 | 173K| 6783K| | 4283 (2)| 00:00:14 | | | | S->P | HASH |

| 110 | PARTITION LIST ALL | | 173K| 6783K| | 4283 (2)| 00:00:14 | 1 | 16 | | | |

|*111 | TABLE ACCESS FULL | OPT_PRMTN_FDIM | 173K| 6783K| | 4283 (2)| 00:00:14 | 1 | 16 | | | |

| 112 | PX BLOCK ITERATOR | | 55M| 1258M| | 98856 (6)| 00:05:10 | 1 | 16 | Q2,16 | PCWC | |

|*113 | TABLE ACCESS FULL | OPT_PRMTN_PROD_FCT | 55M| 1258M| | 98856 (6)| 00:05:10 | 1 | 16 | Q2,16 | PCWP | |

| 114 | BUFFER SORT | | | | | | | | | Q2,16 | PCWC | |

| 115 | PX RECEIVE | | 168K| 990K| | 570 (2)| 00:00:02 | | | Q2,16 | PCWP | |

| 116 | PX SEND BROADCAST | :TQ20005 | 168K| 990K| | 570 (2)| 00:00:02 | | | | S->P | BROADCAST |

| 117 | PARTITION LIST ALL | | 168K| 990K| | 570 (2)| 00:00:02 | 1 | 16 | | | |

| 118 | BITMAP CONVERSION TO ROWIDS | | 168K| 990K| | 570 (2)| 00:00:02 | | | | | |

|*119 | BITMAP INDEX FAST FULL SCAN| OPT_PRMTN_FCT_BX2 | | | | | | 1 | 16 | | | |

|*120 | HASH JOIN RIGHT OUTER | | 168K| 22M| | 135K (15)| 00:07:04 | | | Q2,23 | PCWP | |

| 121 | BUFFER SORT | | | | | | | | | Q2,23 | PCWC | |

| 122 | PX RECEIVE | | 1 | 39 | | 6665 (6)| 00:00:21 | | | Q2,23 | PCWP | |

| 123 | PX SEND BROADCAST | :TQ20010 | 1 | 39 | | 6665 (6)| 00:00:21 | | | | S->P | BROADCAST |

| 124 | VIEW | | 1 | 39 | | 6665 (6)| 00:00:21 | | | | | |

| 125 | HASH GROUP BY | | 1 | 51 | | 6351 (7)| 00:00:20 | | | | | |

|*126 | HASH JOIN | | 291K| 14M| 8832K| 6278 (6)| 00:00:20 | | | | | |

| 127 | PARTITION LIST ALL | | 291K| 5405K| | 3641 (5)| 00:00:12 | 1 | 16 | | | |

| 128 | TABLE ACCESS FULL | OPT_ACTVY_FDIM | 291K| 5405K| | 3641 (5)| 00:00:12 | 1 | 16 | | | |

|*129 | HASH JOIN | | 291K| 9101K| 2976K| 2292 (6)| 00:00:08 | | | | | |

| 130 | VIEW | | 168K| 990K| | 940 (6)| 00:00:03 | | | | | |

| 131 | HASH UNIQUE | | 168K| 990K| 2000K| 891 (6)| 00:00:03 | | | | | |

| 132 | PARTITION LIST ALL | | 168K| 990K| | 570 (2)| 00:00:02 | 1 | 16 | | | |

|*133 | BITMAP INDEX FAST FULL SCAN | OPT_PRMTN_FCT_BX2 | 168K| 990K| | 570 (2)| 00:00:02 | 1 | 16 | | | |

| 134 | PARTITION LIST ALL | | 291K| 7395K| | 1124 (6)| 00:00:04 | 1 | 16 | | | |

|*135 | TABLE ACCESS FULL | OPT_ACTVY_FCT | 291K| 7395K| | 1124 (6)| 00:00:04 | 1 | 16 | | | |

|*136 | HASH JOIN RIGHT OUTER | | 168K| 16M| | 128K (16)| 00:06:43 | | | Q2,23 | PCWP | |

| 137 | PX RECEIVE | | 1 | 52 | | 127K (16)| 00:06:39 | | | Q2,23 | PCWP | |

| 138 | PX SEND HASH | :TQ20022 | 1 | 52 | | 127K (16)| 00:06:39 | | | Q2,22 | P->P | HASH |

| 139 | VIEW | | 1 | 52 | | 127K (16)| 00:06:39 | | | Q2,22 | PCWP | |

| 140 | HASH GROUP BY | | 1 | 23 | | 113K (18)| 00:05:54 | | | Q2,22 | PCWP | |

| 141 | PX RECEIVE | | 1 | 23 | | 113K (18)| 00:05:54 | | | Q2,22 | PCWP | |

| 142 | PX SEND HASH | :TQ20019 | 1 | 23 | | 113K (18)| 00:05:54 | | | Q2,19 | P->P | HASH |

| 143 | HASH GROUP BY | | 1 | 23 | | 113K (18)| 00:05:54 | | | Q2,19 | PCWP | |

|*144 | HASH JOIN | | 55M| 1206M| | 103K (9)| 00:05:23 | | | Q2,19 | PCWP | |

| 145 | BUFFER SORT | | | | | | | | | Q2,19 | PCWC | |

| 146 | PX RECEIVE | | 168K| 990K| | 940 (6)| 00:00:03 | | | Q2,19 | PCWP | |

| 147 | PX SEND BROADCAST | :TQ20006 | 168K| 990K| | 940 (6)| 00:00:03 | | | | S->P | BROADCAST |

| 148 | VIEW | | 168K| 990K| | 940 (6)| 00:00:03 | | | | | |

| 149 | HASH UNIQUE | | 168K| 990K| 2000K| 891 (6)| 00:00:03 | | | | | |

| 150 | PARTITION LIST ALL | | 168K| 990K| | 570 (2)| 00:00:02 | 1 | 16 | | | |

|*151 | BITMAP INDEX FAST FULL SCAN | OPT_PRMTN_FCT_BX2 | 168K| 990K| | 570 (2)| 00:00:02 | 1 | 16 | | | |

| 152 | PX BLOCK ITERATOR | | 55M| 891M| | 101K (9)| 00:05:17 | 1 | 16 | Q2,19 | PCWC | |

|*153 | TABLE ACCESS FULL | OPT_PRMTN_PROD_FCT | 55M| 891M| | 101K (9)| 00:05:17 | 1 | 16 | Q2,19 | PCWP | |

| 154 | BUFFER SORT | | | | | | | | | Q2,23 | PCWC | |

| 155 | PX RECEIVE | | 168K| 8085K| | 1279 (7)| 00:00:05 | | | Q2,23 | PCWP | |

| 156 | PX SEND HASH | :TQ20011 | 168K| 8085K| | 1279 (7)| 00:00:05 | | | | S->P | HASH |

| 157 | PARTITION LIST ALL | | 168K| 8085K| | 1279 (7)| 00:00:05 | 1 | 16 | | | |

|*158 | TABLE ACCESS FULL | OPT_PRMTN_FCT | 168K| 8085K| | 1279 (7)| 00:00:05 | 1 | 16 | | | |

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

4 - access("PDIM"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

9 - filter("PDIM"."PRMTN_SKID"<>0)

10 - access("PFCT"."BASE_PRMTN_SKID"="PRMTN_FLT"."PRMTN_SKID")

18 - filter("PFCT"."BASE_PRMTN_SKID"<>0)

19 - access("PFCT"."BASE_PRMTN_SKID"="BASLN"."PRMTN_SKID"(+) AND "PFCT"."ACCT_PRMTN_SKID"="BASLN"."ACCT_SKID"(+))

27 - access("BFCT"."BUS_UNIT_SKID"="BRAND_BASLN_FCT"."BUS_UNIT_SKID"(+) AND "BFCT"."PROD_SKID"="BRAND_BASLN_FCT"."PROD_SKID"(+) AND

"BFCT"."ACCT_SKID"="BRAND_BASLN_FCT"."PRMTN_ACCT_SKID"(+) AND "BFCT"."MTH_SKID"="BRAND_BASLN_FCT"."DATE_SKID"(+))

30 - access("BFCT"."PRMTN_SKID"="PRMTN_FLT"."PRMTN_SKID")

37 - filter("PFCT"."BASE_PRMTN_SKID"<>0)

42 - access("BFCT"."WK_SKID"="D"."CAL_MASTR_SKID")

48 - filter("BFCT"."PRMTN_SKID"<>0)

51 - access("PFCT"."BASE_PRMTN_SKID"="EPOS_BASLN"."PRMTN_SKID"(+))

64 - filter("EPOS_BFCT"."PRMTN_SKID"<>0)

65 - access("EPOS_BFCT"."WK_SKID"="D"."CAL_MASTR_SKID")

70 - filter("EPOS_BFCT"."BUS_UNIT_SKID"="BRAND_BASLN_FCT"."BUS_UNIT_SKID"(+) AND "EPOS_BFCT"."PROD_SKID"="BRAND_BASLN_FCT"."PROD_SKID"(+) AND

"EPOS_BFCT"."ACCT_SKID"="BRAND_BASLN_FCT"."PRMTN_ACCT_SKID"(+) AND "EPOS_BFCT"."MTH_SKID"="BRAND_BASLN_FCT"."DATE_SKID"(+))

73 - access("EPOS_BFCT"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

filter("PFCT"."BASE_PRMTN_SKID"<>0)

74 - access("PFCT"."BASE_PRMTN_SKID"="EPOS_FCT"."PRMTN_SKID"(+))

86 - access("PRMTN_PROD_FCT"."PRMTN_SKID"="PFCT"."BASE_PRMTN_SKID")

87 - access("EPOS_FCT"."PROD_SKID"="PRMTN_PROD_FCT"."PROD_SKID" AND "PRMTN_PROD_FCT"."PRMTN_SKID"="PRMTN_FDIM"."PRMTN_SKID")

90 - access("HIER"."ASSOC_ACCT_SKID"="PRMTN_FDIM"."ACCT_SKID")

filter("CAL_MASTR"."DAY_DATE">="PRMTN_FDIM"."PGM_START_DATE" AND "CAL_MASTR"."DAY_DATE"<="PRMTN_FDIM"."PGM_END_DATE")

93 - access("EPOS_FCT"."DATE_SKID"="CAL_MASTR"."CAL_MASTR_SKID")

filter("CAL_MASTR"."DAY_DATE">="HIER"."ASDN_EFF_START_DATE" AND "CAL_MASTR"."DAY_DATE"<="HIER"."ASDN_EFF_END_DATE")

94 - access("EPOS_FCT"."ACCT_SKID"="HIER"."ACCT_SKID")

111 - filter("PRMTN_FDIM"."PRMTN_SKID"<>0)

113 - filter("PRMTN_PROD_FCT"."PRMTN_SKID"<>0 AND SYS_OP_BLOOM_FILTER(:BF0000,"PRMTN_PROD_FCT"."PROD_SKID","PRMTN_PROD_FCT"."PRMTN_SKID"))

119 - filter("PFCT"."BASE_PRMTN_SKID"<>0)

120 - access("PFCT"."BASE_PRMTN_SKID"="ACTVY"."PRMTN_SKID"(+))

126 - access("OPT_ACTVY_FCT"."ACTVY_SKID"="OPT_ACTVY_FDIM"."ACTVY_SKID")

129 - access("OPT_ACTVY_FCT"."PRMTN_SKID"="PRMTN_FLT"."PRMTN_SKID")

133 - filter("PFCT"."BASE_PRMTN_SKID"<>0)

135 - filter("OPT_ACTVY_FCT"."PRMTN_SKID"<>0)

136 - access("PFCT"."BASE_PRMTN_SKID"="PRMTN_PROD"."PRMTN_SKID"(+))

144 - access("PRMTN_PROD_FCT"."PRMTN_SKID"="PRMTN_FLT"."PRMTN_SKID")

151 - filter("PFCT"."BASE_PRMTN_SKID"<>0)

153 - filter("PRMTN_PROD_FCT"."PRMTN_SKID"<>0)

158 - filter("PFCT"."BASE_PRMTN_SKID"<>0)

208 rows selected.

Elapsed: 00:00:07.27

This is the right execution plan , SQL can be finished within 5minutes. I’ve met this issue many times, last week , during Optima APAC cut over,I also met this issue, so it’s necessary to point it out.

Here is another example for this bug:

SQL> alter session set "_optimizer_extend_jppd_view_types"=false;

Session altered.

SQL> explain plan for MERGE INTO (SELECT *

2 FROM opt_prmtn_fct

3 WHERE base_prmtn_skid <> 0

4 ) trgt

5 USING ( SELECT pd.prmtn_skid AS prmtn_skid

6 , SUM (pd.actl_tot_qty_amt) AS actl_tot_su_amt

7 , SUM ( (CASE

8 WHEN ( (NVL (p.su_factr, 0) * NVL (pd.actl_tot_qty_amt, 0)

9 - NVL (pd.estmt_basln_case_amt, 0)) < 0)

10 THEN

11 0

12 ELSE

13 ( (NVL (p.su_factr, 0) * NVL (pd.actl_tot_qty_amt, 0))

14 - NVL (pd.estmt_basln_case_amt, 0))

15 END

16 + CASE

17 WHEN (NVL (pd.post_prmtn_vol_adjmt_su_amt, 0) = 0)

18 THEN

19 0

20 ELSE

21 (NVL (pd.post_prmtn_vol_adjmt_su_amt, 0)

22 - NVL (pd.estmt_basln_case_amt, 0))

23 END)

24 * pd.giv_conv_factr_amt)

25 AS actl_incrm_niv_amt

26 FROM opt_prmtn_prod_fct pd

27 , opt_prod_dim p

28 WHERE pd.prod_skid = p.prod_skid

29 AND pd.prmtn_skid <> 0

30 GROUP BY pd.prmtn_skid) srce

31 ON (srce.prmtn_skid = trgt.base_prmtn_skid)

32 WHEN MATCHED

33 THEN

34 UPDATE SET trgt.actl_tot_su_amt = srce.actl_tot_su_amt

35 , trgt.actl_incrm_niv_amt = srce.actl_incrm_niv_amt;

Explained.

Elapsed: 00:00:01.65

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

PLAN_TABLE_OUTPUT

-------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 4142491988

------------------------------------------------------------------------------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | TQ |IN-OUT| PQ Distrib |

------------------------------------------------------------------------------------------------------------------------------------------------------

| 0 | MERGE STATEMENT | | 1 | 38 | 113K (16)| 00:05:56 | | | | | |

| 1 | MERGE | OPT_PRMTN_FCT | | | | | | | | | |

| 2 | PX COORDINATOR | | | | | | | | | | |

| 3 | PX SEND QC (RANDOM) | :TQ10004 | 1 | 244 | 113K (16)| 00:05:56 | | | Q1,04 | P->S | QC (RAND) |

| 4 | VIEW | | | | | | | | Q1,04 | PCWP | |

|* 5 | HASH JOIN | | 1 | 244 | 113K (16)| 00:05:56 | | | Q1,04 | PCWP | |

| 6 | PX RECEIVE | | 1 | 39 | 112K (16)| 00:05:52 | | | Q1,04 | PCWP | |

| 7 | PX SEND HASH | :TQ10003 | 1 | 39 | 112K (16)| 00:05:52 | | | Q1,03 | P->P | HASH |

| 8 | VIEW | | 1 | 39 | 112K (16)| 00:05:52 | | | Q1,03 | PCWP | |

| 9 | SORT GROUP BY | | 1 | 33 | 112K (16)| 00:05:52 | | | Q1,03 | PCWP | |

| 10 | PX RECEIVE | | 1 | 33 | 112K (16)| 00:05:52 | | | Q1,03 | PCWP | |

| 11 | PX SEND HASH | :TQ10002 | 1 | 33 | 112K (16)| 00:05:52 | | | Q1,02 | P->P | HASH |

| 12 | SORT GROUP BY | | 1 | 33 | 112K (16)| 00:05:52 | | | Q1,02 | PCWP | |

|* 13 | HASH JOIN | | 55M| 1744M| 102K (8)| 00:05:20 | | | Q1,02 | PCWP | |

| 14 | BUFFER SORT | | | | | | | | Q1,02 | PCWC | |

| 15 | PX RECEIVE | | 182K| 1780K| 2159 (4)| 00:00:07 | | | Q1,02 | PCWP | |

| 16 | PX SEND BROADCAST | :TQ10000 | 182K| 1780K| 2159 (4)| 00:00:07 | | | | S->P | BROADCAST |

| 17 | PARTITION LIST ALL| | 182K| 1780K| 2159 (4)| 00:00:07 | 1 | 16 | | | |

| 18 | TABLE ACCESS FULL| OPT_PROD_DIM | 182K| 1780K| 2159 (4)| 00:00:07 | 1 | 16 | | | |

| 19 | PX BLOCK ITERATOR | | 54M| 1206M| 99315 (7)| 00:05:11 | 1 | 16 | Q1,02 | PCWC | |

|* 20 | TABLE ACCESS FULL | OPT_PRMTN_PROD_FCT | 54M| 1206M| 99315 (7)| 00:05:11 | 1 | 16 | Q1,02 | PCWP | |

| 21 | BUFFER SORT | | | | | | | | Q1,04 | PCWC | |

| 22 | PX RECEIVE | | 172K| 33M| 1286 (8)| 00:00:05 | | | Q1,04 | PCWP | |

| 23 | PX SEND HASH | :TQ10001 | 172K| 33M| 1286 (8)| 00:00:05 | | | | S->P | HASH |

| 24 | PARTITION LIST ALL | | 172K| 33M| 1286 (8)| 00:00:05 | 1 | 16 | | | |

|* 25 | TABLE ACCESS FULL | OPT_PRMTN_FCT | 172K| 33M| 1286 (8)| 00:00:05 | 1 | 16 | | | |

------------------------------------------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

5 - access("SRCE"."PRMTN_SKID"="OPT_PRMTN_FCT"."BASE_PRMTN_SKID")

13 - access("PD"."PROD_SKID"="P"."PROD_SKID")

20 - filter("PD"."PRMTN_SKID"<>0)

25 - filter("BASE_PRMTN_SKID"<>0)

40 rows selected.

SQL> alter session set "_optimizer_extend_jppd_view_types"=true;

Session altered.

Elapsed: 00:00:01.18

SQL> explain plan for MERGE INTO (SELECT *

2 FROM opt_prmtn_fct

3 WHERE base_prmtn_skid <> 0

4 ) trgt

5 USING ( SELECT pd.prmtn_skid AS prmtn_skid

6 , SUM (pd.actl_tot_qty_amt) AS actl_tot_su_amt

7 , SUM ( (CASE

8 WHEN ( (NVL (p.su_factr, 0) * NVL (pd.actl_tot_qty_amt, 0)

9 - NVL (pd.estmt_basln_case_amt, 0)) < 0)

10 THEN

11 0

12 ELSE

13 ( (NVL (p.su_factr, 0) * NVL (pd.actl_tot_qty_amt, 0))

14 - NVL (pd.estmt_basln_case_amt, 0))

15 END

16 + CASE

17 WHEN (NVL (pd.post_prmtn_vol_adjmt_su_amt, 0) = 0)

18 THEN

19 0

20 ELSE

21 (NVL (pd.post_prmtn_vol_adjmt_su_amt, 0)

22 - NVL (pd.estmt_basln_case_amt, 0))

23 END)

24 * pd.giv_conv_factr_amt)

25 AS actl_incrm_niv_amt

26 FROM opt_prmtn_prod_fct pd

27 , opt_prod_dim p

28 WHERE pd.prod_skid = p.prod_skid

29 AND pd.prmtn_skid <> 0

30 GROUP BY pd.prmtn_skid) srce

31 ON (srce.prmtn_skid = trgt.base_prmtn_skid)

32 WHEN MATCHED

33 THEN

34 UPDATE SET trgt.actl_tot_su_amt = srce.actl_tot_su_amt

35 , trgt.actl_incrm_niv_amt = srce.actl_incrm_niv_amt;

Explained.

Elapsed: 00:00:01.32

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

PLAN_TABLE_OUTPUT

-----------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 1086075059

-----------------------------------------------------------------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |

-----------------------------------------------------------------------------------------------------------------------------------------

| 0 | MERGE STATEMENT | | 1 | 38 | 89110 (1)| 00:04:39 | | |

| 1 | MERGE | OPT_PRMTN_FCT | | | | | | |

| 2 | VIEW | | | | | | | |

| 3 | NESTED LOOPS | | 1 | 231 | 89110 (1)| 00:04:39 | | |

| 4 | PARTITION LIST ALL | | 172K| 33M| 1286 (8)| 00:00:05 | 1 | 16 |

|* 5 | TABLE ACCESS FULL | OPT_PRMTN_FCT | 172K| 33M| 1286 (8)| 00:00:05 | 1 | 16 |

| 6 | VIEW PUSHED PREDICATE | | 1 | 26 | | | | |

|* 7 | FILTER | | | | | | | |

| 8 | SORT AGGREGATE | | 1 | 33 | | | | |

|* 9 | PX COORDINATOR | | | | | | | |

| 10 | PX SEND QC (RANDOM) | :TQ10000 | 1 | 33 | | | | |

| 11 | SORT AGGREGATE | | 1 | 33 | | | | |

|* 12 | FILTER | | | | | | | |

| 13 | NESTED LOOPS | | | | | | | |

| 14 | NESTED LOOPS | | 929 | 30657 | 1361 (1)| 00:00:05 | | |

| 15 | PX PARTITION LIST ALL | | 922 | 21206 | 333 (1)| 00:00:02 | 1 | 16 |

| 16 | TABLE ACCESS BY LOCAL INDEX ROWID| OPT_PRMTN_PROD_FCT | 922 | 21206 | 333 (1)| 00:00:02 | 1 | 16 |

| 17 | BITMAP CONVERSION TO ROWIDS | | | | | | | |

|* 18 | BITMAP INDEX SINGLE VALUE | OPT_PRMTN_PROD_FCT_BX4 | | | | | 1 | 16 |

|* 19 | INDEX RANGE SCAN | OPT_PROD_DIM_PKN | 1 | | 1 (0)| 00:00:01 | | |

| 20 | TABLE ACCESS BY GLOBAL INDEX ROWID | OPT_PROD_DIM | 1 | 10 | 2 (0)| 00:00:01 | ROWID | ROWID |

-----------------------------------------------------------------------------------------------------------------------------------------

Hidden parameter “_optimizer_extend_jppd_view_types” in 11g R1 and R2 is set to true, and there is no such parameter below 11g.

This hidden parameter is used to join pred pushdown on group-by ,distinct,semi-anti-joined view

Ok, let’s review our SQL

MERGE INTO (SELECT *

FROM opt_prmtn_fct

WHERE base_prmtn_skid <> 0

) trgt

USING ( SELECT pd.prmtn_skid AS prmtn_skid

, SUM (pd.actl_tot_qty_amt) AS actl_tot_su_amt

, SUM ( (CASE

WHEN ( (NVL (p.su_factr, 0) * NVL (pd.actl_tot_qty_amt, 0)

- NVL (pd.estmt_basln_case_amt, 0)) < 0)

THEN

0

ELSE

( (NVL (p.su_factr, 0) * NVL (pd.actl_tot_qty_amt, 0))

- NVL (pd.estmt_basln_case_amt, 0))

END

+ CASE

WHEN (NVL (pd.post_prmtn_vol_adjmt_su_amt, 0) = 0)

THEN

0

ELSE

(NVL (pd.post_prmtn_vol_adjmt_su_amt, 0)

- NVL (pd.estmt_basln_case_amt, 0))

END)

* pd.giv_conv_factr_amt)

AS actl_incrm_niv_amt

FROM opt_prmtn_prod_fct pd

, opt_prod_dim p

WHERE pd.prod_skid = p.prod_skid

AND pd.prmtn_skid <> 0

GROUP BY pd.prmtn_skid) srce ----there have group by and have a view srce

ON (srce.prmtn_skid = trgt.base_prmtn_skid)

WHEN MATCHED

THEN

UPDATE SET trgt.actl_tot_su_amt = srce.actl_tot_su_amt

, trgt.actl_incrm_niv_amt = srce.actl_incrm_niv_amt;

So set hidden parameter “_optimizer_extend_jppd_view_types” to true, CBO will pushdown GROUP BY

| 6 | VIEW PUSHED PREDICATE | | 1 | 26 | | | | |

VIEW PUSHED PREDICATE means CBO choose PUSHDOWN GROUP BY VIEW

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值