Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ORACLEÊý¾Ý¿â²é¿´Ö´Ðмƻ®µÄ·½·¨
 
  2685  次浏览      32
 2019-4-1  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚjb51.net,±¾ÎľÍÈçºÎ¿´¶®Ö´Ðмƻ®£¬ÒÔ¼°ÈçºÎͨ¹ý·ÖÎöÖ´Ðмƻ®¶ÔSQL½øÐÐÓÅ»¯×öÏàӦ˵Ã÷¡£

Ò»¡¢Ê²Ã´ÊÇÖ´Ðмƻ®£¨explain plan£©

Ö´Ðмƻ®£ºÒ»Ìõ²éѯÓï¾äÔÚORACLEÖеÄÖ´Ðйý³Ì»ò·ÃÎÊ·¾¶µÄÃèÊö¡£

¶þ¡¢ÈçºÎ²é¿´Ö´Ðмƻ®

1: ÔÚPL/SQLϰ´F5²é¿´Ö´Ðмƻ®¡£µÚÈý·½¹¤¾ßtoadµÈ¡£

ºÜ¶àÈËÒÔΪPL/SQLµÄÖ´Ðмƻ®Ö»ÄÜ¿´µ½»ùÊý¡¢ÓÅ»¯Æ÷¡¢ºÄ·ÑµÈ»ù±¾ÐÅÏ¢£¬ÆäʵÕâ¸ö¿ÉÒÔÔÚPL/SQL¹¤¾ßÀïÃæÉèÖõġ£¿ÉÒÔ¿´µ½ºÜ¶àÆäËüÐÅÏ¢£¬ÈçÏÂËùʾ

2: ÔÚSQL*PLUS(PL/SQLµÄÃüÁî´°¿ÚºÍSQL´°¿Ú¾ù¿É)ÏÂÖ´ÐÐÏÂÃæ²½Öè


SQL>EXPLAIN PLAN FOR
SELECT * FROM SCOTT.EMP; --Òª½âÎöµÄSQL½Å±¾
SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

3: ÔÚSQL*PLUSÏÂ(ÓÐЩÃüÁîÔÚPL/SQLÏÂÎÞЧ)Ö´ÐÐÈçÏÂÃüÁ

SQL>SET TIMING ON ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡--¿ØÖÆÏÔʾִÐÐʱ¼äͳ¼ÆÊý¾Ý
SQL>SET AUTOTRACE ON EXPLAIN ¡¡¡¡¡¡ ¡¡¡¡--ÕâÑùÉèÖðüº¬Ö´Ðмƻ®¡¢½Å±¾Êý¾ÝÊä³ö£¬Ã»ÓÐͳ¼ÆÐÅÏ¢
SQL>Ö´ÐÐÐèÒª²é¿´Ö´Ðмƻ®µÄSQLÓï¾ä
SQL>SET AUTOTRACE OFF ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ --²»Éú³ÉAUTOTRACE±¨¸æ£¬ÕâÊÇȱʡģʽ
SQL> SET AUTOTRACE ON ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ --ÕâÑùÉèÖðüº¬Ö´Ðмƻ®¡¢Í³¼ÆÐÅÏ¢¡¢ÒÔ¼°½Å±¾Êý¾ÝÊä³ö
SQL>Ö´ÐÐÐèÒª²é¿´Ö´Ðмƻ®µÄSQLÓï¾ä
SQL>SET AUTOTRACE OFF
SQL> SET AUTOTRACE TRACEONLY ¡¡¡¡¡¡¡¡¡¡--ÕâÑùÉèÖûáÓÐÖ´Ðмƻ®¡¢Í³¼ÆÐÅÏ¢£¬²»»áÓнű¾Êý¾ÝÊä³ö
SQL>Ö´ÐÐÐèÒª²é¿´Ö´Ðмƻ®µÄSQLÓï¾ä
SQL>SET AUTOTRACE TRACEONLY STAT --ÕâÑùÉèÖÃÖ»°üº¬ÓÐͳ¼ÆÐÅÏ¢
SQL>Ö´ÐÐÐèÒª²é¿´Ö´Ðмƻ®µÄSQLÓï¾ä

 

SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]

²Î¿¼Îĵµ£ºSQLPlus User's Guide and Reference Release 11.1

