±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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ɨÃèÊÇ×î¿ìµÄ·ÃÎÊÊý¾Ý·½Ê½ |