一次访问ORACLE数据字典的优化

前面写过一篇帖子:DBA任务---确保统计信息准确性 http://blog.csdn.net/robinson1988/article/details/6321537

今晚上有位哥们QQ问我有没有什么SQL脚本用来收集统计信息的 几乎未加思考我就把上面的脚本原封不动的贴个了那位哥们

后来那位哥们改写了SQL,说下面的SQL要跑200多秒,7千多W的逻辑读

SELECT OWNER, SEGMENT_NAME, CASE WHEN SIZE_GB < 0.5 THEN 30 WHEN SIZE_GB >= 0.5 AND SIZE_GB < 1 THEN 20 WHEN SIZE_GB >= 1 AND SIZE_GB < 5 THEN 10 WHEN SIZE_GB >= 5 AND SIZE_GB < 10 THEN 5 WHEN SIZE_GB >= 10 THEN 1 END AS PERCENT, 2 AS DEGREE FROM (SELECT OWNER, SEGMENT_NAME, SUM(BYTES / 1024 / 1024 / 1024) SIZE_GB FROM DBA_SEGMENTS A WHERE OWNER IN ('DATASYNC_PRC','OSS03','BAS01','DATASYNC_1','DATASYNC_2','OSS_CMS') AND SEGMENT_NAME IN (SELECT DISTINCT TABLE_NAME FROM DBA_TAB_STATISTICS B WHERE (LAST_ANALYZED IS NULL OR STALE_STATS = 'YES') AND OWNER IN('DATASYNC_PRC','OSS03','BAS01','DATASYNC_1','DATASYNC_2','OSS_CMS')) GROUP BY OWNER, SEGMENT_NAME);

该SQL语句执行计划如下:

SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------------------------------- -------------------- Plan hash value: 2028155339 ---------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 22412 | 3852K| 113K (2)| 00:05:55 | | 1 | HASH GROUP BY | | 22412 | 3852K| 113K (2)| 00:05:55 | |* 2 | FILTER | | | | | | | 3 | VIEW | SYS_DBA_SEGS | 2837 | 487K| 110K (2)| 00:05:46 | | 4 | UNION-ALL | | | | | | | 5 | NESTED LOOPS | | 1840 | 296K| 93690 (2)| 00:04:53 | |* 6 | HASH JOIN | | 1779 | 272K| 93690 (2)| 00:04:53 | | 7 | TABLE ACCESS FULL | TS$ | 172 | 1548 | 54 (2)| 00:00:01 | | 8 | NESTED LOOPS | | 1779 | 257K| 93635 (2)| 00:04:53 | |* 9 | HASH JOIN | | 6571 | 757K| 80450 (3)| 00:04:12 | |* 10 | FILTER | | | | | | |* 11 | HASH JOIN RIGHT OUTER | | 7221 | 423K| 10278 (6)| 00:00:33 | | 12 | TABLE ACCESS FULL | USER$ | 3200 | 54400 | 27 (0)| 00:00:01 | | 13 | TABLE ACCESS FULL | OBJ$ | 3854K| 158M| 10133 (5)| 00:00:32 | | 14 | VIEW | SYS_OBJECTS | 3507K| 194M| 70065 (2)| 00:03:40 | | 15 | UNION-ALL | | | | | | |* 16 | TABLE ACCESS FULL | TAB$ | 210K| 5548K| 15995 (2)| 00:00:51 | | 17 | TABLE ACCESS FULL | TABPART$ | 148K| 2895K| 727 (3)| 00:00:03 | | 18 | TABLE ACCESS FULL | CLU$ | 10 | 150 | 14128 (2)| 00:00:45 | |* 19 | TABLE ACCESS FULL | IND$ | 750K| 16M| 16045 (2)| 00:00:51 | | 20 | TABLE ACCESS FULL | INDPART$ | 620K| 11M| 2424 (4)| 00:00:08 | |* 21 | TABLE ACCESS FULL | LOB$ | 2273 | 50006 | 15929 (2)| 00:00:50 | | 22 | TABLE ACCESS FULL | TABSUBPART$ | 269K| 5261K| 932 (4)| 00:00:03 | | 23 | TABLE ACCESS FULL | INDSUBPART$ | 1503K| 28M| 3868 (5)| 00:00:13 | | 24 | TABLE ACCESS FULL | LOBFRAG$ | 2977 | 65494 | 17 (0)| 00:00:01 | |* 25 | TABLE ACCESS CLUSTER | SEG$ | 1 | 30 | 2 (0)| 00:00:01 | |* 26 | INDEX UNIQUE SCAN | I_FILE#_BLOCK# | 1 | | 1 (0)| 00:00:01 | |* 27 | INDEX UNIQUE SCAN | I_FILE2 | 1 | 8 | 0 (0)| 00:00:01 | | 28 | NESTED LOOPS | | 1 | 109 | 2274 (1)| 00:00:08 | | 29 | NESTED LOOPS | | 1 | 101 | 2274 (1)| 00:00:08 | |* 30 | FILTER | | | | | | |* 31 | HASH JOIN OUTER | | 1 | 92 | 2273 (1)| 00:00:08 | | 32 | NESTED LOOPS | | 568 | 42600 | 2245 (1)| 00:00:08 | |* 33 | TABLE ACCESS FULL | UNDO$ | 1116 | 45756 | 5 (0)| 00:00:01 | |* 34 | TABLE ACCESS CLUSTER | SEG$ | 1 | 34 | 2 (0)| 00:00:01 | |* 35 | INDEX UNIQUE SCAN | I_FILE#_BLOCK# | 1 | | 1 (0)| 00:00:01 | | 36 | TABLE ACCESS FULL | USER$ | 3200 | 54400 | 27 (0)| 00:00:01 | | 37 | TABLE ACCESS CLUSTER | TS$ | 1 | 9 | 1 (0)| 00:00:01 | |* 38 | INDEX UNIQUE SCAN | I_TS# | 1 | | 0 (0)| 00:00:01 | |* 39 | INDEX UNIQUE SCAN | I_FILE2 | 1 | 8 | 0 (0)| 00:00:01 | |* 40 | HASH JOIN | | 996 | 77688 | 14672 (1)| 00:00:46 | | 41 | TABLE ACCESS FULL | TS$ | 172 | 1548 | 54 (2)| 00:00:01 | |* 42 | FILTER | | | | | | |* 43 | HASH JOIN RIGHT OUTER | | 996 | 68724 | 14618 (1)| 00:00:46 | | 44 | TABLE ACCESS FULL | USER$ | 3200 | 54400 | 27 (0)| 00:00:01 | | 45 | NESTED LOOPS | | 531K| 26M| 14574 (1)| 00:00:46 | | 46 | TABLE ACCESS FULL | FILE$ | 872 | 10464 | 3 (0)| 00:00:01 | |* 47 | TABLE ACCESS CLUSTER | SEG$ | 610 | 24400 | 23 (0)| 00:00:01 | |* 48 | INDEX RANGE SCAN | I_FILE#_BLOCK# | 1 | | 2 (0)| 00:00:01 | | 49 | VIEW | DBA_TAB_STATISTICS | 42 | 1932 | 2828 (6)| 00:00:09 | | 50 | UNION-ALL | | | | | | |* 51 | FILTER | | | | | | | 52 | NESTED LOOPS OUTER | | 1 | 115 | 23 (0)| 00:00:01 | | 53 | NESTED LOOPS | | 1 | 97 | 21 (0)| 00:00:01 | | 54 | NESTED LOOPS OUTER | | 1 | 74 | 19 (0)| 00:00:01 | | 55 | NESTED LOOPS | | 1 | 67 | 19 (0)| 00:00:01 | | 56 | INLIST ITERATOR | | | | | | | 57 | TABLE ACCESS BY INDEX ROWID | USER$ | 6 | 102 | 7 (0)| 00:00:01 | |* 58 | INDEX UNIQUE SCAN | I_USER1 | 6 | | 2 (0)| 00:00:01 | |* 59 | INDEX RANGE SCAN | I_OBJ2 | 1 | 50 | 2 (0)| 00:00:01 | |* 60 | INDEX UNIQUE SCAN | I_TAB_STATS |* 61 | TABLE ACCESS CLUSTER | TAB$ | 1 | 23 | 2 (0)| 00:00:01 | |* 62 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | | 63 | TABLE ACCESS BY INDEX ROWID | MON_MODS_ALL$ | 1 | 18 | 2 (0)| 00:00:01 | |* 64 | INDEX UNIQUE SCAN | I_MON_MODS_ALL| 65 | NESTED LOOPS | | 1 | 147 | 775 (6)| 00:00:03 | |* 66 | FILTER | | | | | | | 67 | NESTED LOOPS OUTER | | 1 | 141 | 773 (6)| 00:00:03 | |* 68 | HASH JOIN | | 1 | 123 | 771 (6)| 00:00:03 | | 69 | NESTED LOOPS OUTER | | 1 | 65 | 19 (0)| 00:00:01 | | 70 | NESTED LOOPS | | 1 | 58 | 19 (0)| 00:00:01 | | 71 | INLIST ITERATOR | | | | | | | 72 | TABLE ACCESS BY INDEX ROWID | USER$ | 6 | 102 | 7 (0)| 00:00:01 | |* 73 | INDEX UNIQUE SCAN | I_USER1 | 6 | | 2 (0)| 00:00:01 | |* 74 | INDEX RANGE SCAN | I_OBJ2 | 1 | 41 | 2 (0)| 00:00:01 | |* 75 | INDEX UNIQUE SCAN | I_TAB_STATS| 76 | VIEW | TABPARTV$ | 148K| 8397K| 747 (6)| 00:00:03 | |* 77 | TABLE ACCESS FULL | TABPART$ | 148K| 4632K| 747 (6)| 00:00:03 | | 78 | TABLE ACCESS BY INDEX ROWID | MON_MODS_ALL$ | 1 | 18 | 2 (0)| 00:00:01 | |* 79 | INDEX UNIQUE SCAN | I_MON_MODS_ALL| 80 | TABLE ACCESS CLUSTER | TAB$ | 21 | 126 | 2 (0)| 00:00:01 | |* 81 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | | 82 | NESTED LOOPS | | 1 | 140 | 737 (4)| 00:00:03 | | 83 | NESTED LOOPS | | 1 | 134 | 735 (4)| 00:00:03 | | 84 | NESTED LOOPS | | 1 | 117 | 734 (4)| 00:00:03 | | 85 | NESTED LOOPS OUTER | | 1 | 76 | 731 (4)| 00:00:03 | | 86 | VIEW | TABPARTV$ | 1 | 58 | 729 (4)| 00:00:03 | |* 87 | TABLE ACCESS FULL | TABPART$ | 1 | 32 | 729 (4)| 00:00:03 | | 88 | TABLE ACCESS BY INDEX ROWID | MON_MODS_ALL$ | 1 | 18 | 2 (0)| 00:00:01 | |* 89 | INDEX UNIQUE SCAN | I_MON_MODS_ALL|* 90 | TABLE ACCESS BY INDEX ROWID | OBJ$ | 1 | 41 | 3 (0)| 00:00:01 | |* 91 | INDEX RANGE SCAN | I_OBJ1 | 1 | | 2 (0)| 00:00:01 | |* 92 | TABLE ACCESS CLUSTER | USER$ | 1 | 17 | 1 (0)| 00:00:01 | |* 93 | INDEX UNIQUE SCAN | I_USER# | 1 | | 0 (0)| 00:00:01 | | 94 | TABLE ACCESS CLUSTER | TAB$ | 21 | 126 | 2 (0)| 00:00:01 | |* 95 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | | 96 | NESTED LOOPS | | 3 | 360 | 146 (5)| 00:00:01 | |* 97 | FILTER | | | | | | | 98 | NESTED LOOPS OUTER | | 1 | 114 | 144 (5)| 00:00:01 | |* 99 | HASH JOIN | | 1 | 96 | 142 (5)| 00:00:01 | | 100 | NESTED LOOPS OUTER | | 1 | 65 | 19 (0)| 00:00:01 | | 101 | NESTED LOOPS | | 1 | 58 | 19 (0)| 00:00:01 | | 102 | INLIST ITERATOR | | | | | | | 103 | TABLE ACCESS BY INDEX ROWID | USER$ | 6 | 102 | 7 (0)| 00:00:01 | |*104 | INDEX UNIQUE SCAN | I_USER1 | 6 | | 2 (0)| 00:00:01 | |*105 | INDEX RANGE SCAN | I_OBJ2 | 1 | 41 | 2 (0)| 00:00:01 | |*106 | INDEX UNIQUE SCAN | I_TAB_STATS| 107 | VIEW | TABCOMPARTV$ | 19453 | 588K| 122 (5)| 00:00:01 | | 108 | TABLE ACCESS FULL | TABCOMPART$ | 19453 | 398K| 122 (5)| 00:00:01 | | 109 | TABLE ACCESS BY INDEX ROWID | MON_MODS_ALL$ | 1 | 18 | 2 (0)| 00:00:01 | |*110 | INDEX UNIQUE SCAN | I_MON_MODS_ALL| 111 | TABLE ACCESS CLUSTER | TAB$ | 160 | 960 | 2 (0)| 00:00:01 | |*112 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | | 113 | NESTED LOOPS | | 35 | 5810 | 1146 (8)| 00:00:04 | | 114 | NESTED LOOPS OUTER | | 1 | 160 | 1144 (8)| 00:00:04 | | 115 | NESTED LOOPS | | 1 | 153 | 1144 (8)| 00:00:04 | |*116 | FILTER | | | | | | | 117 | NESTED LOOPS OUTER | | 1 | 147 | 1142 (8)| 00:00:04 | |*118 | HASH JOIN | | 11 | 1419 | 1120 (8)| 00:00:04 | |*119 | HASH JOIN | | 1 | 70 | 142 (5)| 00:00:01 | | 120 | NESTED LOOPS | | 1 | 58 | 19 (0)| 00:00:01 | | 121 | INLIST ITERATOR | | | | | | | 122 | TABLE ACCESS BY INDEX ROWID| USER$ | 6 | 102 | 7 (0)| 00:00:01 | |*123 | INDEX UNIQUE SCAN | I_USER1 | 6 | | 2 (0)| 00:00:01 | |*124 | INDEX RANGE SCAN | I_OBJ2 | 1 | 41 | 2 (0)| 00:00:01 | | 125 | VIEW | TABCOMPARTV$ | 19453 | 227K| 122 (5)| 00:00:01 | | 126 | TABLE ACCESS FULL | TABCOMPART$ | 19453 | 227K| 122 (5)| 00:00:01 | | 127 | VIEW | TABSUBPARTV$ | 269K| 15M| 969 (8)| 00:00:04 | |*128 | TABLE ACCESS FULL | TABSUBPART$ | 269K| 8681K| 969 (8)| 00:00:04 | | 129 | TABLE ACCESS BY INDEX ROWID | MON_MODS_ALL$ | 1 | 18 | 2 (0)| 00:00:01 | |*130 | INDEX UNIQUE SCAN | I_MON_MODS_ALL|*131 | INDEX RANGE SCAN | I_OBJ1 | 1 | 6 | 2 (0)| 00:00:01 | |*132 | INDEX UNIQUE SCAN | I_TAB_STATS| 133 | TABLE ACCESS CLUSTER | TAB$ | 160 | 960 | 2 (0)| 00:00:01 | |*134 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | |*135 | FILTER | | | | | | |*136 | FILTER | | | | | | | 137 | NESTED LOOPS OUTER | | 1 | 51 | 3 (34)| 00:00:01 | | 138 | NESTED LOOPS OUTER | | 1 | 36 | 2 (50)| 00:00:01 | |*139 | FIXED TABLE FULL | X$KQFTA | 1 | 21 | 1 (100)| 00:00:01 | |*140 | TABLE ACCESS BY INDEX ROWID | FIXED_OBJ$ | 1 | 15 | 1 (0)| 00:00:01 | |*141 | INDEX UNIQUE SCAN | I_FIXED_OBJ| 142 | TABLE ACCESS BY INDEX ROWID | TAB_STATS$ | 1 | 15 | 1 (0)| 00:00:01 | |*143 | INDEX UNIQUE SCAN | I_TAB_STATS---------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter( EXISTS (SELECT 0 FROM ( (SELECT "U"."NAME" "OWNER","O"."NAME" "TABLE_NAME",NULL "PARTITION_NAME",NULL "PARTITION_POSITION",NULL "SUBPARTITION_NAME",NULL "SUBPARTITION_POSITION",'TABLE' "OBJECT_TYPE","T"."ROWCNT" "NUM_ROWS",DECODE(BITAND("T"."PROPERTY",64),0,"T"."BLKCNT",TO_NUMBER(NULL)) "BLOCKS",DECODE(BITAND("T"."PROPERTY",64),0,"T"."EMPCNT",TO_NUMBER(NULL)) "EMPTY_BLOCKS",DECODE(BITAND("T"."PROPERTY",64),0,"T"."AVGSPC",TO_NUMBER(NULL)) "AVG_SPACE","T"."CHNCNT" "CHAIN_CNT","T"."AVGRLN" "AVG_ROW_LEN","T"."AVGSPC_FLB" "AVG_SPACE_FREELIST_BLOCKS",DECODE(BITAND("T"."PROPERTY",64),0,"T"."FLBCNT",TO_NUMBER(NULL)) "NUM_FREELIST_BLOCKS","TS"."CACHEDBLK" "AVG_CACHED_BLOCKS","TS"."CACHEHIT" "AVG_CACHE_HIT_RATIO","T"."SAMPLESIZE" "SAMPLE_SIZE","T"."ANALYZETIME" "LAST_ANALYZED",DECODE(BITAND("T"."FLAGS",512),0,'NO','YES') "GLOBAL_STATS",DECODE(BITAND("T"."FLAGS",256),0,'NO','YES') "USER_STATS",DECODE(BITAND("T"."TRIGFLAG",67108864)+BITAND("T"."TRIGFLAG",134217728),0,NULL,67108864,'DA TA',134217728,'CACHE','ALL') "STATTYPE_LOCKED",CASE WHEN "T"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"T"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCEN T',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END "STALE_STATS" FROM "SYS"."MON_MODS_ALL{1}quot; "M","SYS"."TAB_STATS{1}quot; "TS","SYS"."TAB{1}quot; "T","SYS"."OBJ{1}quot; "O","SYS"."USER WHERE ("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') AND "O"."NAMESPACE"=1 AND "O"."NAME"=:B1 AND "O"."OWNER#"="U"."USER#" AND "O"."SUBNAME" IS NULL AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL AND "O"."OBJ#"="T"."OBJ#" AND BITAND("T"."PROPERTY",1)=0 AND "O"."OBJ#"="TS"."OBJ#"(+) AND "T"."OBJ#"="M"."OBJ#"(+) AND ("T"."ANALYZETIME" IS NULL OR CASE WHEN "T"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"T"."ROWCNT"*TO_NUMB ER("DBMS_STATS"."GET_PREFS"('STALE_PERCENT',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES')) UNION ALL (SELECT "U"."NAME" "OWNER","O"."NAME" "TABLE_NAME","O"."SUBNAME" "PARTITION_NAME","TP"."PART#" "PARTITION_POSITION",NULL "SUBPARTITION_NAME",NULL "SUBPARTITION_POSITION",'PARTITION' "OBJECT_TYPE","TP"."ROWCNT" "NUM_ROWS","TP"."BLKCNT" "BLOCKS","TP"."EMPCNT" "EMPTY_BLOCKS","TP"."AVGSPC" "AVG_SPACE","TP"."CHNCNT" "CHAIN_CNT","TP"."AVGRLN" "AVG_ROW_LEN",TO_NUMBER(NULL) "AVG_SPACE_FREELIST_BLOCKS",TO_NUMBER(NULL) "NUM_FREELIST_BLOCKS","TS"."CACHEDBLK" "AVG_CACHED_BLOCKS","TS"."CACHEHIT" "AVG_CACHE_HIT_RATIO","TP"."SAMPLESIZE" "SAMPLE_SIZE","TP"."ANALYZETIME" "LAST_ANALYZED",DECODE(BITAND("TP"."FLAGS",16),0,'NO','YES') "GLOBAL_STATS",DECODE(BITAND("TP"."FLAGS",8),0,'NO','YES') "USER_STATS",DECODE(DECODE(BITAND("TAB"."TRIGFLAG",67108864)+BITAND("TP"."FLAGS",32),0,0,1)+DECODE(BITAN D("TAB"."TRIGFLAG",134217728)+BITAND("TP"."FLAGS",64),0,0,2),0,NULL,1,'DATA',2,'CACHE','ALL') "STATTYPE_LOCKED",CASE WHEN "TP"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"TP"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCE NT',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END "STALE_STATS" FROM "SYS"."MON_MODS_ALL{1}quot; "M","SYS"."TAB{1}quot; "TAB","SYS"."TAB_STATS{1}quot; "TS", (SELECT "OBJ#" "OBJ#","DATAOBJ#" "DATAOBJ#","BO#" "BO#",ROW_NUMBER() OVER ( PARTITION BY "BO#" ORDER BY "PART#") "PART#","HIBOUNDLEN" "HIBOUNDLEN","HIBOUNDVAL" "HIBOUNDVAL","TS#" "TS#","FILE#" "FILE#","BLOCK#" "BLOCK#","PCTFREE{1}quot; "PCTFREE{1}quot;,"PCTUSED{1}quot; "PCTUSED{1}quot;,"INITRANS" "INITRANS","MAXTRANS" "MAXTRANS","FLAGS" "FLAGS","ANALYZETIME" "ANALYZETIME","SAMPLESIZE" "SAMPLESIZE","ROWCNT" "ROWCNT","BLKCNT" "BLKCNT","EMPCNT" "EMPCNT","AVGSPC" "AVGSPC","CHNCNT" "CHNCNT","AVGRLN" "AVGRLN","PART#" "PHYPART#" FROM SYS."TABPART{1}quot; "TABPART{1}quot; WHERE "FILE#">0 AND "BLOCK#">0) "TP","SYS"."OBJ{1}quot; "O","SYS"."USER{1}quot; "U" WHERE ("U"."NAME"='BAS01' OR "U"."NAME"='DATAS) 6 - access("S"."TS#"="TS"."TS#") 9 - access("O"."OBJ#"="SO"."OBJECT_ID" AND "O"."TYPE#"="SO"."OBJECT_TYPE_ID") 10 - filter(NVL("U"."NAME",'SYS')='DATASYNC_PRC' OR NVL("U"."NAME",'SYS')='OSS03' OR NVL("U"."NAME",'SYS')='BAS01' OR NVL("U"."NAME",'SYS')='DATASYNC_1' OR NVL("U"."NAME",'SYS')='DATASYNC_2' OR NVL("U"."NAME",'SYS')='OSS_CMS') 11 - access("O"."OWNER#"="U"."USER#"(+)) 16 - filter(BITAND("T"."PROPERTY",1024)=0) 19 - filter("I"."TYPE#"=1 OR "I"."TYPE#"=2 OR "I"."TYPE#"=3 OR "I"."TYPE#"=4 OR "I"."TYPE#"=6 OR "I"."TYPE#"=7 OR "I"."TYPE#"=8 OR "I"."TYPE#"=9) 21 - filter(BITAND("L"."PROPERTY",64)=0 OR BITAND("L"."PROPERTY",128)=128) 25 - filter("S"."TYPE#"="SO"."SEGMENT_TYPE_ID") 26 - access("S"."TS#"="SO"."TS_NUMBER" AND "S"."FILE#"="SO"."HEADER_FILE" AND "S"."BLOCK#"="SO"."HEADER_BLOCK") 27 - access("S"."TS#"="F"."TS#" AND "S"."FILE#"="F"."RELFILE#") 30 - filter(NVL("U"."NAME",'SYS')='DATASYNC_PRC' OR NVL("U"."NAME",'SYS')='OSS03' OR NVL("U"."NAME",'SYS')='BAS01' OR NVL("U"."NAME",'SYS')='DATASYNC_1' OR NVL("U"."NAME",'SYS')='DATASYNC_2' OR NVL("U"."NAME",'SYS')='OSS_CMS') 31 - access("S"."USER#"="U"."USER#"(+)) 33 - filter("UN"."STATUS{1}quot;<>1) 34 - filter("S"."TYPE#"=1 OR "S"."TYPE#"=10) 35 - access("S"."TS#"="UN"."TS#" AND "S"."FILE#"="UN"."FILE#" AND "S"."BLOCK#"="UN"."BLOCK#") 38 - access("S"."TS#"="TS"."TS#") 39 - access("UN"."TS#"="F"."TS#" AND "UN"."FILE#"="F"."RELFILE#") 40 - access("S"."TS#"="TS"."TS#") 42 - filter(NVL("U"."NAME",'SYS')='DATASYNC_PRC' OR NVL("U"."NAME",'SYS')='OSS03' OR NVL("U"."NAME",'SYS')='BAS01' OR NVL("U"."NAME",'SYS')='DATASYNC_1' OR NVL("U"."NAME",'SYS')='DATASYNC_2' OR NVL("U"."NAME",'SYS')='OSS_CMS') 43 - access("S"."USER#"="U"."USER#"(+)) 47 - filter("S"."TYPE#"<>6 AND "S"."TYPE#"<>5 AND "S"."TYPE#"<>8 AND "S"."TYPE#"<>10 AND "S"."TYPE#"<>1) 48 - access("S"."TS#"="F"."TS#" AND "S"."FILE#"="F"."RELFILE#") 51 - filter("T"."ANALYZETIME" IS NULL OR CASE WHEN "T"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"T"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCEN T',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES') 58 - access("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') 59 - access("O"."OWNER#"="U"."USER#" AND "O"."NAME"=:B1 AND "O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL AND "O"."SUBNAME" IS NULL) filter("O"."SUBNAME" IS NULL AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) 60 - access("O"."OBJ#"="TS"."OBJ#"(+)) 61 - filter(BITAND("T"."PROPERTY",1)=0) 62 - access("O"."OBJ#"="T"."OBJ#") 64 - access("T"."OBJ#"="M"."OBJ#"(+)) 66 - filter("TP"."ANALYZETIME" IS NULL OR CASE WHEN "TP"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"TP"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCE NT',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES') 68 - access("O"."OBJ#"="TP"."OBJ#") 73 - access("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') 74 - access("O"."OWNER#"="U"."USER#" AND "O"."NAME"=:B1 AND "O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) filter("O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) 75 - access("O"."OBJ#"="TS"."OBJ#"(+)) 77 - filter("FILE#">0 AND "BLOCK#">0) 79 - access("TP"."OBJ#"="M"."OBJ#"(+)) 81 - access("TP"."BO#"="TAB"."OBJ#") 87 - filter("BLOCK#"=0 AND "FILE#"=0) 89 - access("TP"."OBJ#"="M"."OBJ#"(+)) 90 - filter("O"."NAME"=:B1 AND "O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) 91 - access("O"."OBJ#"="TP"."OBJ#") 92 - filter(("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') AND ("TP"."ANALYZETIME" IS NULL OR CASE WHEN "TP"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"TP"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCE NT',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES')) 93 - access("O"."OWNER#"="U"."USER#") 95 - access("TP"."BO#"="TAB"."OBJ#") 97 - filter("TCP"."ANALYZETIME" IS NULL OR CASE WHEN "TCP"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"TCP"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERC ENT',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES') 99 - access("O"."OBJ#"="TCP"."OBJ#") 104 - access("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') 105 - access("O"."OWNER#"="U"."USER#" AND "O"."NAME"=:B1 AND "O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) filter("O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) 106 - access("O"."OBJ#"="TS"."OBJ#"(+)) 110 - access("TCP"."OBJ#"="M"."OBJ#"(+)) 112 - access("TCP"."BO#"="TAB"."OBJ#") 116 - filter("TSP"."ANALYZETIME" IS NULL OR CASE WHEN "TSP"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"TSP"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERC ENT',"U"."NAME","PO"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES') 118 - access("TCP"."OBJ#"="TSP"."POBJ#") 119 - access("PO"."OBJ#"="TCP"."OBJ#") 123 - access("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') 124 - access("U"."USER#"="PO"."OWNER#" AND "PO"."NAME"=:B1 AND "PO"."NAMESPACE"=1 AND "PO"."REMOTEOWNER" IS NULL AND "PO"."LINKNAME" IS NULL) filter("PO"."REMOTEOWNER" IS NULL AND "PO"."LINKNAME" IS NULL) 128 - filter("FILE#">0 AND "BLOCK#">0) 130 - access("TSP"."OBJ#"="M"."OBJ#"(+)) 131 - access("SO"."OBJ#"="TSP"."OBJ#") 132 - access("SO"."OBJ#"="TS"."OBJ#"(+)) 134 - access("TCP"."BO#"="TAB"."OBJ#") 135 - filter(NULL IS NOT NULL) 136 - filter(DECODE(NVL("FOBJ"."OBJ#",0),0,TO_DATE(NULL),INTERNAL_FUNCTION("ST"."ANALYZETIME")) IS NULL) 139 - filter("T"."KQFTANAM"=:B1) 140 - filter("T"."KQFTAVER"="FOBJ"."TIMESTAMP"(+)-TO_DATE(' 1991-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) 141 - access("T"."KQFTAOBJ"="FOBJ"."OBJ#"(+)) 143 - access("T"."KQFTAOBJ"="ST"."OBJ#"(+)) 已选择303行。