×¢Ò⣺PL/SQL Developer ¹¤¾ß²¢²»Íêȫ֧³ÖËùÓеÄSQL*PlusÃüÁÏñSET AUTOTRACE ON ¾ÍÈç´Ë£¬ÔÚPL/SQL Developer¹¤¾ßÏÂÖ´ÐдËÃüÁî»á±¨´í

SQL> SET AUTOTRACE ON;

Cannot SET AUTOTRACE

4£ºSQL_TRACE¿ÉÒÔ×÷Ϊ²ÎÊýÔÚÈ«¾ÖÆôÓã¬Ò²¿ÉÒÔͨ¹ýÃüÁîÐÎʽÔÚ¾ßÌåSESSIONÆôÓÃ

4.1 ÔÚÈ«¾ÖÆôÓã¬ÔÚ²ÎÊýÎļþ£¨pfile/spfile)ÖÐÖ¸¶¨SQL_TRACE =true£¬ÔÚÈ«¾ÖÆôÓÃSQL_TRACEʱ»áµ¼ÖÂËùÓнø³Ì»î¶¯±»¸ú×Ù£¬°üÀ¨ºǫ́½ø³ÌÒÔ¼°Óû§½ø³Ì£¬Í¨³£»áµ¼Ö±ȽÏÑÏÖØµÄÐÔÄÜÎÊÌ⣬ËùÒÔÔÚÉú²ú»·¾³Òª½÷É÷ʹÓá£

Ìáʾ£ºÍ¨¹ýÔÚÈ«¾ÖÆôÓÃSQL_TRACE£¬ ÎÒÃÇ¿ÉÒÔ¸ú×Ùµ½ËùÓкǫ́½ø³ÌµÄ»î¶¯£¬ºÜ¶àÔÚÎĵµÖеijéÏó˵Ã÷£¬Í¨¹ý¸ú×ÙÎļþµÄʵʱ±ä»¯£¬ÎÒÃÇ¿ÉÒÔÇåÎúµÄ¿´µ½¸÷¸ö½ø³Ì¼äµÄ½ôÃÜЭµ÷¡£

4.2ÔÚµ±Ç°SESSION¼¶±ðÉèÖã¬Í¨¹ý¸ú×Ùµ±Ç°½ø³Ì¿ÉÒÔ·¢ÏÖµ±Ç°²Ù×÷µÄºǫ́Êý¾Ý¿âµÝ¹é»î¶¯£¨ÕâÔÚÑо¿Êý¾Ý¿âÐÂÌØÐÔʱÓÈÆäÓÐЧ£©£¬Ñо¿SQLÖ´ÐÐʱ£¬·¢ÏÖºǫ́

´íÎóµÈ¡£

SQL> ALTER SESSION SET SQL_TRACE=TRUE;
SQL> SELECT * FROM SCOTT.EMP;
SQL> ALTER SESSION SET SQL_TRACE =FALSE;

 

ÄÇô´ËʱÈçºÎ²é¿´Ïà¹ØÐÅÏ¢£¿²»¹ÜÄãÔÚSQL*PLUSÒÖ»òPL/SQL DEVELOPER¹¤¾ßÀïÃæÖ´ÐÐÉÏÃæ½Å±¾¹ýºó¶¼¿´²»µ½Ê²Ã´ÐÅÏ¢£¬Äã¿ÉÒÔͨ¹ýÏÂÃæ½Å±¾²éѯµ½traceÈÕÖ¾ÐÅÏ¢

SELECT T.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' ||
P.SPID || '.trc' TRACE_FILE_NAME
FROM
( SELECT P.SPID
FROM V$MYSTAT M, V$SESSION S, V$PROCESS P
WHERE M.STATISTIC# =1
AND S.SID = M.SID
AND P.ADDR = S.PADDR
) P,
( SELECT T.INSTANCE
FROM V$THREAD T, V$PARAMETER V
WHERE V.NAME ='thread'
AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))
) I,
(SELECT VALUE FROM V$PARAMETER WHERE NAME='user_dump_dest') T

TKPROFµÄ°ïÖúÐÅÏ¢ÈçÏÂ

