1.½âÊͲ¢²é¿´sqlÎı¾µÄÖ´Ðмƻ®explain plan for select 3+5 from dual;select * from table(dbms_xplan.display());
select * from table(dbms_xplan.display
(table_name=>'PLAN_TABLE',statement_id=>null,format=>'ALL'));ÓÃexplain plan½âÊÍÒ»¸öSQL£¬Ïà¹ØÐÅÏ¢»áĬÈϱ»·Åµ½Ò»¸öÒ»¸ö½ÐPLAN_TABLEµÄÈ«¾ÖÁÙʱ±íÖС£¿ÉÒÔÓÃÕâ¸öÀ´²é¿´¡£²ÎÊý£ºtable_name,ĬÈÏ'PLAN_TABLE'£¬Èç¹û±ðµÄÒ»¸ö±í¸úPLAN_TABLEÓÐÒ»ÑùµÄ±í½á¹¹£¬Ò²¿ÉÒÔ¶ÁÈ¡ÀïÃæµÄÐÅÏ¢¡£statement_id ĬÈÏnull£¬¼´²é¸Ãsession×îºóµÄÒ»Ìõexplain plan½âÊ͵ÄÓï¾ä¡£format ? ĬÈÏ'TYPICAL'£¬È«²¿ÊÇ'BASIC','TYPICAL','ALL'£¬ALLµÄʱºò»áÏÔʾPROJECTION, ALIAS and information about REMOTE SQL if the operation is distributed¡£Æäʵ³ýÁËÖ¸¶¨Õâ3¸ö¼¶±ðÍ⣬ÏÔʾʲôÐÅÏ¢Ò²¿ÉÒÔÔÙͨ¹ýºóÃæµÄ±¸×¢£¨¼õºÅ´ú±íÈ¥³ýÏà¹ØÐÅÏ¢£©'ALL -PROJECTION -NOTE' ?#ALL¼¶±ð£¬µ«²»ÒªÍ¶ÉäÓëNOTEÐÅÏ¢ 'BASIC ROWS' ?--BASEϱ¾À´Ã»ÓÐROWSÐÅÏ¢£¬ÎÒÃÇÒ²¿ÉÒÔ¸øËü¼ÓÉÏ¡£»¹ÓÐÆäËûÑ¡ÏÈ磺outline
filter_perds ? ĬÈÏnull ?,filter_preds=>'plan_id =32' ?¿ÉÒÔͨ¹ýplan_tableÖеÄ×ֶΣ¬ÏÞÖÆÊä³öʲôÐÅÏ¢£¬¾ÍÈçͬwhereÌõ¼þ¡£Ã¿¸öÁ¬ÉÏÀ´µÄÓû§¶¼¿ÉÒÔʹÓÃplan_table£¬²»ÓÃÌØ±ðµÄȨÏÞ£¬Ò²²»ÓöÁÈ¡ÖîÈçv$planÕâÑùµÄÊÓͼ¡£²»»áʵ¼ÊÖ´ÐÐSQL£¬Ò²²»»áÔÚshared poolÉÏÉú³É¸ÃSQLµÄcursor£¬ÊÇÉú³ÉÁËÒ»¸öcursor²»¹ýÊÇ´øÉÏexplain plan for×ÖÑ۵쬶øÃ»ÓжÀÁ¢µÄ¸ÃsqlµÄcursor²úÉú¡£
?
2.²é¿´Ò»¸öshared poolÖеÄcursorµÄÖ´Ðмƻ®select * from table(dbms_xplan.display_cursor()); ?--չʾ¸ÃsessionµÄ×îºóÒ»ÌõSQLµÄÖ´Ðмƻ®£¬Ö»ÔÚsqlplusÖкÏÊÊ¡£select * from table(dbms_xplan.display_cursor('fb8szhn9h5r95')); ?select * from table(dbms_xplan.display_cursor('fb8szhn9h5r95',0,'TYPICAL')); ?
?
#µÚÒ»ÖÖչʾsession×îºóÒ»ÌõSQLµÄÖ´Ðмƻ®£¬ÔÚplsql developerÖв»ºÏÊÊ£¬ÕâºÜ¿ÉÄÜÊÇÒòΪ£¬plsql developerÿִÐÐÍêÒ»¸öselectºó£¬¾Í»áĬÈÏ¿ªÆôÒ»¸öеÄÊÂÎñ£¬»áÖ´ÐÐbegin :id := sys.dbms_transaction.local_transaction_id; end;£¬ËùÒÔÕâ²ÅÊÇÔÚplsql developerÖеÄ×îºóÒ»ÌõÓï¾ä¡£#´Óshared poolÖжÁÈ¡cursor£¬²¢½áºÏV$SQL_PLAN_STATISTICS_ALL, ?V$SQL, and V$SQL_PLANµÈÊÓͼ£¬½«Ö´Ðмƻ®Õ¹ÏÖ¡£#Èç¹ûȱ·¦È¨ÏÞ£¬¿ÉÒÔSELECT privilege on V$SQL_PLAN_STATISTICS_ALL,V$SQL, and V$SQL_PLAN¶¼ÊÚÓè¡£#¸ñʽ£¬ÆäÖÐsql_idÓëchild_noΨһ±êʶij¸öcursor¡£sql_id ?Ö¸¶¨Î»ÓÚlibrary cacheÖ´Ðмƻ®ÖÐSQL¸¸Óα꣬Èç¹û²»Ö¸¶¨¾Í·µ»ØsessionÖ´ÐеÄ×îºóÒ»ÌõSQLµÄsql_id¡£child_number ?ĬÈÏÊÇ0£¬Èç¹ûÊÇnull,Ôò·µ»Øsql_idËùÖ¸¸¸ÓαêϵÄËùÓÐ×ÓÓαêµÄÖ´Ðмƻ®¡£format ?¿ØÖÆSQLÓï¾äÖ´Ðмƻ®µÄÊä³ö²¿·Ö£¬¼´ÄÄЩ¿ÉÒÔÏÔʾÄÄЩ²»ÏÔʾ¡£(ĬÈÏTYPICAL)£¬¿ÉÒԲο¼display()£¬Ò²ÊÇbasic,typical,all¡£
?
3.¶ÔÓÚÓÐÏêϸʵʱִÐÐÐÅÏ¢µÄSQL³ý´ËÖ®Íâµ±ÔÚ¿ªÆôstatistics_level=allʱ»òʹÓÃgather_plan_statisticsÌáʾʱ£¬»áÓÃÁíÍâÒ»¸ö±í£¬ÏêϸµØ¼Ç¼ÔËÐÐʱִÐмƻ®ÓëÐÅÏ¢¡£alter session set statistics_level=all; --Ò²¿ÉÒÔalter systemselect /*+ gather_plan_statistics */ /*fwy1806*/* from t1 where rownum<30;ÏêϸµØ²é¿´Ö´Ðмƻ®
?
display_cursor±Èdisplay()»¹¶àÁËһЩ¶«Î÷£¬ÔÚÏêϸÊÕ¼¯Ä£Ê½ÏÂ,»¹¿ÉÒÔ¼ÓÏÂÃæµÄÑ¡Ïî¡£
IOSTATS£º»áչʾ¸ÃSQLµÄÀÛ¼ÆIOͳ¼ÆÐÅÏ¢£¬¼ÓÁËlast¾ÍÏÔʾ×îºóÒ»¸ö¡£MEMSTATS£ºÖ»ÓпªÆôÁËPGA×Ô¶¯ÄÚ´æ¹ÜÀí£¬¼´pga_aggregate_target²»ÊÇ0£¬ÎÒÃDzÅÄÜʹÓÃÕâÏ»áչʾʹÓÃÁ˶àÉÙmemory£¬¶àÉÙbytes±»½»»»µ½´ÅÅÌ£¬Ò»°ãÀ´ËµÓÃÁËhash-join,sort,group byµÈ±È½ÏÐèÒªÄÚ´æµÄ²Ù×÷²Å»áÊÕ¼¯¡£ALLSTATS£ºÊÇ'IOSTATS MEMSTATS'µÄͬÒå´Ê¡£LAST£ºÄ¬ÈϵØÕ¹Ê¾¶¼ÊǸÃÓαêµÄÀÛ»ýͳ¼ÆÐÅÏ¢£¬¼ÓÁËLAST²Å»áÏÔʾ×îºóÒ»¸ö¡£RUNSTATS_TOT ?--ΪÁËÏòºó¼æÈÝ£¬Ï൱ÓÚIOSTATSRUNSTATS_LAST --ΪÁËÏòºó¼æÈÝ£¬Ï൱ÓÚIOSTATS LAST
?
²é¿´¸ÃÓαê×îºóÒ»´ÎµÄʵ¼Êͳ¼ÆÐÅÏ¢Ö´Ðмƻ®
select * from table(dbms_xplan.display_cursor('fb8szhn9h5r95',null,'allstats last'));»á½«¸ÃÓαêµÄÀÛ»ýÖ´ÐÐÐÅÏ¢Áгö£¬ÀýÈçÓαêÖ´ÐйýÁ½´Îºó£¬starts£¬A-Rows,buffersÒ²ÊÇÉÏÃæµÄÁ½±¶
select * from table(dbms_xplan.display_cursor('fb8szhn9h5r95',null,'allstats'));×îÏêϸ£¬»ã¼¯ÁËÆÕͨģʽµÄallÓëÏêϸģʽµÄallstats£¬¶øÇÒ½«Ä¬Èϲ»ÏÔʾµÄoutlineÐÅÏ¢Ò²ÏÔʾ³öÀ´¡£
select * from table(dbms_xplan.display_cursor('fb8szhn9h5r95',null,'all allstats last outline'));select * from table(dbms_xplan.display_cursor('fb8szhn9h5r95',2,'all allstats last outline')); ?--¼ÓÉÏchild_no------------------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buff