报表库在上线完后的第二天,两个节点CPU持续95%,经查看又是latch:cache buffers chain.
看看ASH信息:
INST_ID PROGRAM SQL_ID EVENT COUNT(*) PERCENT
2 JDBC Thin Client cukkhnzrh2y28 latch: cache buffers chains 66959 19%
2 JDBC Thin Client gg7hj1tgv56ur latch: cache buffers chains 47383 13%
1 JDBC Thin Client 7nuzsbsjzzv81 latch: cache buffers chains 34413 10%
1 JDBC Thin Client f557q4b4y9vr7 latch: cache buffers chains 37986 10%
1 JDBC Thin Client djk4dr940v1y4 latch: cache buffers chains 33866 9%
2 JDBC Thin Client 6pc72a9dg2gp6 latch: cache buffers chains 31801 9%
1 JDBC Thin Client 8zdz3kr2pts6c latch: cache buffers chains 27348 8%
2 JDBC Thin Client 7zfqtg5zju251 latch: cache buffers chains 23753 7%
2 JDBC Thin Client 43urhu1n8rf3p latch: cache buffers chains 12605 3%
2 JDBC Thin Client afmyfqmqx1bxx latch: cache buffers chains 9900 3%
2 JDBC Thin Client 5aq4fsqnb85mq latch: cache buffers chains 11478 3%
2 JDBC Thin Client 44a7wsxkpzh5p latch: cache buffers chains 5637 2%
1 JDBC Thin Client 8swu3mguwaahv latch: cache buffers chains 2238 1%
2 JDBC Thin Client fx985p8s4tk7v latch: cache buffers chains 4806 1%
2 JDBC Thin Client 4s8wdxq63jwz0 latch: cache buffers chains 1836 1%
2 JDBC Thin Client 92bkxcjc36k11 latch: cache buffers chains 2577 1%
查看第一个SQL:cukkhnzrh2y28
SELECT :"SYS_B_00" type,
:"SYS_B_01" pay_qty,
:"SYS_B_02" price,
SUM(T1.SHOULD_MONEY_C) / :"SYS_B_03" pay_fee,
:"SYS_B_04" drt_qty,
-SUM(T1.DERATE_MONEY_C) / :"SYS_B_05" drt_fee,
:"SYS_B_06" total_get_qty,
SUM(T1.FACT_MONEY_C) / :"SYS_B_07" get_fee
FROM (
SELECT T.CUSTOMER_ORDER_ID,
MAX(DECODE(BUSI_FEE_ID,:"SYS_B_08",FACT_MONEY2)) FACT_MONEY_C,
MAX(DECODE(BUSI_FEE_ID,:"SYS_B_09",SHOULD_MONEY2)) SHOULD_MONEY_C,
MAX(DECODE(BUSI_FEE_ID,:"SYS_B_10",DERATE_MONEY2)) DERATE_MONEY_C
FROM (
SELECT A.*,
B.BUSI_FEE_ID,
B.FACT_MONEY FACT_MONEY2,
B.SHOULD_MONEY SHOULD_MONEY2,
B.DERATE_MONEY DERATE_MONEY2
FROM RP_PBOSS_DETAIL_577 A,
RP_FEE_DETAIL_577 B,
(SELECT CUSTOMER_ORDER_ID,MAX(AA.RECEIVE_TYPE) RECEIVE_TYPE FROM RP_PBOSS_DETAIL_577 AA GROUP BY CUSTOMER_ORDER_ID) C
WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
AND A.DONE_DATE = B.DONE_DATE(+)
AND A.CUSTOMER_ORDER_ID = C.CUSTOMER_ORDER_ID
AND A.DONE_DATE between to_date(:"SYS_B_11", :"SYS_B_12") and to_date(:"SYS_B_13", :"SYS_B_14") + :"SYS_B_15"
AND A.OP_ID IN (:"SYS_B_16")
AND C.RECEIVE_TYPE = :"SYS_B_17"
UNION ALL
SELECT A.*,
B.BUSI_FEE_ID,
B.FACT_MONEY FACT_MONEY2,
B.SHOULD_MONEY SHOULD_MONEY2,
B.DERATE_MONEY DERATE_MONEY2
FROM RP_PBOSS_DETAIL_577 A,
RP_FEE_DETAIL_577 B,
(SELECT CUSTOMER_ORDER_ID,MAX(AA.RECEIVE_TYPE) RECEIVE_TYPE FROM RP_PBOSS_DETAIL_577 AA GROUP BY CUSTOMER_ORDER_ID) C
WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
AND A.DONE_DATE = B.DONE_DATE(+)
AND A.CUSTOMER_ORDER_ID = C.CUSTOMER_ORDER_ID
AND A.COMPLETE_DATE between to_date(:"SYS_B_18", :"SYS_B_19") and to_date(:"SYS_B_20", :"SYS_B_21") + :"SYS_B_22"
AND A.OP_ID IN (:"SYS_B_23")
AND C.RECEIVE_TYPE = :"SYS_B_24"
AND A.ORDER_STATE = :"SYS_B_25"
UNION ALL
SELECT A.*,
B.BUSI_FEE_ID,
(:"SYS_B_26" - B.FACT_MONEY) FACT_MONEY2,
(:"SYS_B_27" - B.SHOULD_MONEY) SHOULD_MONEY2,
(:"SYS_B_28" - B.DERATE_MONEY) DERATE_MONEY2
FROM RP_PBOSS_DETAIL_577 A,
RP_FEE_DETAIL_577 B,
RP_CANCEL_DETAIL_577 C,
(SELECT CUSTOMER_ORDER_ID,MAX(AA.RECEIVE_TYPE) RECEIVE_TYPE FROM RP_PBOSS_DETAIL_577 AA GROUP BY CUSTOMER_ORDER_ID) D
WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
AND A.DONE_DATE = B.DONE_DATE(+)
AND A.CUSTOMER_ORDER_ID = C.CUSTOMER_ORDER_ID
AND A.CUSTOMER_ORDER_ID = D.CUSTOMER_ORDER_ID
AND C.CANCEL_DATE between to_date(:"SYS_B_29", :"SYS_B_30") and to_date(:"SYS_B_31", :"SYS_B_32") + :"SYS_B_33"
AND C.OP_ID IN (:"SYS_B_34")
AND D.RECEIVE_TYPE = :"SYS_B_35"
AND A.ORDER_STATE = :"SYS_B_36"
) T
WHERE T.PROD_CATALOG_ID = :"SYS_B_37"
AND T.ORG_ID in (:"SYS_B_38")
AND NOT (T.BUSINESS_ID = ANY(:"SYS_B_39", :"SYS_B_40") AND T.OFFER_TYPE = :"SYS_B_41" AND T.EXPIRE_DATE < TO_DATE(:"SYS_B_42", :"SYS_B_43"))
AND T.BUSINESS_ID NOT IN (:"SYS_B_44", :"SYS_B_45", :"SYS_B_46",:"SYS_B_47", :"SYS_B_48")
GROUP BY T.CUSTOMER_ORDER_ID) T1
Plan hash value: 1930065266
---------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows| Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 19151 (100)| |
| 1 | SORT AGGREGATE | | 1 | 39 | | |
| 2 | VIEW | | 3 | 117 | 19151 (2)| 00:03:50 |
| 3 | SORT GROUP BY | | 3 | 195 | 19151 (2)| 00:03:50 |
| 4 | VIEW | | 3 | 195 | 19150 (2)| 00:03:50 |
| 5 | UNION-ALL | | | | | |
| 6 | FILTER | | | | | |
| 7 | SORT GROUP BY | | 1 | 512 | 5724 (2)| 00:01:09 |
| 8 | FILTER | | | | | |
| 9 | HASH JOIN | | 1 | 512 | 5723 (2)| 00:01:09 |
| 10 | NESTED LOOPS OUTER | | 1 | 501 | 16 (13)| 00:00:01 |
| 11 | TABLE ACCESS BY INDEX ROWID | RP_PBOSS_DETAIL_579 | 1 | 455 | 14 (8)| 00:00:01 |
| 12 | BITMAP CONVERSION TO ROWIDS | | | | | |
| 13 | BITMAP AND | | | | | |
| 14 | BITMAP CONVERSION FROM ROWIDS | | | | | |
| 15 | SORT ORDER BY | | | | | |
| 16 | INDEX RANGE SCAN | IDX_RPPD_008_579 |1291 | | 2 (0)| 00:00:01 |
| 17 | BITMAP CONVERSION FROM ROWIDS | | | | | |
| 18 | INDEX RANGE SCAN | IDX_RPPD_003_579 |1291 | | 6 (0)| 00:00:01 |
| 19 | PARTITION RANGE ITERATOR | | 1 | 46 | 1 (0)| 00:00:01 |
| 20 | TABLE ACCESS BY LOCAL INDEX ROWID| RP_FEE_DETAIL_579 | 1 | 46 | 1 (0)| 00:00:01 |
| 21 | INDEX RANGE SCAN | IDX_RP_FEE_INT_008_579 | 1 | | 1 (0)| 00:00:01 |
| 22 | TABLE ACCESS FULL | RP_PBOSS_DETAIL_579 | 479K| 5149K| 5703 (2)| 00:01:09 |
| 23 | FILTER | | | | | |
| 24 | SORT GROUP BY | | 1 | 512 | 6647 (2)| 00:01:20 |
| 25 | FILTER | | | | | |
| 26 | NESTED LOOPS OUTER | | 1 | 512 | 6646 (2)| 00:01:20 |
| 27 | HASH JOIN | | 1 | 466 | 6645 (2)| 00:01:20 |
| 28 | TABLE ACCESS BY INDEX ROWID | RP_PBOSS_DETAIL_579 | 1 | 455 | 937 (1)| 00:00:12 |
| 29 | INDEX RANGE SCAN | IDX_RPPD_003_579 |4205 | | 6 (0)| 00:00:01 |
| 30 | TABLE ACCESS FULL | RP_PBOSS_DETAIL_579 | 479K| 5149K| 5703 (2)| 00:01:09 |
| 31 | PARTITION RANGE ITERATOR | | 1 | 46 | 2 (0)| 00:00:01 |
| 32 | TABLE ACCESS BY LOCAL INDEX ROWID | RP_FEE_DETAIL_579 | 1 | 46 | 2 (0)| 00:00:01 |
| 33 | INDEX RANGE SCAN | IDX_RP_FEE_INT_008_579 | 3 | | 1 (0)| 00:00:01 |
| 34 | FILTER | | | | | |
| 35 | SORT GROUP BY | | 1 | 543 | 6778 (2)| 00:01:22 |
| 36 | FILTER | | | | | |
| 37 | NESTED LOOPS OUTER | | 1 | 543 | 6777 (2)| 00:01:22 |
| 38 | NESTED LOOPS | | 1 | 497 | 6776 (2)| 00:01:22 |
| 39 | MERGE JOIN CARTESIAN | | 1 | 42 | 5839 (2)| 00:01:11 |
| 40 | TABLE ACCESS FULL | RP_CANCEL_DETAIL_579 | 1 | 31 | 137 (3)| 00:00:02 |
| 41 | BUFFER SORT | | 479K| 5149K| 5703 (2)| 00:01:09 |
| 42 | TABLE ACCESS FULL | RP_PBOSS_DETAIL_579 | 479K| 5149K| 5703 (2)| 00:01:09 |
| 43 | TABLE ACCESS BY INDEX ROWID | RP_PBOSS_DETAIL_579 | 1 | 455 | 937 (1)| 00:00:12 |
| 44 | INDEX RANGE SCAN | IDX_RPPD_003_579 |4205 | | 5 (0)| 00:00:01 |
| 45 | PARTITION RANGE ITERATOR | | 1 | 46 | 2 (0)| 00:00:01 |
| 46 | TABLE ACCESS BY LOCAL INDEX ROWID | RP_FEE_DETAIL_579 | 1 | 46 | 2 (0)| 00:00:01 |
| 47 | INDEX RANGE SCAN | IDX_RP_FEE_INT_008_579 | 3 | | 1 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------------
瞟一眼执行计划:瓶颈很明显,看看22,30,40.其实也看到,cache buffers chain latch保护的相应chain bucket中的对象为RP_PBOSS_DETAIL_579。所以,还是sql
的执行计划有问题,导致的大量热块度,latch争用,CPU持续超过95%。
更改sql如下:
with CC as
(SELECT/*+ materialize */CUSTOMER_ORDER_ID,MAX(AA.RECEIVE_TYPE) RECEIVE_TYPE FROM RPT.RP_PBOSS_DETAIL_579 AA GROUP BY CUSTOMER_ORDER_ID)
SELECT :"SYS_B_00" type,
:"SYS_B_01" pay_qty,
:"SYS_B_02" price,
SUM(T1.SHOULD_MONEY_C) / :"SYS_B_03" pay_fee,
:"SYS_B_04" drt_qty,
-SUM(T1.DERATE_MONEY_C) / :"SYS_B_05" drt_fee,
:"SYS_B_06" total_get_qty,
SUM(T1.FACT_MONEY_C) / :"SYS_B_07" get_fee
FROM (
SELECT T.CUSTOMER_ORDER_ID,
MAX(DECODE(BUSI_FEE_ID,:"SYS_B_08",FACT_MONEY2)) FACT_MONEY_C,
MAX(DECODE(BUSI_FEE_ID,:"SYS_B_09",SHOULD_MONEY2)) SHOULD_MONEY_C,
MAX(DECODE(BUSI_FEE_ID,:"SYS_B_10",DERATE_MONEY2)) DERATE_MONEY_C
FROM (
SELECT A.*,
B.BUSI_FEE_ID,
B.FACT_MONEY FACT_MONEY2,
B.SHOULD_MONEY SHOULD_MONEY2,
B.DERATE_MONEY DERATE_MONEY2
FROM RPT.RP_PBOSS_DETAIL_579 A,
RPT.RP_FEE_DETAIL_579 B,
CC
WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
AND A.DONE_DATE = B.DONE_DATE(+)
AND A.CUSTOMER_ORDER_ID = CC.CUSTOMER_ORDER_ID
AND A.DONE_DATE between to_date(:"SYS_B_11", :"SYS_B_12") and to_date(:"SYS_B_13", :"SYS_B_14") + :"SYS_B_15"
AND A.OP_ID IN (:"SYS_B_16")
AND CC.RECEIVE_TYPE = :"SYS_B_17"
UNION ALL
SELECT A.*,
B.BUSI_FEE_ID,
B.FACT_MONEY FACT_MONEY2,
B.SHOULD_MONEY SHOULD_MONEY2,
B.DERATE_MONEY DERATE_MONEY2
FROM RPT.RP_PBOSS_DETAIL_579 A,
RPT.RP_FEE_DETAIL_579 B,
CC
WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
AND A.DONE_DATE = B.DONE_DATE(+)
AND A.CUSTOMER_ORDER_ID = CC.CUSTOMER_ORDER_ID
AND A.COMPLETE_DATE between to_date(:"SYS_B_18", :"SYS_B_19") and to_date(:"SYS_B_20", :"SYS_B_21") + :"SYS_B_22"
AND A.OP_ID IN (:"SYS_B_23")
AND CC.RECEIVE_TYPE = :"SYS_B_24"
AND A.ORDER_STATE = :"SYS_B_25"
UNION ALL
SELECT A.*,
B.BUSI_FEE_ID,
(:"SYS_B_26" - B.FACT_MONEY) FACT_MONEY2,
(:"SYS_B_27" - B.SHOULD_MONEY) SHOULD_MONEY2,
(:"SYS_B_28" - B.DERATE_MONEY) DERATE_MONEY2
FROM RPT.RP_PBOSS_DETAIL_579 A,
RPT.RP_FEE_DETAIL_579 B,
RPT.RP_CANCEL_DETAIL_579 C,
CC
WHERE A.OFFER_ORDER_ID = B.OFFER_ORDER_ID(+)
AND A.DONE_DATE = B.DONE_DATE(+)
AND A.CUSTOMER_ORDER_ID = C.CUSTOMER_ORDER_ID
AND A.CUSTOMER_ORDER_ID = CC.CUSTOMER_ORDER_ID
AND C.CANCEL_DATE between to_date(:"SYS_B_29", :"SYS_B_30") and to_date(:"SYS_B_31", :"SYS_B_32") + :"SYS_B_33"
AND C.OP_ID IN (:"SYS_B_34")
AND CC.RECEIVE_TYPE = :"SYS_B_35"
AND A.ORDER_STATE = :"SYS_B_36"
) T
WHERE T.PROD_CATALOG_ID = :"SYS_B_37"
AND T.ORG_ID in (:"SYS_B_38")
AND NOT (T.BUSINESS_ID = ANY(:"SYS_B_39", :"SYS_B_40") AND T.OFFER_TYPE = :"SYS_B_41" AND T.EXPIRE_DATE < TO_DATE(:"SYS_B_42", :"SYS_B_43"))
AND T.BUSINESS_ID NOT IN (:"SYS_B_44", :"SYS_B_45", :"SYS_B_46",:"SYS_B_47", :"SYS_B_48")
GROUP BY T.CUSTOMER_ORDER_ID) T1;
Plan hash value: 1402984985
-----------------------------------------------------------------------------------------------------------
| Id | Operation | Name |Rows| Bytes |Cost(%CPU)|
-----------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 39 |7243 (3)|
| 1 | TEMP TABLE TRANSFORMATION | | | | |
| 2 | LOAD AS SELECT | | | | |
| 3 | SORT GROUP BY | |201K| 2161K|7044 (2)|
| 4 | TABLE ACCESS FULL | RP_PBOSS_DETAIL_579 |478K| 5144K|5702 (2)|
| 5 | SORT AGGREGATE | | 1 | 39 | |
| 6 | VIEW | | 3 | 117 | 199 (10)|
| 7 | SORT GROUP BY | | 3 | 420 | 199 (10)|
| 8 | VIEW | | 3 | 420 | 198 (10)|
| 9 | UNION-ALL | | | | |
|* 10 | FILTER | | | | |
|* 11 | HASH JOIN | | 1 | 127 | 63 (10)|
| 12 | NESTED LOOPS OUTER | | 1 | 112 | 3 (0)|
|* 13 | TABLE ACCESS BY INDEX ROWID | RP_PBOSS_DETAIL_579 | 1 | 78 | 2 (0)|
|* 14 | INDEX RANGE SCAN | IDX_RPPD_009_579 | 3 | | 1 (0)|
| 15 | PARTITION RANGE ITERATOR | | 1 | 34 | 1 (0)|
|* 16 | TABLE ACCESS BY LOCAL INDEX ROWID| RP_FEE_DETAIL_579 | 1 | 34 | 1 (0)|
|* 17 | INDEX RANGE SCAN | IDX_RP_FEE_INT_008_579 | 1 | | 1 (0)|
|* 18 | VIEW | |201K| 2947K| 58 (7)|
| 19 | TABLE ACCESS FULL | SYS_TEMP_0FD9FC85A_54FF2F02 |201K| 2161K| 58 (7)|
|* 20 | FILTER | | | | |
| 21 | NESTED LOOPS OUTER | | 1 | 136 | 71 (9)|
|* 22 | HASH JOIN | | 1 | 102 | 70 (9)|
|* 23 | TABLE ACCESS BY INDEX ROWID | RP_PBOSS_DETAIL_579 | 1 | 87 | 10 (0)|
| 24 | BITMAP CONVERSION TO ROWIDS | | | | |
| 25 | BITMAP AND | | | | |
| 26 | BITMAP CONVERSION FROM ROWIDS | | | | |
|* 27 | INDEX RANGE SCAN | IDX_RPPD_004_579 |624 | | 2 (0)|
| 28 | BITMAP CONVERSION FROM ROWIDS | | | | |
|* 29 | INDEX RANGE SCAN | IDX_RPPD_003_579 |624 | | 6 (0)|
|* 30 | VIEW | |201K| 2947K| 58 (7)|
| 31 | TABLE ACCESS FULL | SYS_TEMP_0FD9FC85A_54FF2F02 |201K| 2161K| 58 (7)|
| 32 | PARTITION RANGE ITERATOR | | 1 | 34 | 1 (0)|
|* 33 | TABLE ACCESS BY LOCAL INDEX ROWID | RP_FEE_DETAIL_579 | 1 | 34 | 1 (0)|
|* 34 | INDEX RANGE SCAN | IDX_RP_FEE_INT_008_579 | 3 | | 1 (0)|
|* 35 | FILTER | | | | |
| 36 | NESTED LOOPS OUTER | | 1 | 147 | 64 (10)|
|* 37 | HASH JOIN | | 1 | 113 | 63 (10)|
|* 38 | TABLE ACCESS BY INDEX ROWID | RP_PBOSS_DETAIL_579 | 1 | 72 | 2 (0)|
| 39 | NESTED LOOPS | | 1 | 98 | 3 (0)|
| 40 | TABLE ACCESS BY INDEX ROWID | RP_CANCEL_DETAIL_579 | 1 | 26 | 1 (0)|
|* 41 | INDEX RANGE SCAN | IDX_RPCD_009_579 | 1 | | 1 (0)|
|* 42 | INDEX RANGE SCAN | IDX_RPPD_010_579 | 2 | | 1 (0)|
|* 43 | VIEW | |201K| 2947K| 58 (7)|
| 44 | TABLE ACCESS FULL | SYS_TEMP_0FD9FC85A_54FF2F02 |201K| 2161K| 58 (7)|
| 45 | PARTITION RANGE ITERATOR | | 1 | 34 | 1 (0)|
|* 46 | TABLE ACCESS BY LOCAL INDEX ROWID | RP_FEE_DETAIL_579 | 1 | 34 | 1 (0)|
|* 47 | INDEX RANGE SCAN | IDX_RP_FEE_INT_008_579 | 3 | | 1 (0)|
-----------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
10 - filter(TO_DATE(:SYS_B_11,:SYS_B_12)<=TO_DATE(:SYS_B_13,:SYS_B_14)+TO_NUMBER(:SYS_B_15))
11 - access("A"."CUSTOMER_ORDER_ID"="CC"."CUSTOMER_ORDER_ID")
13 - filter("A"."ORG_ID"=TO_NUMBER(:SYS_B_38) AND "A"."PROD_CATALOG_ID"=TO_NUMBER(:SYS_B_37)
AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_44)
AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_45) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_46)
AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_47) AND
"A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_48) AND ("A"."OFFER_TYPE"<>:SYS_B_41
OR "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_39) AND
"A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_40) OR "A"."EXPIRE_DATE">=TO_DATE(:SYS_B_42,:SYS_B_43)))
14 - access("A"."OP_ID"=:SYS_B_16 AND "A"."DONE_DATE">=TO_DATE(:SYS_B_11,:SYS_B_12) AND
"A"."DONE_DATE"<=TO_DATE(:SYS_B_13,:SYS_B_14)+TO_NUMBER(:SYS_B_15))
16 - filter("A"."OFFER_ORDER_ID"="B"."OFFER_ORDER_ID"(+))
17 - access("A"."DONE_DATE"="B"."DONE_DATE"(+))
filter("B"."DONE_DATE"(+)>=TO_DATE(:SYS_B_11,:SYS_B_12)
AND "B"."DONE_DATE"(+)<=TO_DATE(:SYS_B_13,:SYS_B_14)+TO_NUMBER(:SYS_B_15))
18 - filter("CC"."RECEIVE_TYPE"=:SYS_B_17)
20 - filter(TO_DATE(:SYS_B_18,:SYS_B_19)<=TO_DATE(:SYS_B_20,:SYS_B_21)+TO_NUMBER(:SYS_B_22))
22 - access("A"."CUSTOMER_ORDER_ID"="CC"."CUSTOMER_ORDER_ID")
23 - filter("A"."ORDER_STATE"=:SYS_B_25 AND "A"."PROD_CATALOG_ID"=TO_NUMBER(:SYS_B_37) AND
"A"."COMPLETE_DATE">=TO_DATE(:SYS_B_18,:SYS_B_19)
AND "A"."COMPLETE_DATE"<=TO_DATE(:SYS_B_20,:SYS_B_21)+TO_NUMBER(:SYS_B_22) AND
"A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_44) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_45)
AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_46) AND
"A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_47) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_48)
AND ("A"."OFFER_TYPE"<>:SYS_B_41 OR
"A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_39) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_40)
OR "A"."EXPIRE_DATE">=TO_DATE(:SYS_B_42,:SYS_B_43)))
27 - access("A"."OP_ID"=:SYS_B_23)
29 - access("A"."ORG_ID"=TO_NUMBER(:SYS_B_38))
30 - filter("CC"."RECEIVE_TYPE"=:SYS_B_24)
33 - filter("A"."OFFER_ORDER_ID"="B"."OFFER_ORDER_ID"(+))
34 - access("A"."DONE_DATE"="B"."DONE_DATE"(+))
35 - filter(TO_DATE(:SYS_B_29,:SYS_B_30)<=TO_DATE(:SYS_B_31,:SYS_B_32)+TO_NUMBER(:SYS_B_33))
37 - access("A"."CUSTOMER_ORDER_ID"="CC"."CUSTOMER_ORDER_ID")
38 - filter("A"."ORDER_STATE"=:SYS_B_36 AND "A"."ORG_ID"=TO_NUMBER(:SYS_B_38)
AND "A"."PROD_CATALOG_ID"=TO_NUMBER(:SYS_B_37) AND
"A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_44) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_45)
AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_46) AND
"A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_47) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_48)
AND ("A"."OFFER_TYPE"<>:SYS_B_41 OR
"A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_39) AND "A"."BUSINESS_ID"<>TO_NUMBER(:SYS_B_40)
OR "A"."EXPIRE_DATE">=TO_DATE(:SYS_B_42,:SYS_B_43)))
41 - access("C"."OP_ID"=:SYS_B_34 AND "C"."CANCEL_DATE">=TO_DATE(:SYS_B_29,:SYS_B_30) AND
"C"."CANCEL_DATE"<=TO_DATE(:SYS_B_31,:SYS_B_32)+TO_NUMBER(:SYS_B_33))
42 - access("A"."CUSTOMER_ORDER_ID"="C"."CUSTOMER_ORDER_ID")
43 - filter("CC"."RECEIVE_TYPE"=:SYS_B_35)
46 - filter("A"."OFFER_ORDER_ID"="B"."OFFER_ORDER_ID"(+))
47 - access("A"."DONE_DATE"="B"."DONE_DATE"(+))
虽然效率不是好很多,单对于报表库来说,更改后此SQL效率已经提升2倍多。补充:下面的几个sql和第一个都是类似的,只是不同地市的不同表,sql完全一致,所以搞定一个,其它的就ok。