TKPROF Ñ¡Ïî
Ñ¡Ïî ˵Ã÷
TRACEFILE ¸ú×ÙÊä³öÎļþµÄÃû³Æ
OUTPUTFILE ÒÑÉèÖøñʽµÄÎļþµÄÃû³Æ
SORT=option Óï¾äµÄÅÅÐò˳Ðò
PRINT=n ´òӡǰ n ¸öÓï¾ä
EXPLAIN=user/password ÒÔÖ¸¶¨µÄÓû§ÃûÔËÐÐ EXPLAIN PLAN
INSERT=filename Éú³É INSERT Óï¾ä
SYS=NO ºöÂÔ×÷ΪÓû§ sys ÔËÐеĵݹé SQL Óï¾ä
AGGREGATE=[Y|N] Èç¹ûÖ¸¶¨ AGGREGATE = NO TKPROF ²»¾Û¼¯Ïàͬ
SQL Îı¾µÄ¶à¸öÓû§
RECORD=filename ¼Ç¼ÔÚ¸ú×ÙÎļþÖз¢ÏÖµÄÓï¾ä
TABLE=schema.tablename ½«Ö´Ðмƻ®·ÅÈëÖ¸¶¨µÄ±í¶ø²»ÊÇȱʡµÄPLAN_TABLE

¿ÉÒÔÔÚ²Ù×÷ϵͳÖмüÈë tkprof ÒÔ»ñµÃËùÓпÉÓÃÑ¡ÏîºÍÊä³öµÄÁбí
×¢ ÅÅÐòÑ¡ÏîÓÐ

ÅÅÐò Ñ¡Ïî˵Ã÷
prscnt execnt fchcnt µ÷Ó÷ÖÎöÖ´ÐÐÌáÈ¡µÄ´ÎÊý
prscpu execpu fchcpu ·ÖÎöÖ´ÐÐÌáÈ¡ËùÕ¼ÓÃµÄ CPU ʱ¼ä
prsela exela fchela ·ÖÎöÖ´ÐÐÌáÈ¡ËùÕ¼ÓõÄʱ¼ä
prsdsk exedsk fchdsk ·ÖÎöÖ´ÐÐÌáÈ¡ÆÚ¼äµÄ´ÅÅ̶ÁÈ¡´ÎÊý
prsqry exeqry fchqry ·ÖÎöÖ´ÐÐÌáÈ¡ÆÚ¼äÓÃÓÚ³ÖÐø¶ÁÈ¡µÄ»º³åÇøÊý
prscu execu fchcu ·ÖÎöÖ´ÐÐÌáÈ¡ÆÚ¼äÓÃÓÚµ±Ç°¶ÁÈ¡µÄ»º³åÇøÊý
prsmis exemis ·ÖÎöÖ´ÐÐÆÚ¼ä¿â¸ßËÙ»º´æÎ´ÃüÖеĴÎÊý
exerow fchrow ·ÖÎöÖ´ÐÐÆÚ¼ä´¦ÀíµÄÐÐÊý
userid ·ÖÎöÓαêµÄÓû§µÄÓû§ ID

TKPROF ͳ¼ÆÊý¾Ý
Count: Ö´Ðе÷ÓÃÊý
CPU: CPU µÄʹÓÃÃëÊý
Elapsed: ×ܹ²ÓÃÈ¥µÄʱ¼ä
Disk: ÎïÀí¶ÁÈ¡´ÎÊý
Query: ³ÖÐø¶ÁÈ¡µÄÂß¼­¶ÁÈ¡Êý
Current: µ±Ç°Ä£Ê½ÏµÄÂß¼­¶ÁÈ¡Êý
Rows: ÒÑ´¦ÀíÐÐÊý
TKPROF ͳ¼ÆÐÅÏ¢
ͳ¼Æ º¬Òå
Count ·ÖÎö»òÖ´ÐÐÓï¾äµÄ´ÎÊýÒÔ¼°ÎªÓï¾ä·¢³öµÄÌáÈ¡µ÷ÓÃÊý
CPU ÿ¸ö½×¶ÎµÄ´¦Àíʱ¼äÒÔÃëΪµ¥Î»Èç¹ûÔÚ¹²Ïí³ØÖÐÕÒµ½¸ÃÓï¾ä¶ÔÓÚ·ÖÎö½×¶ÎΪ 0
Elapsed Õ¼ÓÃʱ¼äÒÔÃëΪµ¥Î»Í¨³£²»ÊǷdz£ÓÐÓÃÒòΪÆäËü½ø³ÌÓ°ÏìÕ¼ÓÃʱ¼ä
Disk ´ÓÊý¾Ý¿âÎļþ¶ÁÈ¡µÄÎïÀíÊý¾Ý¿éÈç¹û¸ÃÊý¾Ý±»»º³åÔò¸Ãͳ¼Æ¿ÉÄܺܵÍ
Query Ϊ³ÖÐø¶ÁÈ¡¼ìË÷µÄÂß¼­»º³åÇøÍ¨³£ÓÃÓÚ SELECT Óï¾ä
Current ÔÚµ±Ç°Ä£Ê½Ï¼ìË÷µÄÂß¼­»º³åÇøÍ¨³£ÓÃÓÚ DML Óï¾ä
Rows ÍⲿÓï¾äËù´¦ÀíµÄÐжÔÓÚ SELECT Óï¾äÔÚÌáÈ¡½×¶ÎÏÔʾËü¶ÔÓÚ DML Óï¾äÔÚÖ´Ðн׶ÎÏÔʾËü

