1.给权限
grant ADVISOR to system;
(system应该有)
2.查看原来SQL的执行计划
alter session set statistics_level=all;
set serveroutput off
set linesize 222
set pagesize 1000
set long 99999
select * from table(dbms_xplan.display_awr('7ysgr9qfhfgtr')); (7ysgr9qfhfgtr 是sql_id) (awr里面的执行计划)
SQL> select * from table(dbms_xplan.display_awr('7ysgr9qfhfgtr'));
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
SQL_ID 7ysgr9qfhfgtr
--------------------
INSERT INTO di_te_purstockbill (PURORG, plant,purchasereqno, itemno,
purstockbillid, ordtype, client, purdocno, createddate, vendorno,
purdocitemno, mtlno, ordpriceunit, netvalue, vendordesc, purgrp,
itemdeliverydate, quantity, price,purgrpdesc,buyliststrdes,storelocatio
n,estimatedpriceindic,docdate,remark,remark1,proposerID,proposerDesc
,createdby,promotion,matbrand,VOLUMEWEIGHT,purdocitemid,purdocheaderid,p
riConfiDate,di_opertype) SELECT * FROM (SELECT d.*, 'U' FROM (SELECT
PURORG, plant,purchasereqno, itemno, purstockbillid, ordtype,min(
:1), purdocno, lastchangedon, vendorno, purdoclineno, mtlno,
ordpriceunit, netvalue, description, purgrp, MIN (itemdeliverydate),
quantity, price,purgrpdesc,buyliststrdes,storelocation,estimatedpriceind
ic,docdate,remark,remark1,proposerID,proposerDesc,createdby
,promotion,matbrand,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priConfiDat
e FROM (SELECT b.PURORG, c.plant,c.purchasereqno, c.itemno,
c.purdocitemid as purstockbillid, b.ordtype, b.purdocno,
b.lastchangedon, b.vendorno, c.purdoclineno, c.mtlno, c.ordpriceunit,
c.netvalue, d.description, b.purgrp, e.itemdeliverydate, c.quantity,
TRUNC (TO_NUMBER (NVL2 (c.estimatedpriceindic,DECODE (c.priceunit,0,
NULL,NULL, NULL,(c.netprice / c.priceunit)),NULL)), 6) price,
g.description AS purgrpdesc, i.description AS buyliststrdes,
c.storagelocation AS storelocation, c.estimatedpriceindic, b.purdocdate
AS docdate, c.memo AS remark, c.memo1 as remark1,j.createdby as
proposerID,k.comments as proposerDesc ,l.comments as
createdBy,c.promotion,m.matbrand ,m.VOLUMEWEIGHT,c.purdocitemid,b.purdo
cheaderid,c.priConfiDate FROM pursasl e,purdocitem c,purdocheader
b,puroutstobillvoutyp a,purvendormaster d,purgroup f,purgrouptrl
g,purdoctype h,purdoctypetrl i,purreq j,aduser k,aduser l,MMRGenMtl m
WHERE e.purdocno(+) = c.purdocno AND e.purdoclineno(+) = c.purdoclineno
AND e.client(+) = c.client AND b.purchasingdocctg = 'F' AND b.ordtype
= a.ordtype AND b.purchasingdocctg = a.purdocctg AND b.client =
a.client AND c.purdocno = b.purdocno AND c.client = b.client AND NVL
(c.purdocdeletionindic, 'N') = 'N' AND c.client = :2 AND b.vendorno =
d.vendorno AND b.client = d.client AND b.purgrp = f.purgroup AND
b.client = f.client AND f.purgroupid = g.purgroupid(+) AND
g.LANGUAGE(+) = :3 AND b.ordtype = h.purdoctype AND b.client =
h.client AND b.purchasingdocctg = h.purdocctg AND h.purdoctypeid =
i.purdoctypeid(+) AND i.LANGUAGE(+) = :3 AND c.purchasereqno =
j.purchasereqno(+) AND c.itemno = j.itemno(+) AND c.client =
j.client(+) AND j.createdby = k.NAME(+) AND j.client = k.client(+) AND
k.LANGUAGE(+) = :3 and b.client=l.client(+) and b.createdBy=l.NAME(+)
AND l.LANGUAGE(+) = :3 and c.client=m.client(+) and c.mtlno=m.mtlno(+)
) a GROUP BY PURORG, plant,purchasereqno, itemno, ordtype,
purdocno, lastchangedon, vendorno, purdoclineno, mtlno, ordpriceunit,
netvalue, description, purgrp, quantity, price,
purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdate,remar
k,remark1,proposerID,proposerDesc,createdby,promotion,matbrand,VOLUMEWEI
GHT,purstockbillid,purdocitemid,purdocheaderid,priConfiDate MINUS
SELECT PURORG, plant,purchasereqno, itemno, purstockbillid, ordtype,
client, purdocno, createddate, vendorno, purdocitemno, mtlno,
ordpriceunit, netvalue, vendordesc, purgrp, itemdeliverydate, quantity,
price, purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matbrand
,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priConfiDate FROM
purstockbill WHERE di_opertype <> 'D') d UNION SELECT d.*, 'D' FROM
(SELECT PURORG, plant,purchasereqno, itemno, purstockbillid, ordtype,
client, purdocno, createddate, vendorno, purdocitemno, mtlno,
ordpriceunit, netvalue, vendordesc, purgrp, itemdeliverydate, quantity,
price, purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matbrand,VO
LUMEWEIGHT,purdocitem
Plan hash value: 3278049608
----------------------------------------------------------------------------------------------------
-------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc
| Cost (%CPU)| Time |
----------------------------------------------------------------------------------------------------
-------------------------
| 0 | INSERT STATEMENT | | | |
| 527K(100)| |
| 1 | LOAD TABLE CONVENTIONAL | | | |
| | |
| 2 | VIEW | | 107K| 106M|
| 527K (1)| 01:45:26 |
| 3 | SORT UNIQUE | | 107K| 106M| 120M
| 527K (49)| 01:45:26 |
| 4 | UNION-ALL | | | |
| | |
| 5 | VIEW | | 101K| 100M|
| 251K (1)| 00:50:23 |
| 6 | MINUS | | | |
| | |
| 7 | SORT UNIQUE | | 101K| 52M| 56M
| | |
| 8 | SORT GROUP BY | | 101K| 52M| 56M
| 251K (1)| 00:50:17 |
| 9 | HASH JOIN RIGHT OUTER | | 101K| 52M|
| 228K (1)| 00:45:38 |
| 10 | TABLE ACCESS FULL | ADUSER | 4111 | 132K|
| 33 (0)| 00:00:01 |
| 11 | NESTED LOOPS OUTER | | 101K| 49M|
| 228K (1)| 00:45:37 |
| 12 | HASH JOIN RIGHT OUTER | | 101K| 46M| 24M
| 219K (1)| 00:43:49 |
| 13 | TABLE ACCESS FULL | MMRGENMTL | 195K| 22M|
| 3555 (2)| 00:00:43 |
| 14 | HASH JOIN OUTER | | 100K| 34M| 32M
| 212K (1)| 00:42:31 |
| 15 | NESTED LOOPS | | | |
| | |
| 16 | NESTED LOOPS | | 100K| 31M|
| 107K (1)| 00:21:36 |
| 17 | HASH JOIN RIGHT OUTER | | 28853 | 6931K|
| 21366 (1)| 00:04:17 |
| 18 | TABLE ACCESS FULL | ADUSER | 4110 | 132K|
| 33 (0)| 00:00:01 |
| 19 | HASH JOIN | | 28853 | 6001K|
| 21332 (1)| 00:04:16 |
| 20 | TABLE ACCESS FULL | PURVENDORMASTER | 4241 | 211K|
| 29 (0)| 00:00:01 |
| 21 | HASH JOIN RIGHT OUTER | | 33969 | 5374K|
| 21302 (1)| 00:04:16 |
| 22 | TABLE ACCESS FULL | PURGROUPTRL | 249 | 6723 |
| 4 (0)| 00:00:01 |
| 23 | HASH JOIN | | 33969 | 4478K|
| 21297 (1)| 00:04:16 |
| 24 | VIEW | index$_join$_010 | 249 | 3237 |
| 3 (34)| 00:00:01 |
| 25 | HASH JOIN | | | |
| | |
| 26 | INDEX FAST FULL SCAN | PURGROUP_U | 249 | 3237 |
| 1 (0)| 00:00:01 |
| 27 | INDEX FAST FULL SCAN | SYS_C0023218 | 249 | 3237 |
| 1 (0)| 00:00:01 |
| 28 | HASH JOIN | | 34038 | 4055K|
| 21294 (1)| 00:04:16 |
| 29 | INDEX RANGE SCAN | PUROUTSTOBILLVOUTYP_U | 1 | 10 |
| 1 (0)| 00:00:01 |
| 30 | HASH JOIN | | 726K| 77M|
| 21289 (1)| 00:04:16 |
| 31 | HASH JOIN OUTER | | 21 | 1008 |
| 7 (15)| 00:00:01 |
| 32 | VIEW | index$_join$_012 | 21 | 315 |
| 3 (34)| 00:00:01 |
| 33 | HASH JOIN | | | |
| | |
| 34 | INDEX FAST FULL SCAN| PURDOCTYPE_U | 21 | 315 |
| 1 (0)| 00:00:01 |
| 35 | INDEX FAST FULL SCAN| SYS_C0023208 | 21 | 315 |
| 1 (0)| 00:00:01 |
| 36 | TABLE ACCESS FULL | PURDOCTYPETRL | 39 | 1287 |
| 4 (0)| 00:00:01 |
| 37 | TABLE ACCESS FULL | PURDOCHEADER | 2493K| 152M|
| 21270 (1)| 00:04:16 |
| 38 | INDEX RANGE SCAN | PURDOCITEM_U | 4 | |
| 2 (0)| 00:00:01 |
| 39 | TABLE ACCESS BY INDEX ROWID | PURDOCITEM | 3 | 249 |
| 3 (0)| 00:00:01 |
| 40 | TABLE ACCESS FULL | PURSASL | 12M| 359M|
| 77611 (1)| 00:15:32 |
| 41 | TABLE ACCESS BY INDEX ROWID | PURREQ | 1 | 30 |
| 2 (0)| 00:00:01 |
| 42 | INDEX UNIQUE SCAN | PURREQ_U | 1 | |
| 1 (0)| 00:00:01 |
| 43 | SORT UNIQUE | | 6207 | 1606K| 2168K
| | |
| 44 | TABLE ACCESS FULL | PURSTOCKBILL | 6207 | 1606K|
| 102 (0)| 00:00:02 |
| 45 | VIEW | | 6207 | 6273K|
| 251K (1)| 00:50:23 |
| 46 | MINUS | | | |
| | |
| 47 | SORT UNIQUE | | 6207 | 1606K| 2168K
| | |
| 48 | TABLE ACCESS FULL | PURSTOCKBILL | 6207 | 1606K|
| 102 (0)| 00:00:02 |
| 49 | SORT UNIQUE | | 101K| 52M| 56M
| | |
| 50 | SORT GROUP BY | | 101K| 52M| 56M
| 251K (1)| 00:50:17 |
| 51 | HASH JOIN RIGHT OUTER | | 101K| 52M|
| 228K (1)| 00:45:38 |
| 52 | TABLE ACCESS FULL | ADUSER | 4111 | 132K|
| 33 (0)| 00:00:01 |
| 53 | NESTED LOOPS OUTER | | 101K| 49M|
| 228K (1)| 00:45:37 |
| 54 | HASH JOIN RIGHT OUTER | | 101K| 46M| 24M
| 219K (1)| 00:43:49 |
| 55 | TABLE ACCESS FULL | MMRGENMTL | 195K| 22M|
| 3555 (2)| 00:00:43 |
| 56 | HASH JOIN OUTER | | 100K| 34M| 32M
| 212K (1)| 00:42:31 |
| 57 | NESTED LOOPS | | | |
| | |
| 58 | NESTED LOOPS | | 100K| 31M|
| 107K (1)| 00:21:36 |
| 59 | HASH JOIN RIGHT OUTER | | 28853 | 6931K|
| 21366 (1)| 00:04:17 |
| 60 | TABLE ACCESS FULL | ADUSER | 4110 | 132K|
| 33 (0)| 00:00:01 |
| 61 | HASH JOIN | | 28853 | 6001K|
| 21332 (1)| 00:04:16 |
| 62 | TABLE ACCESS FULL | PURVENDORMASTER | 4241 | 211K|
| 29 (0)| 00:00:01 |
| 63 | HASH JOIN RIGHT OUTER | | 33969 | 5374K|
| 21302 (1)| 00:04:16 |
| 64 | TABLE ACCESS FULL | PURGROUPTRL | 249 | 6723 |
| 4 (0)| 00:00:01 |
| 65 | HASH JOIN | | 33969 | 4478K|
| 21297 (1)| 00:04:16 |
| 66 | VIEW | index$_join$_027 | 249 | 3237 |
| 3 (34)| 00:00:01 |
| 67 | HASH JOIN | | | |
| | |
| 68 | INDEX FAST FULL SCAN | PURGROUP_U | 249 | 3237 |
| 1 (0)| 00:00:01 |
| 69 | INDEX FAST FULL SCAN | SYS_C0023218 | 249 | 3237 |
| 1 (0)| 00:00:01 |
| 70 | HASH JOIN | | 34038 | 4055K|
| 21294 (1)| 00:04:16 |
| 71 | INDEX RANGE SCAN | PUROUTSTOBILLVOUTYP_U | 1 | 10 |
| 1 (0)| 00:00:01 |
| 72 | HASH JOIN | | 726K| 77M|
| 21289 (1)| 00:04:16 |
| 73 | HASH JOIN OUTER | | 21 | 1008 |
| 7 (15)| 00:00:01 |
| 74 | VIEW | index$_join$_029 | 21 | 315 |
| 3 (34)| 00:00:01 |
| 75 | HASH JOIN | | | |
| | |
| 76 | INDEX FAST FULL SCAN| PURDOCTYPE_U | 21 | 315 |
| 1 (0)| 00:00:01 |
| 77 | INDEX FAST FULL SCAN| SYS_C0023208 | 21 | 315 |
| 1 (0)| 00:00:01 |
| 78 | TABLE ACCESS FULL | PURDOCTYPETRL | 39 | 1287 |
| 4 (0)| 00:00:01 |
| 79 | TABLE ACCESS FULL | PURDOCHEADER | 2493K| 152M|
| 21270 (1)| 00:04:16 |
| 80 | INDEX RANGE SCAN | PURDOCITEM_U | 4 | |
| 2 (0)| 00:00:01 |
| 81 | TABLE ACCESS BY INDEX ROWID | PURDOCITEM | 3 | 249 |
| 3 (0)| 00:00:01 |
| 82 | TABLE ACCESS FULL | PURSASL | 12M| 359M|
| 77611 (1)| 00:15:32 |
| 83 | TABLE ACCESS BY INDEX ROWID | PURREQ | 1 | 30 |
| 2 (0)| 00:00:01 |
| 84 | INDEX UNIQUE SCAN | PURREQ_U | 1 | |
| 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------
-------------------------
已选择155行。
3.创建sql tuning任务
DECLARE
my_task_name VARCHAR2(30);
BEGIN
my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
SQL_ID => '7ysgr9qfhfgtr',
scope => 'COMPREHENSIVE',
time_limit => 60,
task_name => 'tunning_task_7ysgr9qfhfgtr',
description => 'Task to tune a query on 7ysgr9qfhfgtr');
END;
/
4.查看创建的信息
SQL> SELECT TASK_NAME FROM DBA_ADVISOR_LOG WHERE OWNER = 'SYS' and TASK_NAME='tunning_task_7ysgr9qfhfgtr';
TASK_NAME
------------------------------------------------------------
tunning_task_7ysgr9qfhfgtr
5.执行sql tuning任务
BEGIN
DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => 'tunning_task_7ysgr9qfhfgtr' );
END;
/
6.查看sql tunning任务状态
SQL> SELECT status FROM USER_ADVISOR_TASKS WHERE task_name = 'tunning_task_7ysgr9qfhfgtr';
STATUS
-----------
COMPLETED
7.展示sql tunning结果
SET LONG 10000
SET LONGCHUNKSIZE 1000
SET LINESIZE 100
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tunning_task_7ysgr9qfhfgtr') FROM DUAL;
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tunning_task_7ysgr9qfhfgtr') FROM DUAL;
DBMS_SQLTUNE.REPORT_TUNING_TASK('TUNNING_TASK_7YSGR9QFHFGTR')
----------------------------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name : tunning_task_7ysgr9qfhfgtr
Tuning Task Owner : SYS
Workload Type : Single SQL Statement
Execution Count : 2
Current Execution : EXEC_15012
Execution Type : TUNE SQL
Scope : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status : INTERRUPTED
Started at : 02/16/2017 13:45:43
Completed at : 02/16/2017 13:46:47
-------------------------------------------------------------------------------
Error: ORA-13639: 当前操作因超时而中断。
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Schema Name: JC800
SQL ID : 7ysgr9qfhfgtr
SQL Text : INSERT INTO di_te_purstockbill
(PURORG, plant,purchasereqno, itemno, purstockbillid,
ordtype, client, purdocno,
createddate, vendorno, purdocitemno, mtlno, ordpriceunit,
netvalue, vendordesc, purgrp, itemdeliverydate, quantity,
price,purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic
,docdate,remark,remark1,proposerID,proposerDesc
,createdby,promotion,matbrand,VOLUMEWEIGHT,purdocitemid,purdochea
derid,priConfiDate,di_opertype)
SELECT *
FROM (SELECT d.*, 'U'
FROM (SELECT PURORG, plant,purchasereqno, itemno,
purstockbillid,
ordtype,min( :1), purdocno, lastchangedon,
vendorno, purdoclineno, mtlno, ordpriceunit,
netvalue, description, purgrp,
MIN (itemdeliverydate), quantity,
price,purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,
docdate,remark,remark1,proposerID,proposerDesc,createdby
,promotion,matbrand,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priC
onfiDate
FROM (SELECT b.PURORG, c.plant,c.purchasereqno, c.itemno,
c.purdocitemid as purstockbillid,
b.ordtype, b.purdocno, b.lastchangedon, b.vendorno,
c.purdoclineno, c.mtlno, c.ordpriceunit, c.netvalue,
d.description,
b.purgrp, e.itemdeliverydate, c.quantity,
TRUNC (TO_NUMBER (NVL2 (c.estimatedpriceindic,DECODE
(c.priceunit,0, NULL,NULL, NULL,(c.netprice /
c.priceunit)),NULL)), 6) price,
g.description AS purgrpdesc, i.description AS buyliststrdes,
c.storagelocation AS storelocation, c.estimatedpriceindic,
b.purdocdate AS docdate, c.memo AS remark,
c.memo1 as remark1,j.createdby as proposerID,k.comments as
proposerDesc ,l.comments as createdBy,c.promotion,m.matbrand
,m.VOLUMEWEIGHT,c.purdocitemid,b.purdocheaderid,c.priConfiDate
FROM pursasl e,purdocitem c,purdocheader b,puroutstobillvoutyp
a,purvendormaster d,purgroup f,purgrouptrl g,purdoctype
h,purdoctypetrl i,purreq j,aduser k,aduser l,MMRGenMtl m
WHERE e.purdocno(+) = c.purdocno AND e.purdoclineno(+) =
c.purdoclineno AND e.client(+) = c.client
AND b.purchasingdocctg = 'F' AND b.ordtype = a.ordtype AND
b.purchasingdocctg = a.purdocctg AND b.client = a.client
AND c.purdocno = b.purdocno AND c.client = b.client AND NVL
(c.purdocdeletionindic, 'N') = 'N' AND c.client = :2
AND b.vendorno = d.vendorno AND b.client = d.client
AND b.purgrp = f.purgroup AND b.client = f.client AND
f.purgroupid = g.purgroupid(+) AND g.LANGUAGE(+) = :3
AND b.ordtype = h.purdoctype AND b.client = h.client AND
b.purchasingdocctg = h.purdocctg AND h.purdoctypeid =
i.purdoctypeid(+) AND i.LANGUAGE(+) = :3
AND c.purchasereqno = j.purchasereqno(+)
AND c.itemno = j.itemno(+) AND c.client = j.client(+) AND
j.createdby = k.NAME(+) AND j.client = k.client(+) AND
k.LANGUAGE(+) = :3
and b.client=l.client(+) and b.createdBy=l.NAME(+) AND
l.LANGUAGE(+) = :3 and c.client=m.client(+) and
c.mtlno=m.mtlno(+) ) a
GROUP BY PURORG, plant,purchasereqno,
itemno,
ordtype,
purdocno,
lastchangedon,
vendorno,
purdoclineno,
mtlno,
ordpriceunit,
netvalue,
description,
purgrp,
quantity,
price,
purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matb
rand,VOLUMEWEIGHT,purstockbillid,purdocitemid,purdocheaderid,priC
onfiDate
MINUS
SELECT PURORG, plant,purchasereqno, itemno, purstockbillid,
ordtype, client, purdocno, createddate,
vendorno, purdocitemno, mtlno, ordpriceunit,
netvalue, vendordesc, purgrp,
itemdeliverydate, quantity, price,
purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matb
rand ,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priConfiDate
FROM purstockbill
WHERE di_opertype <> 'D') d
UNION
SELECT d.*, 'D'
FROM (SELECT PURORG, plant,purchasereqno, itemno,
purstockbillid,
ordtype, client, purdocno, createddate,
vendorno, purdocitemno, mtlno, ordpriceunit,
netvalue, vendordesc, purgrp,
itemdeliverydate, quantity, price,
purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matb
rand,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priConfiDate
FROM purstockbill
WHERE di_opertype <> 'D'
MINUS
SELECT PURORG, plant,purchasereqno, itemno, purstockbillid,
ordtype,min( :1), purdocno, lastchangedon,
vendorno, purdoclineno, mtlno, ordpriceunit,
netvalue, description, purgrp,
MIN (itemdeliverydate), quantity,
price,purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,
docdate,remark,remark1,proposerID,proposerDesc,createdby,promotio
n,matbrand,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priConfiDate
FROM (SELECT b.PURORG, c.plant,c.purchasereqno, c.itemno,
c.purdocitemid as purstockbillid,
b.ordtype, b.purdocno, b.lastchangedon, b.vendorno,
c.purdoclineno, c.mtlno, c.ordpriceunit, c.netvalue,
d.description,
b.purgrp, e.itemdeliverydate, c.quantity,
TRUNC (TO_NUMBER (NVL2 (c.estimatedpriceindic,DECODE
(c.priceunit,0, NULL,NULL, NULL,(c.netprice /
c.priceunit)),NULL)), 6) price,
g.description AS purgrpdesc, i.description AS buyliststrdes,
c.storagelocation AS storelocation, c.estimatedpriceindic,
b.purdocdate AS docdate, c.memo AS remark,
c.memo1 as remark1,j.createdby as proposerID,k.comments as
proposerDesc ,l.comments as createdBy,c.promotion,m.matbrand
,m.VOLUMEWEIGHT,c.purdocitemid,b.purdocheaderid,c.priConfiDate
FROM pursasl e,purdocitem c,purdocheader b,puroutstobillvoutyp
a,purvendormaster d,purgroup f,purgrouptrl g,purdoctype
h,purdoctypetrl i,purreq j,aduser k,aduser l,MMRGenMtl m
WHERE e.purdocno(+) = c.purdocno AND e.purdoclineno(+) =
c.purdoclineno AND e.client(+) = c.client
AND b.purchasingdocctg = 'F' AND b.ordtype = a.ordtype AND
b.purchasingdocctg = a.purdocctg AND b.client = a.client
AND c.purdocno = b.purdocno AND c.client = b.client AND NVL
(c.purdocdeletionindic, 'N') = 'N' AND c.client = :2
AND b.vendorno = d.vendorno AND b.client = d.client
AND b.purgrp = f.purgroup AND b.client = f.client AND
f.purgroupid = g.purgroupid(+) AND g.LANGUAGE(+) = :3
AND b.ordtype = h.purdoctype AND b.client = h.client AND
b.purchasingdocctg = h.purdocctg AND h.purdoctypeid =
i.purdoctypeid(+) AND i.LANGUAGE(+) = :3
AND c.purchasereqno = j.purchasereqno(+)
AND c.itemno = j.itemno(+) AND c.client = j.client(+) AND
j.createdby = k.NAME(+) AND j.client = k.client(+) AND
k.LANGUAGE(+) = :3
and b.client=l.client(+) and b.createdBy=l.NAME(+) AND
l.LANGUAGE(+) = :3 and c.client=m.client(+) and
c.mtlno=m.mtlno(+) ) a
GROUP BY PURORG, plant,purchasereqno,
itemno,
ordtype,
purdocno,
lastchangedon,
vendorno,
purdoclineno,
mtlno,
ordpriceunit,
netvalue,
description,
purgrp,
quantity,
price,
purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matb
rand,VOLUMEWEIGHT,purstockbillid,purdocitemid,purdocheaderid,priC
onfiDate) d) e
Bind Variables :
2 - (VARCHAR2(32)):800
3 - (VARCHAR2(32)):zh_CN
4 - (VARCHAR2(32)):zh_CN
5 - (VARCHAR2(32)):zh_CN
6 - (VARCHAR2(32)):zh_CN
8 - (VARCHAR2(32)):800
9 - (VARCHAR2(32)):zh_CN
10 - (VARCHAR2(32)):zh_CN
11 - (VARCHAR2(32)):zh_CN
12 - (VARCHAR2(32)):zh_CN
--------
进行一下修改
BEGIN
DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER(task_name => 'tunning_task_7ysgr9qfhfgtr', parameter => 'TIME_LIMIT', value => 7200);
END;
/
SET LONG 10000
SET LONGCHUNKSIZE 1000
SET LINESIZE 100
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tunning_task_7ysgr9qfhfgtr') FROM DUAL;
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tunning_task_7ysgr9qfhfgtr') FROM DUAL;
DBMS_SQLTUNE.REPORT_TUNING_TASK('TUNNING_TASK_7YSGR9QFHFGTR')
----------------------------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name : tunning_task_7ysgr9qfhfgtr
Tuning Task Owner : SYS
Workload Type : Single SQL Statement
Execution Count : 2
Current Execution : EXEC_15012
Execution Type : TUNE SQL
Scope : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status : INTERRUPTED
Started at : 02/16/2017 13:45:43
Completed at : 02/16/2017 13:46:47
-------------------------------------------------------------------------------
Schema Name: JC800
SQL ID : 7ysgr9qfhfgtr
SQL Text : INSERT INTO di_te_purstockbill
(PURORG, plant,purchasereqno, itemno, purstockbillid,
ordtype, client, purdocno,
createddate, vendorno, purdocitemno, mtlno, ordpriceunit,
netvalue, vendordesc, purgrp, itemdeliverydate, quantity,
price,purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic
,docdate,remark,remark1,proposerID,proposerDesc
,createdby,promotion,matbrand,VOLUMEWEIGHT,purdocitemid,purdochea
derid,priConfiDate,di_opertype)
SELECT *
FROM (SELECT d.*, 'U'
FROM (SELECT PURORG, plant,purchasereqno, itemno,
purstockbillid,
ordtype,min( :1), purdocno, lastchangedon,
vendorno, purdoclineno, mtlno, ordpriceunit,
netvalue, description, purgrp,
MIN (itemdeliverydate), quantity,
price,purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,
docdate,remark,remark1,proposerID,proposerDesc,createdby
,promotion,matbrand,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priC
onfiDate
FROM (SELECT b.PURORG, c.plant,c.purchasereqno, c.itemno,
c.purdocitemid as purstockbillid,
b.ordtype, b.purdocno, b.lastchangedon, b.vendorno,
c.purdoclineno, c.mtlno, c.ordpriceunit, c.netvalue,
d.description,
b.purgrp, e.itemdeliverydate, c.quantity,
TRUNC (TO_NUMBER (NVL2 (c.estimatedpriceindic,DECODE
(c.priceunit,0, NULL,NULL, NULL,(c.netprice /
c.priceunit)),NULL)), 6) price,
g.description AS purgrpdesc, i.description AS buyliststrdes,
c.storagelocation AS storelocation, c.estimatedpriceindic,
b.purdocdate AS docdate, c.memo AS remark,
c.memo1 as remark1,j.createdby as proposerID,k.comments as
proposerDesc ,l.comments as createdBy,c.promotion,m.matbrand
,m.VOLUMEWEIGHT,c.purdocitemid,b.purdocheaderid,c.priConfiDate
FROM pursasl e,purdocitem c,purdocheader b,puroutstobillvoutyp
a,purvendormaster d,purgroup f,purgrouptrl g,purdoctype
h,purdoctypetrl i,purreq j,aduser k,aduser l,MMRGenMtl m
WHERE e.purdocno(+) = c.purdocno AND e.purdoclineno(+) =
c.purdoclineno AND e.client(+) = c.client
AND b.purchasingdocctg = 'F' AND b.ordtype = a.ordtype AND
b.purchasingdocctg = a.purdocctg AND b.client = a.client
AND c.purdocno = b.purdocno AND c.client = b.client AND NVL
(c.purdocdeletionindic, 'N') = 'N' AND c.client = :2
AND b.vendorno = d.vendorno AND b.client = d.client
AND b.purgrp = f.purgroup AND b.client = f.client AND
f.purgroupid = g.purgroupid(+) AND g.LANGUAGE(+) = :3
AND b.ordtype = h.purdoctype AND b.client = h.client AND
TRUNC (TO_NUMBER (NVL2 (c.estimatedpriceindic,DECODE
(c.priceunit,0, NULL,NULL, NULL,(c.netprice /
c.priceunit)),NULL)), 6) price,
g.description AS purgrpdesc, i.description AS buyliststrdes,
c.storagelocation AS storelocation, c.estimatedpriceindic,
b.purdocdate AS docdate, c.memo AS remark,
c.memo1 as remark1,j.createdby as proposerID,k.comments as
proposerDesc ,l.comments as createdBy,c.promotion,m.matbrand
,m.VOLUMEWEIGHT,c.purdocitemid,b.purdocheaderid,c.priConfiDate
FROM pursasl e,purdocitem c,purdocheader b,puroutstobillvoutyp
a,purvendormaster d,purgroup f,purgrouptrl g,purdoctype
h,purdoctypetrl i,purreq j,aduser k,aduser l,MMRGenMtl m
WHERE e.purdocno(+) = c.purdocno AND e.purdoclineno(+) =
c.purdoclineno AND e.client(+) = c.client
AND b.purchasingdocctg = 'F' AND b.ordtype = a.ordtype AND
b.purchasingdocctg = a.purdocctg AND b.client = a.client
AND c.purdocno = b.purdocno AND c.client = b.client AND NVL
(c.purdocdeletionindic, 'N') = 'N' AND c.client = :2
AND b.vendorno = d.vendorno AND b.client = d.client
AND b.purgrp = f.purgroup AND b.client = f.client AND
f.purgroupid = g.purgroupid(+) AND g.LANGUAGE(+) = :3
AND b.ordtype = h.purdoctype AND b.client = h.client AND
b.purchasingdocctg = h.purdocctg AND h.purdoctypeid =
i.purdoctypeid(+) AND i.LANGUAGE(+) = :3
AND c.purchasereqno = j.purchasereqno(+)
AND c.itemno = j.itemno(+) AND c.client = j.client(+) AND
j.createdby = k.NAME(+) AND j.client = k.client(+) AND
k.LANGUAGE(+) = :3
and b.client=l.client(+) and b.createdBy=l.NAME(+) AND
l.LANGUAGE(+) = :3 and c.client=m.client(+) and
c.mtlno=m.mtlno(+) ) a
GROUP BY PURORG, plant,purchasereqno,
itemno,
ordtype,
purdocno,
lastchangedon,
vendorno,
purdoclineno,
mtlno,
ordpriceunit,
netvalue,
description,
purgrp,
quantity,
price,
purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matb
rand,VOLUMEWEIGHT,purstockbillid,purdocitemid,purdocheaderid,priC
onfiDate
MINUS
SELECT PURORG, plant,purchasereqno, itemno, purstockbillid,
ordtype, client, purdocno, createddate,
vendorno, purdocitemno, mtlno, ordpriceunit,
netvalue, vendordesc, purgrp,
itemdeliverydate, quantity, price,
purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matb
rand ,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priConfiDate
FROM purstockbill
WHERE di_opertype <> 'D') d
UNION
SELECT d.*, 'D'
FROM (SELECT PURORG, plant,purchasereqno, itemno,
purstockbillid,
ordtype, client, purdocno, createddate,
vendorno, purdocitemno, mtlno, ordpriceunit,
netvalue, vendordesc, purgrp,
itemdeliverydate, quantity, price,
purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matb
rand,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priConfiDate
FROM purstockbill
WHERE di_opertype <> 'D'
MINUS
SELECT PURORG, plant,purchasereqno, itemno, purstockbillid,
ordtype,min( :1), purdocno, lastchangedon,
vendorno, purdoclineno, mtlno, ordpriceunit,
netvalue, description, purgrp,
MIN (itemdeliverydate), quantity,
price,purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,
docdate,remark,remark1,proposerID,proposerDesc,createdby,promotio
n,matbrand,VOLUMEWEIGHT,purdocitemid,purdocheaderid,priConfiDate
FROM (SELECT b.PURORG, c.plant,c.purchasereqno, c.itemno,
c.purdocitemid as purstockbillid,
b.ordtype, b.purdocno, b.lastchangedon, b.vendorno,
c.purdoclineno, c.mtlno, c.ordpriceunit, c.netvalue,
d.description,
b.purgrp, e.itemdeliverydate, c.quantity,
TRUNC (TO_NUMBER (NVL2 (c.estimatedpriceindic,DECODE
(c.priceunit,0, NULL,NULL, NULL,(c.netprice /
c.priceunit)),NULL)), 6) price,
g.description AS purgrpdesc, i.description AS buyliststrdes,
c.storagelocation AS storelocation, c.estimatedpriceindic,
b.purdocdate AS docdate, c.memo AS remark,
c.memo1 as remark1,j.createdby as proposerID,k.comments as
proposerDesc ,l.comments as createdBy,c.promotion,m.matbrand
,m.VOLUMEWEIGHT,c.purdocitemid,b.purdocheaderid,c.priConfiDate
FROM pursasl e,purdocitem c,purdocheader b,puroutstobillvoutyp
a,purvendormaster d,purgroup f,purgrouptrl g,purdoctype
h,purdoctypetrl i,purreq j,aduser k,aduser l,MMRGenMtl m
WHERE e.purdocno(+) = c.purdocno AND e.purdoclineno(+) =
c.purdoclineno AND e.client(+) = c.client
AND b.purchasingdocctg = 'F' AND b.ordtype = a.ordtype AND
b.purchasingdocctg = a.purdocctg AND b.client = a.client
AND c.purdocno = b.purdocno AND c.client = b.client AND NVL
(c.purdocdeletionindic, 'N') = 'N' AND c.client = :2
AND b.vendorno = d.vendorno AND b.client = d.client
AND b.purgrp = f.purgroup AND b.client = f.client AND
f.purgroupid = g.purgroupid(+) AND g.LANGUAGE(+) = :3
AND b.ordtype = h.purdoctype AND b.client = h.client AND
b.purchasingdocctg = h.purdocctg AND h.purdoctypeid =
i.purdoctypeid(+) AND i.LANGUAGE(+) = :3
AND c.purchasereqno = j.purchasereqno(+)
AND c.itemno = j.itemno(+) AND c.client = j.client(+) AND
j.createdby = k.NAME(+) AND j.client = k.client(+) AND
k.LANGUAGE(+) = :3
and b.client=l.client(+) and b.createdBy=l.NAME(+) AND
l.LANGUAGE(+) = :3 and c.client=m.client(+) and
c.mtlno=m.mtlno(+) ) a
GROUP BY PURORG, plant,purchasereqno,
itemno,
ordtype,
purdocno,
lastchangedon,
vendorno,
purdoclineno,
mtlno,
ordpriceunit,
netvalue,
description,
purgrp,
quantity,
price,
purgrpdesc,buyliststrdes,storelocation,estimatedpriceindic,docdat
e,remark,remark1,proposerID,proposerDesc,createdby,promotion,matb
rand,VOLUMEWEIGHT,purstockbillid,purdocitemid,purdocheaderid,priC
onfiDate) d) e
Bind Variables :
2 - (VARCHAR2(32)):800
3 - (VARCHAR2(32)):zh_CN
4 - (VARCHAR2(32)):zh_CN
5 - (VARCHAR2(32)):zh_CN
6 - (VARCHAR2(32)):zh_CN
8 - (VARCHAR2(32)):800
9 - (VARCHAR2(32)):zh_CN
10 - (VARCHAR2(32)):zh_CN
11 - (VARCHAR2(32)):zh_CN
12 - (VARCHAR2(32)):zh_CN
-------------------------------------------------------------------------------
FINDINGS SECTION (3 findings)
-------------------------------------------------------------------------------
1- Statistics Finding
---------------------
尚未分析表 "JC800"."DI_TE_PURSTOCKBILL"。
Recommendation
--------------
- 考虑收集此表的优化程序统计信息。
execute dbms_stats.gather_table_stats(ownname => 'JC800', tabname =>
'DI_TE_PURSTOCKBILL', estimate_percent =>
DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE
AUTO');
Rationale
---------
为了选择好的执行计划, 优化程序需要此表的最新统计信息。
2- SQL Profile Finding (see explain plans section below)
--------------------------------------------------------
为此语句找到了性能更好的执行计划。
Recommendation (estimated benefit: 69.38%)
------------------------------------------
- 考虑接受推荐的 SQL 概要文件。
execute dbms_sqltune.accept_sql_profile(task_name =>
'tunning_task_7ysgr9qfhfgtr', task_owner => 'SYS', replace =>
TRUE);
Validation results
------------------
已对 SQL profile 进行测试, 方法为执行其计划和原始计划并测量与计划相对应的执行统计信息。如果其中一个计划运行在很短的时间内就完成,
则另一计划可能只执行了一部分。
Original Plan With SQL Profile % Improved
------------- ---------------- ----------
Completion Status: COMPLETE COMPLETE
Elapsed Time (s): 11.062221 2.410428 78.21 %
CPU Time (s): 10.982331 2.251658 79.49 %
User I/O Time (s): .002798 .144937 -5080.02 %
Buffer Gets: 792505 242773 69.36 %
Physical Read Requests: 0 75
Physical Write Requests: 0 0
Physical Read Bytes: 0 614400
Physical Write Bytes: 0 0
Rows Processed: 13296 13296
Fetches: 13296 13296
Executions: 1 1
3- Restructure SQL finding (see plan 1 in explain plans section)
----------------------------------------------------------------
在执行计划的行 ID 3 处发现开销很大的 "UNION" 操作。
Recommendation
--------------
- 如果允许重复或可以保证唯一性, 则考虑用 "UNION ALL" 代替 "UNION"。
-------------------------------------------------------------------------------
ADDITIONAL INFORMATION SECTION
-------------------------------------------------------------------------------
- 优化程序不能合并位于执行计划的行 ID 45 处的视图。. 优化程序不能合并包含设置运算符的视图。.
- 优化程序不能合并位于执行计划的行 ID 5 处的视图。. 优化程序不能合并包含设置运算符的视图。.
- 优化程序不能合并位于执行计划的行 ID 2 处的视图。. 优化程序不能合并包含设置运算符的视图。.
-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------
1- Original With Adjusted Cost
------------------------------
Plan hash value: 3278049608
-----------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 168K| 164M| | 685K (1)| 02:17:09 |
| 1 | LOAD TABLE CONVENTIONAL | DI_TE_PURSTOCKBILL | | | | | |
| 2 | VIEW | | 168K| 164M| | 685K (1)| 02:17:09 |
| 3 | SORT UNIQUE | | 168K| 163M| 187M| 685K (48)| 02:17:09 |
| 4 | UNION-ALL | | | | | | |
| 5 | VIEW | | 161K| 157M| | 324K (1)| 01:04:59 |
| 6 | MINUS | | | | | | |
| 7 | SORT UNIQUE | | 161K| 83M| 90M| | |
| 8 | SORT GROUP BY | | 161K| 83M| 90M| 324K (1)| 01:04:53 |
|* 9 | HASH JOIN RIGHT OUTER | | 161K| 83M| | 287K (1)| 00:57:31 |
|* 10 | TABLE ACCESS FULL | ADUSER | 4111 | 132K| | 33 (0)| 00:00:01 |
| 11 | NESTED LOOPS OUTER | | 161K| 78M| | 287K (1)| 00:57:30 |
|* 12 | HASH JOIN RIGHT OUTER | | 161K| 73M| 24M| 273K (1)| 00:54:38 |
|* 13 | TABLE ACCESS FULL | MMRGENMTL | 195K| 22M| | 3555 (2)| 00:00:43 |
|* 14 | HASH JOIN OUTER | | 160K| 54M| 51M| 265K (1)| 00:53:07 |
| 15 | NESTED LOOPS | | | | | | |
| 16 | NESTED LOOPS | | 160K| 50M| | 159K (1)| 00:31:55 |
|* 17 | HASH JOIN RIGHT OUTER | | 45931 | 10M| | 21642 (1)| 00:04:20 |
|* 18 | TABLE ACCESS FULL | ADUSER | 4110 | 132K| | 33 (0)| 00:00:01 |
|* 19 | HASH JOIN | | 45931 | 9464K| | 21608 (1)| 00:04:20 |
|* 20 | TABLE ACCESS FULL | PURVENDORMASTER | 4241 | 211K| | 29 (0)| 00:00:01 |
|* 21 | HASH JOIN RIGHT OUTER | | 53926 | 8425K| | 21578 (1)| 00:04:19 |
|* 22 | TABLE ACCESS FULL | PURGROUPTRL | 249 | 6723 | | 4 (0)| 00:00:01 |
|* 23 | HASH JOIN | | 53926 | 7004K| | 21573 (1)| 00:04:19 |
| 24 | VIEW | index$_join$_010 | 249 | 3237 | | 3 (34)| 00:00:01 |
|* 25 | HASH JOIN | | | | | | |
|* 26 | INDEX FAST FULL SCAN | PURGROUP_U | 249 | 3237 | | 1 (0)| 00:00:01 |
| 27 | INDEX FAST FULL SCAN | SYS_C0023218 | 249 | 3237 | | 1 (0)| 00:00:01 |
|* 28 | HASH JOIN | | 54036 | 6332K| | 21570 (1)| 00:04:19 |
|* 29 | INDEX RANGE SCAN | PUROUTSTOBILLVOUTYP_U | 2 | 14 | | 1 (0)| 00:00:01 |
|* 30 | HASH JOIN | | 648K| 69M| | 21565 (1)| 00:04:19 |
|* 31 | HASH JOIN OUTER | | 21 | 1029 | | 7 (15)| 00:00:01 |
| 32 | VIEW | index$_join$_012 | 21 | 315 | | 3 (34)| 00:00:01 |
|* 33 | HASH JOIN | | | | | | |
|* 34 | INDEX FAST FULL SCAN| PURDOCTYPE_U | 21 | 315 | | 1 (0)| 00:00:01 |
| 35 | INDEX FAST FULL SCAN| SYS_C0023208 | 21 | 315 | | 1 (0)| 00:00:01 |
|* 36 | TABLE ACCESS FULL | PURDOCTYPETRL | 47 | 1598 | | 4 (0)| 00:00:01 |
|* 37 | TABLE ACCESS FULL | PURDOCHEADER | 2490K| 152M| | 21546 (1)| 00:04:19 |
|* 38 | INDEX RANGE SCAN | PURDOCITEM_U | 4 | | | 2 (0)| 00:00:01 |
|* 39 | TABLE ACCESS BY INDEX ROWID | PURDOCITEM | 3 | 249 | | 3 (0)| 00:00:01 |
|* 40 | TABLE ACCESS FULL | PURSASL | 12M| 359M| | 78167 (1)| 00:15:39 |
| 41 | TABLE ACCESS BY INDEX ROWID | PURREQ | 1 | 30 | | 2 (0)| 00:00:01 |
|* 42 | INDEX UNIQUE SCAN | PURREQ_U | 1 | | | 1 (0)| 00:00:01 |
| 43 | SORT UNIQUE | | 6629 | 1728K| 2320K| | |
|* 44 | TABLE ACCESS FULL | PURSTOCKBILL | 6629 | 1728K| | 88 (0)| 00:00:02 |
| 45 | VIEW | | 6629 | 6603K| | 324K (1)| 01:04:59 |
| 46 | MINUS | | | | | | |
| 47 | SORT UNIQUE | | 6629 | 1728K| 2320K| | |
|* 48 | TABLE ACCESS FULL | PURSTOCKBILL | 6629 | 1728K| | 88 (0)| 00:00:02 |
| 49 | SORT UNIQUE | | 161K| 83M| 90M| | |
| 50 | SORT GROUP BY | | 161K| 83M| 90M| 324K (1)| 01:04:53 |
|* 51 | HASH JOIN RIGHT OUTER | | 161K| 83M| | 287K (1)| 00:57:31 |
|* 52 | TABLE ACCESS FULL | ADUSER | 4111 | 132K| | 33 (0)| 00:00:01 |
| 53 | NESTED LOOPS OUTER | | 161K| 78M| | 287K (1)| 00:57:30 |
|* 54 | HASH JOIN RIGHT OUTER | | 161K| 73M| 24M| 273K (1)| 00:54:38 |
|* 55 | TABLE ACCESS FULL | MMRGENMTL | 195K| 22M| | 3555 (2)| 00:00:43 |
|* 56 | HASH JOIN OUTER | | 160K| 54M| 51M| 265K (1)| 00:53:07 |
| 57 | NESTED LOOPS | | | | | | |
| 58 | NESTED LOOPS | | 160K| 50M| | 159K (1)| 00:31:55 |
|* 59 | HASH JOIN RIGHT OUTER | | 45931 | 10M| | 21642 (1)| 00:04:20 |
|* 60 | TABLE ACCESS FULL | ADUSER | 4110 | 132K| | 33 (0)| 00:00:01 |
|* 61 | HASH JOIN | | 45931 | 9464K| | 21608 (1)| 00:04:20 |
|* 62 | TABLE ACCESS FULL | PURVENDORMASTER | 4241 | 211K| | 29 (0)| 00:00:01 |
|* 63 | HASH JOIN RIGHT OUTER | | 53926 | 8425K| | 21578 (1)| 00:04:19 |
|* 64 | TABLE ACCESS FULL | PURGROUPTRL | 249 | 6723 | | 4 (0)| 00:00:01 |
|* 65 | HASH JOIN | | 53926 | 7004K| | 21573 (1)| 00:04:19 |
| 66 | VIEW | index$_join$_027 | 249 | 3237 | | 3 (34)| 00:00:01 |
|* 67 | HASH JOIN | | | | | | |
|* 68 | INDEX FAST FULL SCAN | PURGROUP_U | 249 | 3237 | | 1 (0)| 00:00:01 |
| 69 | INDEX FAST FULL SCAN | SYS_C0023218 | 249 | 3237 | | 1 (0)| 00:00:01 |
|* 70 | HASH JOIN | | 54036 | 6332K| | 21570 (1)| 00:04:19 |
|* 71 | INDEX RANGE SCAN | PUROUTSTOBILLVOUTYP_U | 2 | 14 | | 1 (0)| 00:00:01 |
|* 72 | HASH JOIN | | 648K| 69M| | 21565 (1)| 00:04:19 |
|* 73 | HASH JOIN OUTER | | 21 | 1029 | | 7 (15)| 00:00:01 |
| 74 | VIEW | index$_join$_029 | 21 | 315 | | 3 (34)| 00:00:01 |
|* 75 | HASH JOIN | | | | | | |
|* 76 | INDEX FAST FULL SCAN| PURDOCTYPE_U | 21 | 315 | | 1 (0)| 00:00:01 |
| 77 | INDEX FAST FULL SCAN| SYS_C0023208 | 21 | 315 | | 1 (0)| 00:00:01 |
|* 78 | TABLE ACCESS FULL | PURDOCTYPETRL | 47 | 1598 | | 4 (0)| 00:00:01 |
|* 79 | TABLE ACCESS FULL | PURDOCHEADER | 2490K| 152M| | 21546 (1)| 00:04:19 |
|* 80 | INDEX RANGE SCAN | PURDOCITEM_U | 4 | | | 2 (0)| 00:00:01 |
|* 81 | TABLE ACCESS BY INDEX ROWID | PURDOCITEM | 3 | 249 | | 3 (0)| 00:00:01 |
|* 82 | TABLE ACCESS FULL | PURSASL | 12M| 359M| | 78167 (1)| 00:15:39 |
| 83 | TABLE ACCESS BY INDEX ROWID | PURREQ | 1 | 30 | | 2 (0)| 00:00:01 |
|* 84 | INDEX UNIQUE SCAN | PURREQ_U | 1 | | | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
9 - access("J"."CREATEDBY"="K"."NAME"(+) AND "J"."CLIENT"="K"."CLIENT"(+))
10 - filter("K"."LANGUAGE"(+)=:3)
12 - access("C"."CLIENT"="M"."CLIENT"(+) AND "C"."MTLNO"="M"."MTLNO"(+))
13 - filter("M"."CLIENT"(+)=:2)
14 - access("E"."PURDOCNO"(+)="C"."PURDOCNO" AND "E"."PURDOCLINENO"(+)="C"."PURDOCLINENO" AND
"E"."CLIENT"(+)="C"."CLIENT")
17 - access("B"."CLIENT"="L"."CLIENT"(+) AND "B"."CREATEDBY"="L"."NAME"(+))
18 - filter("L"."LANGUAGE"(+)=:3 AND "L"."CLIENT"(+)=:2)
19 - access("B"."VENDORNO"="D"."VENDORNO" AND "B"."CLIENT"="D"."CLIENT")
20 - filter("D"."CLIENT"=:2)
21 - access("F"."PURGROUPID"="G"."PURGROUPID"(+))
22 - filter("G"."LANGUAGE"(+)=:3)
23 - access("B"."PURGRP"="F"."PURGROUP" AND "B"."CLIENT"="F"."CLIENT")
25 - access(ROWID=ROWID)
26 - filter("F"."CLIENT"=:2)
28 - access("B"."ORDTYPE"="A"."ORDTYPE" AND "B"."PURCHASINGDOCCTG"="A"."PURDOCCTG" AND "B"."CLIENT"="A"."CLIENT")
29 - access("A"."CLIENT"=:2 AND "A"."PURDOCCTG"='F')
30 - access("B"."ORDTYPE"="H"."PURDOCTYPE" AND "B"."CLIENT"="H"."CLIENT" AND
"B"."PURCHASINGDOCCTG"="H"."PURDOCCTG")
31 - access("H"."PURDOCTYPEID"="I"."PURDOCTYPEID"(+))
33 - access(ROWID=ROWID)
34 - filter("H"."CLIENT"=:2 AND "H"."PURDOCCTG"='F')
36 - filter("I"."LANGUAGE"(+)=:3)
37 - filter("B"."PURCHASINGDOCCTG"='F' AND "B"."CLIENT"=:2)
38 - access("C"."PURDOCNO"="B"."PURDOCNO" AND "C"."CLIENT"=:2)
filter("C"."CLIENT"=:2)
39 - filter(NVL("C"."PURDOCDELETIONINDIC",'N')='N')
40 - filter("E"."CLIENT"(+)=:2)
42 - access("C"."PURCHASEREQNO"="J"."PURCHASEREQNO"(+) AND "C"."ITEMNO"="J"."ITEMNO"(+) AND "J"."CLIENT"(+)=:2)
44 - filter("DI_OPERTYPE"<>'D')
48 - filter("DI_OPERTYPE"<>'D')
51 - access("J"."CREATEDBY"="K"."NAME"(+) AND "J"."CLIENT"="K"."CLIENT"(+))
52 - filter("K"."LANGUAGE"(+)=:3)
54 - access("C"."CLIENT"="M"."CLIENT"(+) AND "C"."MTLNO"="M"."MTLNO"(+))
55 - filter("M"."CLIENT"(+)=:2)
56 - access("E"."PURDOCNO"(+)="C"."PURDOCNO" AND "E"."PURDOCLINENO"(+)="C"."PURDOCLINENO" AND
"E"."CLIENT"(+)="C"."CLIENT")
59 - access("B"."CLIENT"="L"."CLIENT"(+) AND "B"."CREATEDBY"="L"."NAME"(+))
60 - filter("L"."LANGUAGE"(+)=:3 AND "L"."CLIENT"(+)=:2)
61 - access("B"."VENDORNO"="D"."VENDORNO" AND "B"."CLIENT"="D"."CLIENT")
62 - filter("D"."CLIENT"=:2)
63 - access("F"."PURGROUPID"="G"."PURGROUPID"(+))
64 - filter("G"."LANGUAGE"(+)=:3)
65 - access("B"."PURGRP"="F"."PURGROUP" AND "B"."CLIENT"="F"."CLIENT")
67 - access(ROWID=ROWID)
68 - filter("F"."CLIENT"=:2)
70 - access("B"."ORDTYPE"="A"."ORDTYPE" AND "B"."PURCHASINGDOCCTG"="A"."PURDOCCTG" AND "B"."CLIENT"="A"."CLIENT")
71 - access("A"."CLIENT"=:2 AND "A"."PURDOCCTG"='F')
72 - access("B"."ORDTYPE"="H"."PURDOCTYPE" AND "B"."CLIENT"="H"."CLIENT" AND
"B"."PURCHASINGDOCCTG"="H"."PURDOCCTG")
73 - access("H"."PURDOCTYPEID"="I"."PURDOCTYPEID"(+))
75 - access(ROWID=ROWID)
76 - filter("H"."CLIENT"=:2 AND "H"."PURDOCCTG"='F')
78 - filter("I"."LANGUAGE"(+)=:3)
79 - filter("B"."PURCHASINGDOCCTG"='F' AND "B"."CLIENT"=:2)
80 - access("C"."PURDOCNO"="B"."PURDOCNO" AND "C"."CLIENT"=:2)
filter("C"."CLIENT"=:2)
81 - filter(NVL("C"."PURDOCDELETIONINDIC",'N')='N')
82 - filter("E"."CLIENT"(+)=:2)
84 - access("C"."PURCHASEREQNO"="J"."PURCHASEREQNO"(+) AND "C"."ITEMNO"="J"."ITEMNO"(+) AND "J"."CLIENT"(+)=:2)
2- Using SQL Profile
--------------------
Plan hash value: 3522574749
---------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 9913 | 9903K| | 79784 (1)| 00:15:58 |
| 1 | LOAD TABLE CONVENTIONAL | DI_TE_PURSTOCKBILL | | | | | |
| 2 | VIEW | | 9913 | 9903K| | 79784 (1)| 00:15:58 |
| 3 | SORT UNIQUE | | 9913 | 9874K| 11M| 79784 (51)| 00:15:58 |
| 4 | UNION-ALL | | | | | | |
| 5 | VIEW | | 3284 | 3271K| | 38828 (1)| 00:07:46 |
| 6 | MINUS | | | | | | |
| 7 | SORT UNIQUE | | 3284 | 1731K| 1888K| | |
| 8 | SORT GROUP BY | | 3284 | 1731K| 1888K| 38355 (1)| 00:07:41 |
|* 9 | HASH JOIN OUTER | | 3284 | 1731K| | 37599 (1)| 00:07:32 |
| 10 | NESTED LOOPS OUTER | | 3265 | 1335K| | 34042 (1)| 00:06:49 |
|* 11 | HASH JOIN RIGHT OUTER | | 3265 | 1243K| | 24768 (1)| 00:04:58 |
|* 12 | TABLE ACCESS FULL | ADUSER | 4111 | 132K| | 33 (0)| 00:00:01 |
| 13 | NESTED LOOPS OUTER | | 3265 | 1138K| | 24734 (1)| 00:04:57 |
| 14 | NESTED LOOPS | | 3265 | 1042K| | 24442 (1)| 00:04:54 |
|* 15 | HASH JOIN | | 934 | 222K| | 21638 (1)| 00:04:20 |
|* 16 | HASH JOIN RIGHT OUTER | | 1097 | 206K| | 21608 (1)| 00:04:20 |
|* 17 | TABLE ACCESS FULL | PURGROUPTRL | 249 | 6723 | | 4 (0)| 00:00:01 |
|* 18 | HASH JOIN OUTER | | 1097 | 177K| | 21603 (1)| 00:04:20 |
|* 19 | HASH JOIN | | 1097 | 142K| | 21570 (1)| 00:04:19 |
| 20 | VIEW | index$_join$_010 | 249 | 3237 | | 3 (34)| 00:00:01 |
|* 21 | HASH JOIN | | | | | | |
|* 22 | INDEX FAST FULL SCAN | PURGROUP_U | 249 | 3237 | | 1 (0)| 00:00:01 |
| 23 | INDEX FAST FULL SCAN | SYS_C0023218 | 249 | 3237 | | 1 (0)| 00:00:01 |
|* 24 | HASH JOIN RIGHT OUTER | | 1099 | 128K| | 21567 (1)| 00:04:19 |
|* 25 | TABLE ACCESS FULL | PURDOCTYPETRL | 47 | 1598 | | 4 (0)| 00:00:01 |
|* 26 | HASH JOIN | | 1099 | 94514 | | 21562 (1)| 00:04:19 |
| 27 | VIEW | index$_join$_012 | 21 | 315 | | 3 (34)| 00:00:01 |
|* 28 | HASH JOIN | | | | | | |
|* 29 | INDEX FAST FULL SCAN| PURDOCTYPE_U | 21 | 315 | | 1 (0)| 00:00:01 |
| 30 | INDEX FAST FULL SCAN| SYS_C0023208 | 21 | 315 | | 1 (0)| 00:00:01 |
|* 31 | HASH JOIN | | 1577 | 109K| | 21559 (1)| 00:04:19 |
|* 32 | INDEX RANGE SCAN | PUROUTSTOBILLVOUTYP_U | 2 | 14 | | 1 (0)| 00:00:01 |
|* 33 | TABLE ACCESS FULL | PURDOCHEADER | 2490K| 152M| | 21546 (1)| 00:04:19 |
|* 34 | TABLE ACCESS FULL | ADUSER | 4110 | 132K| | 33 (0)| 00:00:01 |
|* 35 | TABLE ACCESS FULL | PURVENDORMASTER | 4241 | 211K| | 29 (0)| 00:00:01 |
|* 36 | TABLE ACCESS BY INDEX ROWID | PURDOCITEM | 3 | 249 | | 3 (0)| 00:00:01 |
|* 37 | INDEX RANGE SCAN | PURDOCITEM_U | 4 | | | 2 (0)| 00:00:01 |
| 38 | TABLE ACCESS BY INDEX ROWID | PURREQ | 1 | 30 | | 2 (0)| 00:00:01 |
|* 39 | INDEX UNIQUE SCAN | PURREQ_U | 1 | | | 1 (0)| 00:00:01 |
| 40 | TABLE ACCESS BY INDEX ROWID | PURSASL | 1 | 29 | | 3 (0)| 00:00:01 |
|* 41 | INDEX RANGE SCAN | PURSASL_U | 1 | | | 2 (0)| 00:00:01 |
|* 42 | TABLE ACCESS FULL | MMRGENMTL | 195K| 22M| | 3555 (2)| 00:00:43 |
| 43 | SORT UNIQUE | | 6629 | 1728K| 2320K| | |
|* 44 | TABLE ACCESS FULL | PURSTOCKBILL | 6629 | 1728K| | 88 (0)| 00:00:02 |
| 45 | VIEW | | 6629 | 6603K| | 38828 (1)| 00:07:46 |
| 46 | MINUS | | | | | | |
| 47 | SORT UNIQUE | | 6629 | 1728K| 2320K| | |
|* 48 | TABLE ACCESS FULL | PURSTOCKBILL | 6629 | 1728K| | 88 (0)| 00:00:02 |
| 49 | SORT UNIQUE | | 3284 | 1731K| 1888K| | |
| 50 | SORT GROUP BY | | 3284 | 1731K| 1888K| 38355 (1)| 00:07:41 |
|* 51 | HASH JOIN OUTER | | 3284 | 1731K| | 37599 (1)| 00:07:32 |
| 52 | NESTED LOOPS OUTER | | 3265 | 1335K| | 34042 (1)| 00:06:49 |
|* 53 | HASH JOIN RIGHT OUTER | | 3265 | 1243K| | 24768 (1)| 00:04:58 |
|* 54 | TABLE ACCESS FULL | ADUSER | 4111 | 132K| | 33 (0)| 00:00:01 |
| 55 | NESTED LOOPS OUTER | | 3265 | 1138K| | 24734 (1)| 00:04:57 |
| 56 | NESTED LOOPS | | 3265 | 1042K| | 24442 (1)| 00:04:54 |
|* 57 | HASH JOIN | | 934 | 222K| | 21638 (1)| 00:04:20 |
|* 58 | HASH JOIN RIGHT OUTER | | 1097 | 206K| | 21608 (1)| 00:04:20 |
|* 59 | TABLE ACCESS FULL | PURGROUPTRL | 249 | 6723 | | 4 (0)| 00:00:01 |
|* 60 | HASH JOIN OUTER | | 1097 | 177K| | 21603 (1)| 00:04:20 |
|* 61 | HASH JOIN | | 1097 | 142K| | 21570 (1)| 00:04:19 |
| 62 | VIEW | index$_join$_027 | 249 | 3237 | | 3 (34)| 00:00:01 |
|* 63 | HASH JOIN | | | | | | |
|* 64 | INDEX FAST FULL SCAN | PURGROUP_U | 249 | 3237 | | 1 (0)| 00:00:01 |
| 65 | INDEX FAST FULL SCAN | SYS_C0023218 | 249 | 3237 | | 1 (0)| 00:00:01 |
|* 66 | HASH JOIN RIGHT OUTER | | 1099 | 128K| | 21567 (1)| 00:04:19 |
|* 67 | TABLE ACCESS FULL | PURDOCTYPETRL | 47 | 1598 | | 4 (0)| 00:00:01 |
|* 68 | HASH JOIN | | 1099 | 94514 | | 21562 (1)| 00:04:19 |
| 69 | VIEW | index$_join$_029 | 21 | 315 | | 3 (34)| 00:00:01 |
|* 70 | HASH JOIN | | | | | | |
|* 71 | INDEX FAST FULL SCAN| PURDOCTYPE_U | 21 | 315 | | 1 (0)| 00:00:01 |
| 72 | INDEX FAST FULL SCAN| SYS_C0023208 | 21 | 315 | | 1 (0)| 00:00:01 |
|* 73 | HASH JOIN | | 1577 | 109K| | 21559 (1)| 00:04:19 |
|* 74 | INDEX RANGE SCAN | PUROUTSTOBILLVOUTYP_U | 2 | 14 | | 1 (0)| 00:00:01 |
|* 75 | TABLE ACCESS FULL | PURDOCHEADER | 2490K| 152M| | 21546 (1)| 00:04:19 |
|* 76 | TABLE ACCESS FULL | ADUSER | 4110 | 132K| | 33 (0)| 00:00:01 |
|* 77 | TABLE ACCESS FULL | PURVENDORMASTER | 4241 | 211K| | 29 (0)| 00:00:01 |
|* 78 | TABLE ACCESS BY INDEX ROWID | PURDOCITEM | 3 | 249 | | 3 (0)| 00:00:01 |
|* 79 | INDEX RANGE SCAN | PURDOCITEM_U | 4 | | | 2 (0)| 00:00:01 |
| 80 | TABLE ACCESS BY INDEX ROWID | PURREQ | 1 | 30 | | 2 (0)| 00:00:01 |
|* 81 | INDEX UNIQUE SCAN | PURREQ_U | 1 | | | 1 (0)| 00:00:01 |
| 82 | TABLE ACCESS BY INDEX ROWID | PURSASL | 1 | 29 | | 3 (0)| 00:00:01 |
|* 83 | INDEX RANGE SCAN | PURSASL_U | 1 | | | 2 (0)| 00:00:01 |
|* 84 | TABLE ACCESS FULL | MMRGENMTL | 195K| 22M| | 3555 (2)| 00:00:43 |
---------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
9 - access("C"."CLIENT"="M"."CLIENT"(+) AND "C"."MTLNO"="M"."MTLNO"(+))
11 - access("J"."CREATEDBY"="K"."NAME"(+) AND "J"."CLIENT"="K"."CLIENT"(+))
12 - filter("K"."LANGUAGE"(+)=:3)
15 - access("B"."VENDORNO"="D"."VENDORNO" AND "B"."CLIENT"="D"."CLIENT")
16 - access("F"."PURGROUPID"="G"."PURGROUPID"(+))
17 - filter("G"."LANGUAGE"(+)=:3)
18 - access("B"."CLIENT"="L"."CLIENT"(+) AND "B"."CREATEDBY"="L"."NAME"(+))
19 - access("B"."PURGRP"="F"."PURGROUP" AND "B"."CLIENT"="F"."CLIENT")
21 - access(ROWID=ROWID)
22 - filter("F"."CLIENT"=:2)
24 - access("H"."PURDOCTYPEID"="I"."PURDOCTYPEID"(+))
25 - filter("I"."LANGUAGE"(+)=:3)
26 - access("B"."ORDTYPE"="H"."PURDOCTYPE" AND "B"."CLIENT"="H"."CLIENT" AND
"B"."PURCHASINGDOCCTG"="H"."PURDOCCTG")
28 - access(ROWID=ROWID)
29 - filter("H"."CLIENT"=:2 AND "H"."PURDOCCTG"='F')
31 - access("B"."ORDTYPE"="A"."ORDTYPE" AND "B"."PURCHASINGDOCCTG"="A"."PURDOCCTG" AND "B"."CLIENT"="A"."CLIENT")
32 - access("A"."CLIENT"=:2 AND "A"."PURDOCCTG"='F')
33 - filter("B"."PURCHASINGDOCCTG"='F' AND "B"."CLIENT"=:2)
34 - filter("L"."LANGUAGE"(+)=:3 AND "L"."CLIENT"(+)=:2)
35 - filter("D"."CLIENT"=:2)
36 - filter(NVL("C"."PURDOCDELETIONINDIC",'N')='N')
37 - access("C"."PURDOCNO"="B"."PURDOCNO" AND "C"."CLIENT"=:2)
filter("C"."CLIENT"=:2)
39 - access("C"."PURCHASEREQNO"="J"."PURCHASEREQNO"(+) AND "C"."ITEMNO"="J"."ITEMNO"(+) AND "J"."CLIENT"(+)=:2)
41 - access("E"."PURDOCNO"(+)="C"."PURDOCNO" AND "E"."PURDOCLINENO"(+)="C"."PURDOCLINENO" AND "E"."CLIENT"(+)=:2)
filter("E"."CLIENT"(+)=:2)
42 - filter("M"."CLIENT"(+)=:2)
44 - filter("DI_OPERTYPE"<>'D')
48 - filter("DI_OPERTYPE"<>'D')
51 - access("C"."CLIENT"="M"."CLIENT"(+) AND "C"."MTLNO"="M"."MTLNO"(+))
53 - access("J"."CREATEDBY"="K"."NAME"(+) AND "J"."CLIENT"="K"."CLIENT"(+))
54 - filter("K"."LANGUAGE"(+)=:3)
57 - access("B"."VENDORNO"="D"."VENDORNO" AND "B"."CLIENT"="D"."CLIENT")
58 - access("F"."PURGROUPID"="G"."PURGROUPID"(+))
59 - filter("G"."LANGUAGE"(+)=:3)
60 - access("B"."CLIENT"="L"."CLIENT"(+) AND "B"."CREATEDBY"="L"."NAME"(+))
61 - access("B"."PURGRP"="F"."PURGROUP" AND "B"."CLIENT"="F"."CLIENT")
63 - access(ROWID=ROWID)
64 - filter("F"."CLIENT"=:2)
66 - access("H"."PURDOCTYPEID"="I"."PURDOCTYPEID"(+))
67 - filter("I"."LANGUAGE"(+)=:3)
68 - access("B"."ORDTYPE"="H"."PURDOCTYPE" AND "B"."CLIENT"="H"."CLIENT" AND
"B"."PURCHASINGDOCCTG"="H"."PURDOCCTG")
70 - access(ROWID=ROWID)
71 - filter("H"."CLIENT"=:2 AND "H"."PURDOCCTG"='F')
73 - access("B"."ORDTYPE"="A"."ORDTYPE" AND "B"."PURCHASINGDOCCTG"="A"."PURDOCCTG" AND "B"."CLIENT"="A"."CLIENT")
74 - access("A"."CLIENT"=:2 AND "A"."PURDOCCTG"='F')
75 - filter("B"."PURCHASINGDOCCTG"='F' AND "B"."CLIENT"=:2)
76 - filter("L"."LANGUAGE"(+)=:3 AND "L"."CLIENT"(+)=:2)
77 - filter("D"."CLIENT"=:2)
78 - filter(NVL("C"."PURDOCDELETIONINDIC",'N')='N')
79 - access("C"."PURDOCNO"="B"."PURDOCNO" AND "C"."CLIENT"=:2)
filter("C"."CLIENT"=:2)
81 - access("C"."PURCHASEREQNO"="J"."PURCHASEREQNO"(+) AND "C"."ITEMNO"="J"."ITEMNO"(+) AND "J"."CLIENT"(+)=:2)
83 - access("E"."PURDOCNO"(+)="C"."PURDOCNO" AND "E"."PURDOCLINENO"(+)="C"."PURDOCLINENO" AND "E"."CLIENT"(+)=:2)
filter("E"."CLIENT"(+)=:2)
84 - filter("M"."CLIENT"(+)=:2)
-------------------------------------------------------------------------------
看到有3个建议
1.收集表信息
2.固定执行计划
3.考虑用UNION ALL 代替 UNION
SQL TUNNING 是否可以在生产环境中发挥重要作用,还需要进一步测试
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7569309/viewspace-2133654/
,如需转载,请注明出处,否则将追究法律责任。