当时是下午,脑的晕晕的 没有怎么关注这个事情,晚上10点过睡觉起来,那位哥们又QQ找我了 呵呵,由于睡了一觉,加上自己一看到大SQL就像打了鸡血一样,所以再次请求那位哥们把SQL发给我,经过半分钟的分析,加了个HINT

SELECT OWNER, SEGMENT_NAME, CASE WHEN SIZE_GB < 0.5 THEN 30 WHEN SIZE_GB >= 0.5 AND SIZE_GB < 1 THEN 20 WHEN SIZE_GB >= 1 AND SIZE_GB < 5 THEN 10 WHEN SIZE_GB >= 5 AND SIZE_GB < 10 THEN 5 WHEN SIZE_GB >= 10 THEN 1 END AS PERCENT, 2 AS DEGREE FROM (SELECT OWNER, SEGMENT_NAME, SUM(BYTES / 1024 / 1024 / 1024) SIZE_GB FROM DBA_SEGMENTS A WHERE OWNER IN ('DATASYNC_PRC','OSS03','BAS01','DATASYNC_1','DATASYNC_2','OSS_CMS') AND SEGMENT_NAME IN (SELECT /*+ UNNEST */ DISTINCT TABLE_NAME FROM DBA_TAB_STATISTICS B WHERE (LAST_ANALYZED IS NULL OR STALE_STATS = 'YES') AND OWNER IN('DATASYNC_PRC','OSS03','BAS01','DATASYNC_1','DATASYNC_2','OSS_CMS')) GROUP BY OWNER, SEGMENT_NAME);