Query ºÍCurrent µÄ×ܺÍΪËù·ÃÎʵÄÂß¼­»º³åÇøµÄ×ÜÊý

Ö´ÐÐÏÂÃæÃüÁtkprof D:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\TRACE/wgods_ora_3940.trc h:\out.txtoutputfile explain=etl/etl

Ö´ÐÐÉÏÃæÃüÁîºó£¬¿ÉÒԲ鿴Éú³ÉµÄÎı¾Îļþ


TKPROF: Release 10.2.0.1.0 - Production on ÐÇÆÚÈý 5ÔÂ 23 16:56:41 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Trace file: D: \ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\TRACE/ wgods_ora_3940.trc
Sort options: default

count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call

ALTER SESSION SET SQL_TRACE = TRUE
call count cpu elapsed disk query current rows

Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0

total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)

begin :id := sys.dbms_transaction.local _transaction_id; end;
call count cpu elapsed disk query current rows

Parse 2 0.00 0.00 0 0 0 0
Execute 2 0.00 0.00 0 0 0 2
Fetch 0 0.00 0.00 0 0 0 0

total 4 0.00 0.00 0 0 0 2
Misses in library cache during parse: 0
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)

SELECT *
FROM
SCOTT.EMP
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 2 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.00 0 7 0 14
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.00 0.00 0 7 0 14
Misses in library cache during parse: 1
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)
Rows Execution Plan
------- ---------------------------------------------------
SELECT STATEMENT MODE: CHOOSE
TABLE ACCESS MODE: ANALYZED (FULL) OF 'EMP' (TABLE)

ALTER SESSION SET SQL_TRACE = FALSE
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.00 0.00 0 0 0 0
Misses in library cache during parse: 1
Optimizer mode: CHOOSE
Parsing user id: 89 (ETL)

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 5 0.00 0.00 0 0 0 0
Execute 5 0.00 0.00 0 0 0 2
Fetch 1 0.00 0.00 0 7 0 14
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 11 0.00 0.00 0 7 0 16
Misses in library cache during parse: 2
Misses in library cache during execute: 1
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0 0
Execute 0 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 0 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
user SQL statements in session.
internal SQL statements in session.
SQL statements in session.
statement EXPLAINed in this session.
******************* ****************************** *******************************
Trace file: D:\ORACLE\PRODUCT\10.2.0 \DB_1 \RDBMS\TRACE/wgods_ora_3940.trc
Trace file compatibility: 10.01.00
Sort options: default
session in tracefile.
user SQL statements in trace file.
internal SQL statements in trace file.
SQL statements in trace file.
unique SQL statements in trace file.
SQL statements EXPLAINed using schema:
ETL.prof$plan_table
Default table was used.
Table was created.
Table was dropped.
lines in trace file.
elapsed seconds in trace file.

 

4.3¸ú×ÙÆäËüÓû§µÄ½ø³Ì£¬ÔںܶàʱºòÎÒÃÇÐèÒª¸ú×ÙÆäËüÓû§µÄ½ø³Ì£¬¶ø²»Êǵ±Ç°Óû§£¬¿ÉÒÔͨ¹ýORACLEÌṩµÄϵͳ°ü

DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSIONÀ´Íê³É¡£

ÀýÈ磺

SELECT SID, SERIAL#, USERNAME FROM V$SESSION WHERE USERNAME = 'ETL'
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,TRUE);
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,FALSE);

5 ÀûÓÃ10046ʼþ


ALTER SESSION SET TRACEFILE_IDENTIFIER = 10046;
ALTER SESSION SET EVENTS='10046 trace name context forever, level 8';
SELECT * FROM SCOTT.EMP;
ALTER SESSION SET EVENTS ='10046 trace name context off';
È»ºóÄã¿ÉÒÔÓýű¾²é¿´×·×ÙÎļþµÄλÖÃ
SELECT T.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' ||
P.SPID || '.trc' TRACE_FILE_NAME
FROM
( SELECT P.SPID
FROM V$MYSTAT M, V$SESSION S, V$PROCESS P
WHERE M.STATISTIC# =1
AND S.SID = M.SID
AND P.ADDR = S.PADDR
) P,
( SELECT T.INSTANCE
FROM V$THREAD T, V$PARAMETER V
WHERE V.NAME ='thread'
AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))
) I,
(SELECT VALUE FROM V$PARAMETER WHERE NAME='user_dump_dest') T
²éѯ½á¹ûΪwgods_ora_28279.trcÎļþ£¬ µ«ÊÇÈ¥ÏàӦĿ¼ȴûÓÐÕÒµ½¶ÔÓ¦µÄ×·×ÙÎļþ£¬¶øÊÇÈçÏÂtraceÎļþ£ºwgods_ora_28279_10046.trc

6 ÀûÓÃ10053ʼþ

ÓеãÀàËÆ10046£¬ÔÚ´ËÂÔ¹ý¡¢

7 ϵͳÊÓͼ

ͨ¹ýÏÂÃæÒ»Ð©ÏµÍ³ÊÓͼ£¬Äã¿ÉÒÔ¿´µ½Ò»Ð©ÁãÉ¢µÄÖ´Ðмƻ®µÄÏà¹ØÐÅÏ¢£¬ÓÐÐËȤµÄ»°¿ÉÒÔ¶àÈ¥Ñо¿Ò»Ï¡£


SELECT * FROM V$SQL_PLAN
SELECT * FROM V$RSRC_PLAN_CPU_MTH
SELECT * FROM V$SQL_PLAN_STATISTICS
SELECT * FROM V$SQL_PLAN_STATISTICS_ALL
SELECT * FROM V$SQLAREA_PLAN_HASH
SELECT * FROM V$RSRC_PLAN_HISTORY

Èý¡¢¿´¶®Ö´Ðмƻ®

1.Ö´ÐÐ˳Ðò

Ö´ÐÐ˳ÐòµÄÔ­ÔòÊÇ£ºÓÉÉÏÖÁÏ£¬´ÓÓÒÏò×ó

ÓÉÉÏÖÁÏ£ºÔÚÖ´Ðмƻ®ÖÐÒ»°ãº¬Óжà¸ö½Úµã£¬Ïàͬ¼¶±ð(»ò²¢ÁÐ)µÄ½Úµã£¬¿¿ÉϵÄÓÅÏÈÖ´ÐУ¬¿¿ÏµĺóÖ´ÐÐ

´ÓÓÒÏò×ó£ºÔÚij¸ö½ÚµãÏ»¹´æÔÚ¶à¸ö×ӽڵ㣬ÏÈ´Ó×î¿¿ÓÒµÄ×ӽڵ㿪ʼִÐС£

µ±È»£¬ÄãÔÚPL/SQL¹¤¾ßÖÐÒ²¿ÉÒÔͨ¹ýËüÌṩµÄ¹¦ÄÜÀ´²é¿´Ö´ÐÐ˳Ðò¡£ÈçÏÂͼËùʾ£º

2.Ö´Ðмƻ®ÖÐ×ֶνâÊÍ

 

SQL>

Ãû´Ê½âÊÍ£º

recursive calls:µÝ¹éµ÷ÓÃ

db block gets:´Óbuffer cacheÖжÁÈ¡µÄblockµÄÊýÁ¿µ±Ç°ÇëÇóµÄ¿éÊýÄ¿£¬µ±Ç°Ä£Ê½¿éÒâ˼¾ÍÊÇÔÚ²Ù×÷ÖÐÕýºÃÌáÈ¡µÄ¿éÊýÄ¿£¬¶ø²»ÊÇÔÚÒ»ÖÂÐÔ¶ÁµÄÇé¿ö϶ø²úÉúµÄÕý³£Çé¿öÏ£¬Ò»¸ö²éѯÌáÈ¡µÄ¿éÊÇÔÚ²éѯ²éѯ¿ªÊ¼µÄÄǸöʱ¼äµãÉÏ´æÔÚµÄÊý¾Ý¿â£¬µ±Ç°¿éÊÇÔÚÕâ¸öʱºò´æÔÚÊý¾Ý¿é£¬¶ø²»ÊÇÕâ¸öʱ¼äµã֮ǰ»òÕßÖ®ºóµÄµÄÊý¾Ý¿éÊýÄ¿¡£