执行计划如下:

SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT ---------------------------------------------------------------------------------------------------------------------------- -------------------- Plan hash value: 539876731 ------------------------------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 22412 | 4224K| 122K (3)| 00:06:24 | | 1 | HASH GROUP BY | | 22412 | 4224K| 122K (3)| 00:06:24 | |* 2 | HASH JOIN | | 22412 | 4224K| 122K (3)| 00:06:24 | | 3 | VIEW | VW_NSO_1 | 790 | 13430 | 11899 (8)| 00:00:38 | | 4 | HASH UNIQUE | | 790 | 36340 | 11899 (8)| 00:00:38 | | 5 | VIEW | DBA_TAB_STATISTICS | 790 | 36340 | 11898 (8)| 00:00:38 | | 6 | UNION-ALL | | | | | | | 7 | NESTED LOOPS OUTER | | 231 | 26565 | 3598 (7)| 00:00:12 | |* 8 | FILTER | | | | | | |* 9 | HASH JOIN OUTER | | 231 | 24948 | 3598 (7)| 00:00:12 | | 10 | NESTED LOOPS | | 1321 | 116K| 1885 (1)| 00:00:06 | | 11 | NESTED LOOPS | | 1605 | 105K| 188 (1)| 00:00:01 | | 12 | INLIST ITERATOR | | | | | | | 13 | TABLE ACCESS BY INDEX ROWID | USER$ | 6 | 102 | 7 (0)| 00:00:01 | |* 14 | INDEX UNIQUE SCAN | I_USER1 | 6 | | 2 (0)| 00:00:01 | |* 15 | INDEX RANGE SCAN | I_OBJ2 | 267 | 13350 | 30 (0)| 00:00:01 | |* 16 | TABLE ACCESS CLUSTER | TAB$ | 1 | 23 | 2 (0)| 00:00:01 | |* 17 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | | 18 | TABLE ACCESS FULL | MON_MODS_ALL$ | 1926K| 33M| 1653 (10)| 00:00:06 | |* 19 | INDEX UNIQUE SCAN | I_TAB_STATS{1}OBJ# | 1 | 7 | 0 (0)| 00:00:01 | | 20 | NESTED LOOPS OUTER | | 265 | 43195 | 3176 (9)| 00:00:10 | | 21 | NESTED LOOPS | | 265 | 41340 | 3176 (9)| 00:00:10 | |* 22 | FILTER | | | | | | |* 23 | HASH JOIN OUTER | | 261 | 39150 | 2652 (11)| 00:00:09 | |* 24 | HASH JOIN | | 930 | 119K| 940 (5)| 00:00:03 | | 25 | NESTED LOOPS | | 5315 | 301K| 188 (1)| 00:00:01 | | 26 | INLIST ITERATOR | | | | | | | 27 | TABLE ACCESS BY INDEX ROWID | USER$ | 6 | 102 | 7 (0)| 00:00:01 | |* 28 | INDEX UNIQUE SCAN | I_USER1 | 6 | | 2 (0)| 00:00:01 | |* 29 | INDEX RANGE SCAN | I_OBJ2 | 886 | 36326 | 30 (0)| 00:00:01 | | 30 | VIEW | TABPARTV$ | 148K| 10M| 747 (6)| 00:00:03 | |* 31 | TABLE ACCESS FULL | TABPART$ | 148K| 4632K| 747 (6)| 00:00:03 | | 32 | TABLE ACCESS FULL | MON_MODS_ALL$ | 1926K| 33M| 1653 (10)| 00:00:06 | | 33 | TABLE ACCESS CLUSTER | TAB$ | 1 | 6 | 2 (0)| 00:00:01 | |* 34 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | |* 35 | INDEX UNIQUE SCAN | I_TAB_STATS{1}OBJ# | 1 | 7 | 0 (0)| 00:00:01 | | 36 | NESTED LOOPS | | 1 | 156 | 737 (4)| 00:00:03 | | 37 | NESTED LOOPS | | 1 | 150 | 735 (4)| 00:00:03 | | 38 | NESTED LOOPS | | 1 | 133 | 734 (4)| 00:00:03 | | 39 | NESTED LOOPS OUTER | | 1 | 92 | 731 (4)| 00:00:03 | | 40 | VIEW | TABPARTV$ | 1 | 74 | 729 (4)| 00:00:03 | |* 41 | TABLE ACCESS FULL | TABPART$ | 1 | 32 | 729 (4)| 00:00:03 | | 42 | TABLE ACCESS BY INDEX ROWID | MON_MODS_ALL$ | 1 | 18 | 2 (0)| 00:00:01 | |* 43 | INDEX UNIQUE SCAN | I_MON_MODS_ALL{1}OBJ | 1 | | 1 (0)| 00:00:01 | |* 44 | TABLE ACCESS BY INDEX ROWID | OBJ$ | 1 | 41 | 3 (0)| 00:00:01 | |* 45 | INDEX RANGE SCAN | I_OBJ1 | 1 | | 2 (0)| 00:00:01 | |* 46 | TABLE ACCESS CLUSTER | USER$ | 1 | 17 | 1 (0)| 00:00:01 | |* 47 | INDEX UNIQUE SCAN | I_USER# | 1 | | 0 (0)| 00:00:01 | | 48 | TABLE ACCESS CLUSTER | TAB$ | 1 | 6 | 2 (0)| 00:00:01 | |* 49 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | | 50 | NESTED LOOPS | | 52 | 7124 | 659 (2)| 00:00:03 | | 51 | NESTED LOOPS OUTER | | 51 | 6681 | 556 (2)| 00:00:02 | |* 52 | FILTER | | | | | | | 53 | NESTED LOOPS OUTER | | 51 | 6324 | 556 (2)| 00:00:02 | |* 54 | HASH JOIN | | 122 | 12932 | 311 (3)| 00:00:01 | | 55 | NESTED LOOPS | | 5315 | 301K| 188 (1)| 00:00:01 | | 56 | INLIST ITERATOR | | | | | | | 57 | TABLE ACCESS BY INDEX ROWID | USER$ | 6 | 102 | 7 (0)| 00:00:01 | |* 58 | INDEX UNIQUE SCAN | I_USER1 | 6 | | 2 (0)| 00:00:01 | |* 59 | INDEX RANGE SCAN | I_OBJ2 | 886 | 36326 | 30 (0)| 00:00:01 | | 60 | VIEW | TABCOMPARTV$ | 19453 | 911K| 122 (5)| 00:00:01 | | 61 | TABLE ACCESS FULL | TABCOMPART$ | 19453 | 398K| 122 (5)| 00:00:01 | | 62 | TABLE ACCESS BY INDEX ROWID | MON_MODS_ALL$ | 1 | 18 | 2 (0)| 00:00:01 | |* 63 | INDEX UNIQUE SCAN | I_MON_MODS_ALL{1}OBJ | 1 | | 1 (0)| 00:00:01 | |* 64 | INDEX UNIQUE SCAN | I_TAB_STATS{1}OBJ# | 1 | 7 | 0 (0)| 00:00:01 | | 65 | TABLE ACCESS CLUSTER | TAB$ | 1 | 6 | 2 (0)| 00:00:01 | |* 66 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | | 67 | NESTED LOOPS OUTER | | 240 | 46800 | 3728 (9)| 00:00:12 | | 68 | NESTED LOOPS | | 240 | 45120 | 3728 (9)| 00:00:12 | |* 69 | FILTER | | | | | | |* 70 | HASH JOIN OUTER | | 240 | 43680 | 3247 (10)| 00:00:11 | |* 71 | HASH JOIN | | 1713 | 274K| 1534 (6)| 00:00:05 | | 72 | NESTED LOOPS | | 124 | 11160 | 556 (2)| 00:00:02 | |* 73 | HASH JOIN | | 122 | 10248 | 311 (3)| 00:00:01 | | 74 | NESTED LOOPS | | 5315 | 301K| 188 (1)| 00:00:01 | | 75 | INLIST ITERATOR | | | | | | | 76 | TABLE ACCESS BY INDEX ROWID| USER$ | 6 | 102 | 7 (0)| 00:00:01 | |* 77 | INDEX UNIQUE SCAN | I_USER1 | 6 | | 2 (0)| 00:00:01 | |* 78 | INDEX RANGE SCAN | I_OBJ2 | 886 | 36326 | 30 (0)| 00:00:01 | | 79 | VIEW | TABCOMPARTV$ | 19453 | 493K| 122 (5)| 00:00:01 | | 80 | TABLE ACCESS FULL | TABCOMPART$ | 19453 | 227K| 122 (5)| 00:00:01 | | 81 | TABLE ACCESS CLUSTER | TAB$ | 1 | 6 | 2 (0)| 00:00:01 | |* 82 | INDEX UNIQUE SCAN | I_OBJ# | 1 | | 1 (0)| 00:00:01 | | 83 | VIEW | TABSUBPARTV$ | 269K| 19M| 969 (8)| 00:00:04 | |* 84 | TABLE ACCESS FULL | TABSUBPART$ | 269K| 8681K| 969 (8)| 00:00:04 | | 85 | TABLE ACCESS FULL | MON_MODS_ALL$ | 1926K| 33M| 1653 (10)| 00:00:06 | |* 86 | INDEX RANGE SCAN | I_OBJ1 | 1 | 6 | 2 (0)| 00:00:01 | |* 87 | INDEX UNIQUE SCAN | I_TAB_STATS{1}OBJ# | 1 | 7 | 0 (0)| 00:00:01 | |* 88 | FILTER | | | | | | |* 89 | FILTER | | | | | | |* 90 | HASH JOIN RIGHT OUTER | | 783 | 39933 | 7 (29)| 00:00:01 | | 91 | TABLE ACCESS FULL | TAB_STATS$ | 770 | 11550 | 3 (0)| 00:00:01 | |* 92 | HASH JOIN OUTER | | 783 | 28188 | 3 (34)| 00:00:01 | | 93 | FIXED TABLE FULL | X$KQFTA | 783 | 16443 | 1 (100)| 00:00:01 | | 94 | TABLE ACCESS FULL | FIXED_OBJ$ | 784 | 11760 | 2 (0)| 00:00:01 | | 95 | VIEW | SYS_DBA_SEGS | 2837 | 487K| 110K (2)| 00:05:46 | | 96 | UNION-ALL | | | | | | | 97 | NESTED LOOPS | | 1840 | 296K| 93690 (2)| 00:04:53 | |* 98 | HASH JOIN | | 1779 | 272K| 93690 (2)| 00:04:53 | | 99 | TABLE ACCESS FULL | TS$ | 172 | 1548 | 54 (2)| 00:00:01 | | 100 | NESTED LOOPS | | 1779 | 257K| 93635 (2)| 00:04:53 | |*101 | HASH JOIN | | 6571 | 757K| 80450 (3)| 00:04:12 | |*102 | FILTER | | | | | | |*103 | HASH JOIN RIGHT OUTER | | 7221 | 423K| 10278 (6)| 00:00:33 | | 104 | TABLE ACCESS FULL | USER$ | 3200 | 54400 | 27 (0)| 00:00:01 | | 105 | TABLE ACCESS FULL | OBJ$ | 3854K| 158M| 10133 (5)| 00:00:32 | | 106 | VIEW | SYS_OBJECTS | 3507K| 194M| 70065 (2)| 00:03:40 | | 107 | UNION-ALL | | | | | | |*108 | TABLE ACCESS FULL | TAB$ | 210K| 5548K| 15995 (2)| 00:00:51 | | 109 | TABLE ACCESS FULL | TABPART$ | 148K| 2895K| 727 (3)| 00:00:03 | | 110 | TABLE ACCESS FULL | CLU$ | 10 | 150 | 14128 (2)| 00:00:45 | |*111 | TABLE ACCESS FULL | IND$ | 750K| 16M| 16045 (2)| 00:00:51 | | 112 | TABLE ACCESS FULL | INDPART$ | 620K| 11M| 2424 (4)| 00:00:08 | |*113 | TABLE ACCESS FULL | LOB$ | 2273 | 50006 | 15929 (2)| 00:00:50 | | 114 | TABLE ACCESS FULL | TABSUBPART$ | 269K| 5261K| 932 (4)| 00:00:03 | | 115 | TABLE ACCESS FULL | INDSUBPART$ | 1503K| 28M| 3868 (5)| 00:00:13 | | 116 | TABLE ACCESS FULL | LOBFRAG$ | 2977 | 65494 | 17 (0)| 00:00:01 | |*117 | TABLE ACCESS CLUSTER | SEG$ | 1 | 30 | 2 (0)| 00:00:01 | |*118 | INDEX UNIQUE SCAN | I_FILE#_BLOCK# | 1 | | 1 (0)| 00:00:01 | |*119 | INDEX UNIQUE SCAN | I_FILE2 | 1 | 8 | 0 (0)| 00:00:01 | | 120 | NESTED LOOPS | | 1 | 109 | 2274 (1)| 00:00:08 | | 121 | NESTED LOOPS | | 1 | 101 | 2274 (1)| 00:00:08 | |*122 | FILTER | | | | | | |*123 | HASH JOIN OUTER | | 1 | 92 | 2273 (1)| 00:00:08 | | 124 | NESTED LOOPS | | 568 | 42600 | 2245 (1)| 00:00:08 | |*125 | TABLE ACCESS FULL | UNDO$ | 1116 | 45756 | 5 (0)| 00:00:01 | |*126 | TABLE ACCESS CLUSTER | SEG$ | 1 | 34 | 2 (0)| 00:00:01 | |*127 | INDEX UNIQUE SCAN | I_FILE#_BLOCK# | 1 | | 1 (0)| 00:00:01 | | 128 | TABLE ACCESS FULL | USER$ | 3200 | 54400 | 27 (0)| 00:00:01 | | 129 | TABLE ACCESS CLUSTER | TS$ | 1 | 9 | 1 (0)| 00:00:01 | |*130 | INDEX UNIQUE SCAN | I_TS# | 1 | | 0 (0)| 00:00:01 | |*131 | INDEX UNIQUE SCAN | I_FILE2 | 1 | 8 | 0 (0)| 00:00:01 | |*132 | HASH JOIN | | 996 | 77688 | 14672 (1)| 00:00:46 | | 133 | TABLE ACCESS FULL | TS$ | 172 | 1548 | 54 (2)| 00:00:01 | |*134 | FILTER | | | | | | |*135 | HASH JOIN RIGHT OUTER | | 996 | 68724 | 14618 (1)| 00:00:46 | | 136 | TABLE ACCESS FULL | USER$ | 3200 | 54400 | 27 (0)| 00:00:01 | | 137 | NESTED LOOPS | | 531K| 26M| 14574 (1)| 00:00:46 | | 138 | TABLE ACCESS FULL | FILE$ | 872 | 10464 | 3 (0)| 00:00:01 | |*139 | TABLE ACCESS CLUSTER | SEG$ | 610 | 24400 | 23 (0)| 00:00:01 | |*140 | INDEX RANGE SCAN | I_FILE#_BLOCK# | 1 | | 2 (0)| 00:00:01 | ------------------------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("SEGMENT_NAME"="TABLE_NAME") 8 - filter("T"."ANALYZETIME" IS NULL OR CASE WHEN "T"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"T"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCENT' ,"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES') 9 - access("T"."OBJ#"="M"."OBJ#"(+)) 14 - access("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') 15 - access("O"."OWNER#"="U"."USER#" AND "O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL AND "O"."SUBNAME" IS NULL) filter("O"."SUBNAME" IS NULL AND "O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) 16 - filter(BITAND("T"."PROPERTY",1)=0) 17 - access("O"."OBJ#"="T"."OBJ#") 19 - access("O"."OBJ#"="TS"."OBJ#"(+)) 22 - filter("TP"."ANALYZETIME" IS NULL OR CASE WHEN "TP"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"TP"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCENT ',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES') 23 - access("TP"."OBJ#"="M"."OBJ#"(+)) 24 - access("O"."OBJ#"="TP"."OBJ#") 28 - access("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') 29 - access("O"."OWNER#"="U"."USER#" AND "O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) filter("O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) 31 - filter("FILE#">0 AND "BLOCK#">0) 34 - access("TP"."BO#"="TAB"."OBJ#") 35 - access("O"."OBJ#"="TS"."OBJ#"(+)) 41 - filter("BLOCK#"=0 AND "FILE#"=0) 43 - access("TP"."OBJ#"="M"."OBJ#"(+)) 44 - filter("O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) 45 - access("O"."OBJ#"="TP"."OBJ#") 46 - filter(("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') AND ("TP"."ANALYZETIME" IS NULL OR CASE WHEN "TP"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"TP"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCENT ',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES')) 47 - access("O"."OWNER#"="U"."USER#") 49 - access("TP"."BO#"="TAB"."OBJ#") 52 - filter("TCP"."ANALYZETIME" IS NULL OR CASE WHEN "TCP"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"TCP"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCEN T',"U"."NAME","O"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES') 54 - access("O"."OBJ#"="TCP"."OBJ#") 58 - access("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') 59 - access("O"."OWNER#"="U"."USER#" AND "O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) filter("O"."NAMESPACE"=1 AND "O"."REMOTEOWNER" IS NULL AND "O"."LINKNAME" IS NULL) 63 - access("TCP"."OBJ#"="M"."OBJ#"(+)) 64 - access("O"."OBJ#"="TS"."OBJ#"(+)) 66 - access("TCP"."BO#"="TAB"."OBJ#") 69 - filter("TSP"."ANALYZETIME" IS NULL OR CASE WHEN "TSP"."ANALYZETIME" IS NULL THEN NULL WHEN ("M"."INSERTS"+"M"."DELETES"+"M"."UPDATES">"TSP"."ROWCNT"*TO_NUMBER("DBMS_STATS"."GET_PREFS"('STALE_PERCEN T',"U"."NAME","PO"."NAME"))/100 OR BITAND("M"."FLAGS",1)=1) THEN 'YES' ELSE 'NO' END ='YES') 70 - access("TSP"."OBJ#"="M"."OBJ#"(+)) 71 - access("TCP"."OBJ#"="TSP"."POBJ#") 73 - access("PO"."OBJ#"="TCP"."OBJ#") 77 - access("U"."NAME"='BAS01' OR "U"."NAME"='DATASYNC_1' OR "U"."NAME"='DATASYNC_2' OR "U"."NAME"='DATASYNC_PRC' OR "U"."NAME"='OSS03' OR "U"."NAME"='OSS_CMS') 78 - access("U"."USER#"="PO"."OWNER#" AND "PO"."NAMESPACE"=1 AND "PO"."REMOTEOWNER" IS NULL AND "PO"."LINKNAME" IS NULL) filter("PO"."NAMESPACE"=1 AND "PO"."REMOTEOWNER" IS NULL AND "PO"."LINKNAME" IS NULL) 82 - access("TCP"."BO#"="TAB"."OBJ#") 84 - filter("FILE#">0 AND "BLOCK#">0) 86 - access("SO"."OBJ#"="TSP"."OBJ#") 87 - access("SO"."OBJ#"="TS"."OBJ#"(+)) 88 - filter(NULL IS NOT NULL) 89 - filter(DECODE(NVL("FOBJ"."OBJ#",0),0,TO_DATE(NULL),INTERNAL_FUNCTION("ST"."ANALYZETIME")) IS NULL) 90 - access("T"."KQFTAOBJ"="ST"."OBJ#"(+)) 92 - access("T"."KQFTAOBJ"="FOBJ"."OBJ#"(+) AND "T"."KQFTAVER"="FOBJ"."TIMESTAMP"(+)-TO_DATE(' 1991-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss')) 98 - access("S"."TS#"="TS"."TS#") 101 - access("O"."OBJ#"="SO"."OBJECT_ID" AND "O"."TYPE#"="SO"."OBJECT_TYPE_ID") 102 - filter(NVL("U"."NAME",'SYS')='DATASYNC_PRC' OR NVL("U"."NAME",'SYS')='OSS03' OR NVL("U"."NAME",'SYS')='BAS01' OR NVL("U"."NAME",'SYS')='DATASYNC_1' OR NVL("U"."NAME",'SYS')='DATASYNC_2' OR NVL("U"."NAME",'SYS')='OSS_CMS') 103 - access("O"."OWNER#"="U"."USER#"(+)) 108 - filter(BITAND("T"."PROPERTY",1024)=0) 111 - filter("I"."TYPE#"=1 OR "I"."TYPE#"=2 OR "I"."TYPE#"=3 OR "I"."TYPE#"=4 OR "I"."TYPE#"=6 OR "I"."TYPE#"=7 OR "I"."TYPE#"=8 OR "I"."TYPE#"=9) 113 - filter(BITAND("L"."PROPERTY",64)=0 OR BITAND("L"."PROPERTY",128)=128) 117 - filter("S"."TYPE#"="SO"."SEGMENT_TYPE_ID") 118 - access("S"."TS#"="SO"."TS_NUMBER" AND "S"."FILE#"="SO"."HEADER_FILE" AND "S"."BLOCK#"="SO"."HEADER_BLOCK") 119 - access("S"."TS#"="F"."TS#" AND "S"."FILE#"="F"."RELFILE#") 122 - filter(NVL("U"."NAME",'SYS')='DATASYNC_PRC' OR NVL("U"."NAME",'SYS')='OSS03' OR NVL("U"."NAME",'SYS')='BAS01' OR NVL("U"."NAME",'SYS')='DATASYNC_1' OR NVL("U"."NAME",'SYS')='DATASYNC_2' OR NVL("U"."NAME",'SYS')='OSS_CMS') 123 - access("S"."USER#"="U"."USER#"(+)) 125 - filter("UN"."STATUS{1}quot;<>1) 126 - filter("S"."TYPE#"=1 OR "S"."TYPE#"=10) 127 - access("S"."TS#"="UN"."TS#" AND "S"."FILE#"="UN"."FILE#" AND "S"."BLOCK#"="UN"."BLOCK#") 130 - access("S"."TS#"="TS"."TS#") 131 - access("UN"."TS#"="F"."TS#" AND "UN"."FILE#"="F"."RELFILE#") 132 - access("S"."TS#"="TS"."TS#") 134 - filter(NVL("U"."NAME",'SYS')='DATASYNC_PRC' OR NVL("U"."NAME",'SYS')='OSS03' OR NVL("U"."NAME",'SYS')='BAS01' OR NVL("U"."NAME",'SYS')='DATASYNC_1' OR NVL("U"."NAME",'SYS')='DATASYNC_2' OR NVL("U"."NAME",'SYS')='OSS_CMS') 135 - access("S"."USER#"="U"."USER#"(+)) 139 - filter("S"."TYPE#"<>6 AND "S"."TYPE#"<>5 AND "S"."TYPE#"<>8 AND "S"."TYPE#"<>10 AND "S"."TYPE#"<>1) 140 - access("S"."TS#"="F"."TS#" AND "S"."FILE#"="F"."RELFILE#") 已选择251行。

这次SQL能在1秒钟左右出结果,逻辑读由7千多W降低到8W多,我为什么加这个HINT就不说了,经常看我博客的人肯定懂的

有时候单独去访问数据字典很快,但是如果关联了太多数据字典性能就急剧下降,这个时候你不要怕,把它当成我们普通人写的SQL那样对待

很多人说遇到数据字典 加个 /*+ rule */ ,对于这个我是非常不赞同的


另外就是关于这个脚本 DBA任务---确保统计信息准确性 http://blog.csdn.net/robinson1988/article/details/6321537

会收集所有分区的统计信息,而不是只收集某个分区(如果表的数据只有一个分区发生了变化那么重复收集分区统计信息就做无用功了)

所以如果哥们要借鉴我的这个SQL,请自己改写



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值