consistent gets:´Óbuffer cacheÖжÁÈ¡µÄundoÊý¾ÝµÄblockµÄÊýÁ¿Êý¾ÝÇëÇó×ÜÊýÔڻعö¶ÎBufferÖеÄÊý¾ÝÒ»ÖÂÐÔ¶ÁËùÐèÒªµÄÊý¾Ý¿é£¬£¬ÕâÀïµÄ¸ÅÄîÊÇÔÚÄã´¦ÀíÄãÕâ¸ö²Ù×÷µÄʱºîÐèÒªÔÚÒ»ÖÂÐÔ¶Á״̬ÉÏ´¦Àí¶à¸ö¿é£¬ÕâЩ¿é²úÉúµÄÖ÷ÒªÔ­ÒòÊÇÒòΪÄãÔÚ²éѯ¹ý³ÌÖУ¬ÓÉÓÚÆäËü»á»°¶ÔÊý¾Ý ¿é½øÐвÙ×÷£¬¶ø¶ÔËùÒª²éѯµÄ¿éÓÐÁËÐ޸쬵«ÊÇÓÉÓÚÎÒÃǵIJéѯÊÇÔÚÕâЩÐÞ¸Ä֮ǰµ÷Óõģ¬ËùÒªÐèÒª¶Ô»Ø¹ö ¶ÎÖеÄÊý¾Ý¿éµÄǰӳÏñ½øÐвéѯ£¬ÒÔ±£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ¡£ÕâÑù¾Í²úÉúÁËÒ»ÖÂÐÔ¶Á¡£

physical reads :ÎïÀí¶Á¾ÍÊÇ´Ó´ÅÅÌÉ϶ÁÈ¡Êý¾Ý¿éµÄÊýÁ¿¡£Æä²úÉúµÄÖ÷ÒªÔ­ÒòÊÇ£º

1£ºÔÚÊý¾Ý¿â¸ßËÙ»º´æÖв»´æÔÚÕâЩ¿é¡£

2£ºÈ«±íɨÃè

3£º´ÅÅÌÅÅÐò

redo size:DMLÉú³ÉµÄredoµÄ´óС

sorts (memory) :¡¡ÔÚÄÚ´æÖ´ÐеÄÅÅÐòÁ¿

sorts (disk):ÔÚ´ÅÅÌÖ´ÐеÄÅÅÐòÁ¿

2091 bytes sent via SQL*Net to client:´ÓSQL*NetÏò¿Í»§¶Ë·¢ËÍÁË2091×Ö½ÚµÄÊý¾Ý

416 bytes received via SQL*Net from client:¿Í»§¶ËÏòSQL*Net·¢ËÍÁË416×Ö½ÚµÄÊý¾Ý¡£

²Î¿¼Îĵµ£ºSQLPlus User's Guide and Reference Release 11.1

db block gets ¡¢ consistent gets ¡¢ physical readsÕâÈýÕߵĹØÏµ¿ÉÒÔ¸ÅÀ¨Îª£ºÂß¼­¶ÁÖ¸µÄÊÇORACLE´ÓÄÚ´æ¶Áµ½µÄÊý¾Ý¿é¿éÊýÁ¿£¬Ò»°ãÀ´ËµÊÇ£º

consistent gets + db block gets. µ±ÔÚÄÚ´æÖÐÕÒ²»µ½ËùÐèÒªµÄÊý¾Ý¿éµÄ»°£¬¾ÍÐèÒª´Ó´ÅÅÌÖлñÈ¡£¬ÓÚÊǾͲúÉúÁËÎïÀí¶Á¡£

3.¾ßÌåÄÚÈݲ鿴

1> Plan hash Value

ÕâÒ»ÐÐÊÇÕâÒ»ÌõÓï¾äµÄµÄhashÖµ£¬ÎÒÃÇÖªµÀORACLE¶ÔÿһÌõORACLEÓï¾ä²úÉúµÄÖ´Ðмƻ®·ÅÔÚSHARE POOLÀïÃæ£¬µÚÒ»´ÎÒª¾­¹ýÓ²½âÎö£¬²úÉúhashÖµ¡£Ï´ÎÔÙÖ´ÐÐʱ±È½ÏhashÖµ£¬Èç¹ûÏàͬ¾Í²»»áÖ´ÐÐÓ²½âÎö¡£

2> COST

COSTûÓе¥Î»£¬ÊÇÒ»¸öÏà¶ÔÖµ£¬ÊÇSQLÒÔCBO·½Ê½½âÎöÖ´Ðмƻ®Ê±£¬¹©ORACLEÀ´ÆÀ¹ÀCBO³É±¾£¬Ñ¡ÔñÖ´Ðмƻ®Óõġ£Ã»ÓÐÃ÷È·µÄº¬Ò壬µ«ÊÇÔÚ¶Ô±ÈÊǾͷdz£ÓÐÓá£

¹«Ê½£ºCOST=£¨Single Block I/O COST + MultiBlock I/O Cost + CPU Cost£©/ Sreadtim

3> ¶ÔÉÏÃæÖ´Ðмƻ®ÁÐ×ֶεĽâÊÍ£º

Id: Ö´ÐÐÐòÁУ¬µ«²»ÊÇÖ´ÐеÄÏȺó˳Ðò¡£Ö´ÐеÄÏȺó¸ù¾ÝOperationËõ½øÀ´Åжϣ¨²ÉÓÃ×îÓÒ×îÉÏ×îÏÈÖ´ÐеÄÔ­Ôò¿´²ã´Î¹ØÏµ£¬ÔÚͬһ¼¶Èç¹ûij¸ö¶¯×÷ûÓÐ×ÓID¾Í×îÏÈÖ´ÐС£Ò»°ã°´Ëõ½ø³¤¶ÈÀ´Åжϣ¬Ëõ½ø×î´óµÄ×îÏÈÖ´ÐУ¬Èç¹ûÓÐ2ÐÐËõ½øÒ»Ñù£¬ÄÇô¾ÍÏÈÖ´ÐÐÉÏÃæµÄ¡££©

Operation£ºµ±Ç°²Ù×÷µÄÄÚÈÝ¡£

Name£º²Ù×÷¶ÔÏó

Rows£ºÒ²¾ÍÊÇ10g°æ±¾ÒÔǰµÄCardinality(»ùÊý)£¬Oracle¹À¼Æµ±Ç°²Ù×÷µÄ·µ»Ø½á¹û¼¯ÐÐÊý¡£

Bytes£º±íʾִÐиò½Öèºó·µ»ØµÄ×Ö½ÚÊý¡£

Cost£¨CPU£©£º±íʾִÐе½¸Ã²½ÖèµÄÒ»¸öÖ´Ðгɱ¾£¬ÓÃÓÚ˵Ã÷SQLÖ´ÐеĴú¼Û¡£

Time£ºOracle ¹À¼Æµ±Ç°²Ù×÷µÄʱ¼ä¡£

4.ν´Ê˵Ã÷£º

Predicate Information (identified by operation id):

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

2 - filter("B"."MGR" IS NOT NULL)

4 - access("A"."EMPNO" = "B"."MGR")

Access: ±íʾÕâ¸öν´ÊÌõ¼þµÄÖµ½«»áÓ°ÏìÊý¾ÝµÄ·ÃÎÊ·¾¢£¨È«±íɨÃ軹ÊÇË÷Òý£©¡£

Filter£º±íʾν´ÊÌõ¼þµÄÖµ²»»áÓ°ÏìÊý¾ÝµÄ·ÃÎÊ·¾¢£¬Ö»Æð¹ýÂ˵Ä×÷Óá£

ÔÚν´ÊÖÐÖ÷ҪעÒâaccess£¬Òª¿¼ÂÇν´ÊµÄÌõ¼þ£¬Ê¹ÓõķÃÎÊ·¾¶ÊÇ·ñÕýÈ·¡£

5¡¢ ¶¯Ì¬·ÖÎö

Èç¹ûÔÚÖ´Ðмƻ®ÖÐÓÐÈçÏÂÌáʾ£º

Note

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

-dynamic sampling used for the statement

ÕâÌáʾÓû§CBOµ±Ç°Ê¹Óõļ¼Êõ£¬ÐèÒªÓû§ÔÚ·ÖÎö¼Æ»®Ê±¿¼Âǵ½ÕâЩÒòËØ¡£ µ±³öÏÖÕâ¸öÌáʾ£¬ËµÃ÷µ±Ç°±íʹÓÃÁ˶¯Ì¬²ÉÑù¡£ÎÒÃÇ´Ó¶øÍƶÏÕâ¸ö±í¿ÉÄÜûÓÐ×ö¹ý·ÖÎö¡£

ÕâÀï»á³öÏÖÁ½ÖÖÇé¿ö£º

£¨1£© Èç¹û±íûÓÐ×ö¹ý·ÖÎö£¬ÄÇôCBO¿ÉÒÔͨ¹ý¶¯Ì¬²ÉÑùµÄ·½Ê½À´»ñÈ¡·ÖÎöÊý¾Ý£¬Ò²¿ÉÒÔ»òÕßÕýÈ·µÄÖ´Ðмƻ®¡£

£¨2£© Èç¹û±í·ÖÎö¹ý£¬µ«ÊÇ·ÖÎöÐÅÏ¢¹ý¾É£¬ÕâʱCBO¾Í²»»áÔÚʹÓö¯Ì¬²ÉÑù£¬¶øÊÇʹÓÃÕâЩ¾ÉµÄ·ÖÎöÊý¾Ý£¬´Ó¶ø¿ÉÄܵ¼Ö´íÎóµÄÖ´Ðмƻ®¡£

ËÄ¡¢±í·ÃÎÊ·½Ê½

1.Full Table Scan (FTS) È«±íɨÃè

2.Index Lookup Ë÷ÒýɨÃè

There are 5 methods of index lookup:

index unique scan --Ë÷ÒýΨһɨÃè

ͨ¹ýΨһË÷Òý²éÕÒÒ»¸öÊýÖµ¾­³£·µ»Øµ¥¸öROWID£¬Èç¹û´æÔÚUNIQUE»òPRIMARY KEYÔ¼Êø£¨Ëü±£Ö¤ÁËÓï¾äÖ»´æÈ¡µ¥Ðеϰ£©£¬ORACLE

¾­³£ÊµÏÖΨһÐÔɨÃè

Method for looking up a single key value via a unique index. always returns a single value, You must supply AT LEAST the leading column of the index to access data via the index.

index range scan --Ë÷Òý¾Ö²¿É¨Ãè

Index range scan is a method for accessing a range values of a particular column. AT LEAST the leading column of the index must be supplied to access data via the index. Can be used for range operations (e.g. > < <> >= <= between) .

ʹÓÃÒ»¸öË÷Òý´æÈ¡¶àÐÐÊý¾Ý£¬ÔÚΨһË÷ÒýÉÏʹÓÃË÷Òý·¶Î§É¨ÃèµÄµäÐÍÇé¿öÊÇÔÚν´Ê(WHERE ÏÞÖÆÌõ¼þ)ÖÐʹÓÃÁË·¶Î§²Ù×÷·ûºÅ£¨Èç>, < <>, >=, <=,BWTEEN)

index full scan --Ë÷ÒýÈ«¾ÖɨÃè

Full index scans are only available in the CBO as otherwise we are unable to determine whether a full scan would be a good idea or not. We choose an index Full Scan when we have statistics that indicate that it is going to be more efficient than a Full table scan and a sort. For example we may do a Full index scan when we do an unbounded scan of an index and want the data to be ordered in the index order.

index fast full scan --Ë÷Òý¿ìËÙÈ«¾ÖɨÃ裬²»´øorder byÇé¿öϳ£·¢Éú

Scans all the block in the index, Rows are not returned in sorted order, Introduced in 7.3 and requires V733_PLANS_ENABLED=TRUE and CBO, may be hinted using INDEX_FFS hint, uses multiblock i/o, can be executed in parallel, can be used to access second column of concatenated indexes. This is because we are selecting all of the index.

index skip scan --Ë÷ÒýÌøÔ¾É¨Ã裬whereÌõ¼þÁÐÊÇ·ÇË÷ÒýµÄǰÌáÇé¿öϳ£·¢Éú

Index skip scan finds rows even if the column is not the leading column of a concatenated index. It skips the first column(s) during the search.

3.Rowid ÎïÀíIDɨÃè

This is the quickest access method available.Oracle retrieves the specified block and extracts the rows it is interested in. --RowidɨÃèÊÇ×î¿ìµÄ·ÃÎÊÊý¾Ý·½Ê½

   
2685 ´Îä¯ÀÀ       32
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