HOME   ·Î±×ÀΠ  ȸ¿ø°¡ÀÔ
    
ȸ¿ø°¡ÀÔ
ºñ¹Ð¹øÈ£ ã±â ÀÚµ¿·Î±ä
ÀÌÀü°Ô½ÃÆÇ
   free_board
   °Ç°­°Ô½ÃÆÇ
   ¿À¶óŬDB
   Linux
   HTML/javascript
   Áú¹®°ú ´ä
È£¼­±â
   À̹ÌÁö°Ô½ÃÆÇ  
   °Ç°­°Ô½ÃÆÇ  
   À½¾ÇÀÚ·á  
   ¼ºÁØÀÌ °Ô½ÃÆÇ  
[ÀϹÝ] COST BASED OPTIMIZATION(CBO) AND HINTS AND RULE BASED OPTIMIZATION
  È£¼® ´Ô²²¼­ ¾´ ±ÛÀÔ´Ï´Ù - 121.¢½.39.7 ÀÐÀ½:3486  
COST BASED OPTIMIZATION(CBO) AND HINTS AND RULE BASED OPTIMIZATION
°Ô½ÃÀÏ: 2007. 1. 29 ¿ÀÀü 12:35         ´ñ±Û 
 
Á¦Ç° : SQL*PLUS

ÀÛ¼º³¯Â¥ : 2002-10-28

COST BASED OPTIMIZATION(CBO) AND HINTS AND RULE BASED OPTIMIZATION
==================================================================

PURPOSE


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

Cost based optimization, hint ±×¸®°í rule base optimization¿¡
°ü·ÃµÈ ¼³¸íÀÔ´Ï´Ù.

Explanation


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

1. CBO ¶õ?

Cost Based OptimizationÀº table ³»ÀÇ row¿Í columnÀÇ ºÐÆ÷¿¡ µû¶ó¼­ °¡Àå
ÀûÇÕÇÑ path¸¦ ã´Â Á¢±Ù ¹æ¹ýÀ̶ó ÇÒ ¼ö ÀÖ´Ù.
table ³»¿ë¿¡ ´ëÇÑ Åë°èÀû Á¤º¸´Â 'Analyze' ¹®Àå¿¡ ÀÇÇØ ±¸ÇØÁú ¼ö ÀÖ´Ù.

Syntax:

Analyze table <table name> estimate statistics;

ÀϹÝÀûÀ¸·Î Å« tableÀÎ °æ¿ì full table scanÀ» ÇÇÇϱâ À§ÇØ sample data¸¸
°¡Áö°í ÃøÁ¤ÇÏ´Â 'estimate statistics' optionÀ» ¾´´Ù.



Analyze index/cluster <index name/cluster name> compute statistics;

index¿Í cluster´Â table ³»ÀÇ Æ¯Á¤ key columnÀ¸·Î ±¸¼ºµÇ¾î Àֱ⠶§¹®¿¡
full scanÀ¸·Î °è»êÇÏ´Â °æ¿ì°¡ ¸¹´Ù.



2. Explain Plan º¸±â

Syntax:

Explain plan set statement_id='<Statement_id>'
<Query>;

¿¹:


Explain plan set statement_id='info1'
For select num from p;

°á°ú:

explain plan ¹®ÀÇ °á°ú´Â plan_table ¿¡ ÀúÀåÀÌ µÈ´Ù.
plan_tableÀ¸·ÎºÎÅÍ °á°ú¸¦ selectÇÏ´Â ¹®À» ¸¸µç´Ù¸é

select lpad(' ',2*(LEVEL - 1))||cardinality||' '||operation||' '
||options||' '||object_name||' '||decode(id,0,'Cost '||position)
"Query Plan"
from plan_table
start with id=0 and statement_id='info1'
connect by prior id=parent_id and statement_id='info1';

À§ QueryÀÇ °á°ú:

8 SELECT STATEMENT COST = 1
8 TABLE ACCESS FULL P

¿©±â¼­ 8 À̶õ table¿¡¼­ selectµÈ rowÀÇ ¼ö¸¦ ¸»ÇÑ´Ù.



3. CBO¿Í RBOÀÇ Â÷ÀÌÁ¡

Rule Based OptimizationÀº ¹Ì¸® Á¤ÇØÁø rule¿¡ µû¶ó execution planÀ»
Á¤ÇÏ´Â ¹æ¹ýÀÌ´Ù.
µû¶ó¼­, ¸Å¿ì selectivity°¡ ÁÁÁö ¾ÊÀº indexÀÎ °æ¿ì full table scanÀÌ
¿ÀÈ÷·Á ´õ ºü¸¥ ¹æ¹ýÀÌÁö¸¸ index scanÀ» ¼±ÅÃÇÑ´Ù.
(selectivity°¡ ÁÁ´Ù´Â °ÍÀº distinctÇÑ °ªÀÌ ¸¹´Ù´Â ÀǹÌÀÌ´Ù.)

CBO´Â ÇöÀçÀÇ Åë°èÁ¤º¸·ÎºÎÅÍ ¸ðµç search path¸¦ °í·ÁÇÏ¿© ½ÇÇà °èȹÀ» ¼ö¸³
ÇÑ´Ù. À§ÀÇ °æ¿ì CBO´Â full table scanÀ» ¼±ÅÃÇÑ´Ù.

¶ÇÇÑ CBOÀÇ cost engineÀº I/O cost, Network Cost, CPU cost µîÀ» °è»êÇϵµ·Ï
designµÇ¾î ÀÖ´Ù.



4. °ü·Ã Parameters

1) OPTIMIZER_MODE

: initialization file(initSID.ora)¿¡ settingµÇ¸ç RULE, CHOOSE,
ALL_ROWS, FIRST_ROWSÀÇ °ªÀ» °¡Áú ¼ö ÀÖ´Ù.

2) OPTIMIZER_GOAL


: session level·Î¸¸ »ç¿ëµÇ¾î Áø´Ù.

Alter session set OPTIMIZER_GOAL = FIRST_ROWS;

FIRST_ROWS ´Â Best response timeÀ» À§ÇÑ Á¢±Ù ¹æ¹ýÀ¸·Î °Ë»öµÇ´Â
row°¡ ÀûÀº interactive application¿¡ ÀûÇÕÇÏ´Ù.

Alter session set OPTIMIZER_GOAL = ALL_ROWS;

ALL_ROWS ´Â Best throughputÀ» À§ÇÑ Á¢±Ù ¹æ¹ýÀ¸·Î batch operation
µî¿¡ ÀûÇÕÇÏ´Ù.

3) SORT_AREA_SIZE

: Å« °ªÀÏ ¼ö·Ï sort cost´Â ´õ ÁÁ¾ÆÁö°í sort merge joinÀ» ´õ ¸¹ÀÌ ÇÏ°Ô
µÈ´Ù.

4) DB_FILE_MULTIBLOCK_READ_COUNT

: Å« °ªÀÏ ¼ö·Ï table scan cost°¡ ´õ ÁÁ¾ÆÁö°í selectivity°¡ ÁÁÁö ¾ÊÀº
indexÀÎ °æ¿ì index scanº¸´Ù´Â full table scanÀ» ¼±È£ÇÑ´Ù.

5) HASH_AREA_SIZE

: Å« °ªÀÏ ¼ö·Ï sort cost´Â ´õ ÁÁ¾ÆÁö°í sort merge joinÀ» ´õ ¸¹ÀÌ ÇÏ°Ô
µÈ´Ù.


6) OPTIMIZER_PERCENT_PARALLEL

: optimizer°¡ »ç¿ëÇÏ´Â parallelismÀÇ ¾çÀ» Á¤ÀÇÇÑ´Ù.(0 - 100)
default´Â 0Àε¥ ÀÌ ¶§´Â optimizer°¡ best serial planÀ» ¼±ÅÃÇϸç,
100ÀÎ °æ¿ì optimizer´Â full table scanÀÇ cost¸¦ °è»êÇÒ ¶§ °¢
objectÀÇ parallel degree¸¦ »ç¿ëÇÑ´Ù.
µû¶ó¼­ ³·À» ¼ö·Ï index¸¦, ³ôÀ» ¼ö·Ï full table scanÀ» ¼±È£ÇÑ´Ù.



5. HINTÀÇ »ç¿ë

ALL_ROWS, FIRST_ROWS, CHOOSE, RULE, FULL,
ROWID, CLUSTER, HASH, INDEX, INDEX_ASC

¿¹) OPTIMIZER_MODE=CHOOSE (init.ora)
TABLE : P , P2
INDEX : P tableÀÇ column num¿¡ index P1
P2 tableÀÇ column num¿¡ index i2

SQL> select * from p;


NUM DATA



--------------------------------------------------------------------------------
----------
7 hsdh
6 wqe
1 as
2 sdq
3 sdfcsd
4 sda
5 sad
6 sdfs
7 dsfesdf

9 rows selected.

SQL> select * from p2

NUM DATA
--------------------------------------------------------------------------------
 ----------
1 sda
2 sda
3 jkj
4 jkj
4 uwqe
8 uwqe
9 wqe
2 wqe

8 rows selected.

¾Æ·¡ÀÇ analyze ¹®À» ¼öÇàÇÑ´Ù.

analyze table p compute statistics for columns num size 10;
analyze table p2 compute statistics for columns num size 10;

column num¿¡ index°¡ ÀÖ°í, ±× column¿¡ cluster c11ÀÌ ÀÖ´Â table gam°ú
cmg¸¦ ¸¸µç´Ù.


create cluster c11 (num_c number);
create table gam (num number, data ...
cluster c11(num));


INDEX : cluster c11 ¿¡ index ic11
table gamÀÇ num column¿¡ index igam
table icmgÀÇ num column¿¡ index icmg

Table Gam :



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

NUM DATA


--------------------------------------------------------------------------------
----------
1 2312
1 54
5 54
5 dfg
5 fh
2 fh
7 fh
7 a

Table cmg :


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

NUM DATA
--------------------------------------------------------------------------------
 ----------
1 sda
5 hgffadf
2 sda
2 hgffadf
3 sda
3 sdfsadf
3 sadfadf
3 hgffadf
3 hgffadf
6 hgffadf
8 hgffadf

¾Æ·¡ÀÇ analyze ¹®À» ¼öÇàÇÑ´Ù.

analyze table gam estimate statistics for columns num size 10;
analyze table cmg estimate statistics for columns num size 10;
analyze index igam compute statistics;
analyze index icmg compute statistics;
analyze cluster c11 compute statistics;
analyze index ic11 compute statistics;

1) ALL_ROWS


ALL_ROWS´Â full table scanÀ» ¼±È£Çϸç CBO´Â default·Î ALL_ROWS¸¦
¼±ÅÃÇÑ´Ù.


explain plan set statement_id='cbo1' for
select /*+ ALL_ROWS */ num, data from p where num = 7

Query Plan


--------------------------------------------------------------------------------
5 SELECT STATEMENT Cost 1
5 TABLE ACCESS FULL P

cluster index¸¦ °¡Áö°í ÀÖ´Â gam tableÀº full table scanº¸´Ù´Â
index scanÀ» ¼±ÅÃÇÑ´Ù.

explain plan set statement_id='cbo1' for
select /*+ ALL_ROWS */ num, data from gam where num=7

Query Plan


--------------------------------------------------------------------------------
2 SELECT STATEMENT Cost 1
2 TABLE ACCESS CLUSTER GAM
INDEX UNIQUE SCAN IC11

2) FIRST_ROWS

full table scanº¸´Ù´Â index scanÀ» ¼±È£Çϸç interactive
applicationÀÎ °æ¿ì best response timeÀ» Á¦°øÇÑ´Ù. ¶ÇÇÑ sort
merge joinº¸´Ù´Â nested loop joinÀ» ¼±È£ÇÑ´Ù.

explain plan set statement_id='cbo1' for
select /*+ FIRST_ROWS */ num,data from gam where num=7

Query Plan
--------------------------------------------------------------------------------
 2 SELECT STATEMENT Cost 1
2 TABLE ACCESS CLUSTER GAM
INDEX UNIQUE SCAN IC11

explain plan set statement_id='cbo2' for
select /*+ FIRST_ROWS */ p.num,p.data from p,p2
where p.num = p2.num

Query Plan

--------------------------------------------------------------------------------
40 SELECT STATEMENT Cost 1
40 NESTED LOOPS
9 TABLE ACCESS FULL P
8 INDEX RANGE SCAN I2

ÀÌ ¶§ clusterÀÇ À¯¹«¿¡ µû¶ó Cost°¡ Ʋ·ÁÁö´Â °ÍÀ» gam°ú cmg table
À» Á¶È¸ÇØ º½À¸·Î½á ¾Ë ¼ö ÀÖ´Ù.

explain plan set statement_id='cbo1' for
select /*+ FIRST_ROWS */ gam.num,gam.data from gam,cmg
where gam.num=cmg.num

Query Plan

--------------------------------------------------------------------------------
15 SELECT STATEMENT Cost 2
15 NESTED LOOPS
8 TABLE ACCESS FULL GAM
11 INDEX RANGE SCAN ICMG

¶Ç select list¿¡ µû¶ó index scanÀ» ÇÏ´Â tableÀÌ ¹Ù²ð ¼öµµ ÀÖ´Ù.

explain plan set statement_id='cbo2' for
select /*+ FIRST_ROWS */ p2.num,p2.data from p,p2
where p.num = p2.num

Query Plan

--------------------------------------------------------------------------------
40 SELECT STATEMENT Cost 1
40 NESTED LOOPS
9 TABLE ACCESS FULL P2
8 INDEX RANGE SCAN P1

Group by °¡ ÀÖ´Â SQL¹®Àº FIRST_RIWS°¡ ÀÖ´Ù ÇÏ´õ¶óµµ index scanÀ»
ÇÏÁö ¾Ê´Â´Ù.

explain plan set statement_id='cbo2' for
select /*+ FIRST_ROWS */ sum(p2.num) from p2 group by p2.num

Query Plan

--------------------------------------------------------------------------------
8 SELECT STATEMENT Cost 5
SORT GROUP BY
8 TABLE ACCESS FULL P2

3) CHOOSE

hint levelÀÇ CHOOSE´Â RBOÀÎÁö CBOÀÎÁö¸¦ ¼±ÅÃÇÑ´Ù.
¸¸¾à ÁÖ¾îÁø tableÀÇ Åë°è Á¤º¸°¡ ¾ø´Ù¸é Rule Based Á¢±Ù ¹æ½ÄÀ» »ç¿ëÇÑ´Ù.


explain plan set statement_id='cbo2' for
select /*+ CHOOSE */ sum(p2.num) from p2 group by p2.num

Query Plan



--------------------------------------------------------------------------------
8 SELECT STATEMENT Cost 5
SORT GROUP BY
8 TABLE ACCESS FULL P2

4) RULE

Rule Based Á¢±Ù ¹æ½ÄÀ» »ç¿ëÇϵµ·Ï ÁöÁ¤ÇÑ´Ù.

explain plan set statement_id='cbo2' for
select /*+ RULE */ sum(test.num)
from test
group by test.num

Query Plan
--------------------------------------------------------------------------------
 SELECT STATEMENT Cost
SORT GROUP BY
TABLE ACCESS FULL P2

5) FULL

index°¡ ÀÖÁö¸¸ selectivity°¡ ÁÁÁö ¾ÊÀº °æ¿ì full table scanÀ» ¼±ÅÃ
Çϵµ·Ï ÇÑ´Ù.

explain plan set statement_id='cbo2' for
select /*+ FULL(p) */ num,data from p where num=7

Query Plan



--------------------------------------------------------------------------------
5 SELECT STATEMENT Cost 1
5 TABLE ACCESS FULL P

6) ROWID

rowid·Î table scanÀ» Çϵµ·Ï ÁöÁ¤ÇÑ´Ù.

explain plan set statement_id='cbo4' for
select /*+ ROWID(p) */ num, data from p where num=7

Query Plan
--------------------------------------------------------------------------------
 5 SELECT STATEMENT Cost 1
5 TABLE ACCESS FULL P

gam tableÀ» »ç¿ëÇÏ´Â °æ¿ì¿¡´Â index cluster IC11À» »ç¿ëÇÏ´Â °ÍÀ»
¾Ë ¼ö ÀÖ´Ù.

explain plan set statement_id='cbo1' for
select /* ROWID(gam) */ num,data from gam where num=7;

Query plan
--------------------------------------------------------------------------------
 2 SELECT STATEMENT Cost 1
2 TABLE ACCESS CLUSTER GAM
INDEX UNIQUE SCAN IC11

7) CLUSTER

cluster scanÀ» ¼±ÅÃÇϵµ·Ï ÁöÁ¤ÇÑ´Ù. µû¶ó¼­ clustered objectµé¿¡¸¸
Àû¿ëÀÌ µÈ´Ù.

gam tableÀº cluster scanÀ» ÇÏ°í cmg tableÀº index range scanÀ»
ÇÏ´Â ¿¹¸¦ µé¾î º¸ÀÚ.
join operation¿¡¼­ cluster hint¸¦ »ç¿ëÇϸé cost´Â ºñ±³Àû Àû°Ô µç´Ù.

explain plan set statement_id='cbo1' for
select /*+ CLUSTER(gam) */ gam.num,gam.data from gam,cmg
where gam.num=7
and gam.num=cmg.num

Query Plan
--------------------------------------------------------------------------------
 2 SELECT STATEMENT Cost 1
2 NESTED LOOPS
2 TABLE ACCESS CLUSTER GAM
INDEX UNIQUE SCAN IC11
2 INDEX RANGE SCAN ICMG

8) HASH

hash scanÀ» ¼±ÅÃÇϵµ·Ï ÁöÁ¤ÇÑ´Ù. ÀÌ hint´Â HASHKEYS parameter¸¦
°¡Áö°í ¸¸µé¾îÁø cluster³»¿¡ ÀúÀåµÈ table¿¡¸¸ Àû¿ëÀÌ µÈ´Ù.

eab table°ú gsh tableÀÌ ÀÖ°í °¢°¢ÀÇ table¿¡ ÀÖ´Â num column¿¡´Â
ieab, igsh¶ó´Â index °¡ ÀâÇôÁ® ÀÖ´Ù°í °¡Á¤ÇÑ´Ù.
HASKEY parameter¸¦ 2·Î ÇÑ num columnÀ» °¡Áø hash cluster c21À»
¸¸µç´Ù. eab table°ú gsh tableÀÌ cluster c21¿¡ ÁöÁ¤µÈ´Ù.

explain plan set statement_id='cbo1' for
select /*+ HASH(eab) */ eab.num,eab.data from eab,gsh
where eab.num=7 and eab.num=gsh.num;


Query Plan



--------------------------------------------------------------------------------
3 SELECT STATEMENT Cost 1
3 NESTED LOOPS
3 TABLE ACCESS HASH EAB
2 INDEX RANGE SCAN IGSH

9) INDEX

ÁöÁ¤µÈ index¸¦ °­Á¦ÀûÀ¸·Î ¾²µµ·Ï ÁöÁ¤ÇÑ´Ù.

explain plan set statement_id='cbo1' for
select /*+ INDEX(gam igam) */ num from gam where num =7

Query Plan



--------------------------------------------------------------------------------
2 SELECT STATEMENT Cost 1
2 INDEX RANGE SCAN IGAM

10) INDEX_ASC

ÁöÁ¤µÈ index¸¦ ¿À¸§Â÷¼øÀ¸·Î ¾²µµ·Ï ÁöÁ¤ÇÑ´Ù. default·Î index scan
Àº ¿À¸§Â÷¼øÀÌ´Ù.

select /*+ INDEX_ASC(gam igam) */ num from gam where num=7;

11) INDEX_DESC

ÁöÁ¤µÈ index¸¦ ³»¸²Â÷¼øÀ¸·Î ¾²µµ·Ï ÁöÁ¤ÇÑ´Ù.

select /*+ INDEX_DESC */ num from gam where num =7;

Query Plan


--------------------------------------------------------------------------------
2 SELECT STATEMENT Cost 1
2 INDEX RANGE SCAN DESCENDING IGAM

6. CBO¿¡¼­ ¾Ë¾ÆµÎ¾î¾ß ÇÒ ¸î °¡Áö

1) CBO´Â º¹ÀâÇÑ relationship¿¡¼­ ¶§·Î´Â ¾û¶×ÇÑ planÀ» ¼ö¸³ÇÒ ¼öµµ ÀÖ
´Âµ¥, ±×·± °æ¿ì hint¸¦ »ç¿ëÇÏ¿©¾ß ÇÑ´Ù.

2) CBO´Â join¿¡ À־ driving tableÀ» FROM ÀýÀÇ ¿ÞÂʺÎÅÍ ¼±ÅÃÇÑ´Ù.
ÀÌ´Â RBO¿Í´Â ¹Ý´ëÀÌ´Ù.

3) CBO´Â NESTED LOOP joinº¸´Ù´Â SORT-MERGE joinÀ» ±ÇÀåÇϹǷΠfirst
row¸¦ À§ÇÑ response time¿¡´Â ´Ê¾îÁú ¼ö ÀÖ´Ù.

4) table¿¡ ´ëÇÑ ANALYZE operationÀº ÀÚµ¿ÀûÀ¸·Î °ü·ÃµÈ index±îÁö Àû¿ë
ÀÌ µÈ´Ù.

5) table¿¡ ´ëÇÑ ANALYZE operationÀº ÁÖ±âÀûÀ¸·Î ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù.

6) FIRST_ROWS hint´Â order by¿Í °°ÀÌ ¾²ÀÏ ¶§¿¡´Â index scanÀ» ÇÏÁö
¾Ê°í SORT operationÀ» ¼öÇàÇÑ´Ù´Â Á¡¿¡ À¯ÀÇÇØ¾ß ÇÑ´Ù.


¸ñ·Ï

ºÐ·ù ¼±ÅÃ
104 ÀÏ¹Ý analyze Å×À̺í - Äõ¸® ÃÖÀûÈ­ Çϱâ È£¼® 08-10-23 3729
ÀÏ¹Ý COST BASED OPTIMIZATION(CBO) AND HINTS AND RULE BASED OPTIMIZATION È£¼® 09-01-07 3487
15 ÀÏ¹Ý DBMS_JOBÀÇ È°¿ë - ¿À¶óŬ Àâ¸Å´ÏÀú È£¼® 05-10-26 8265
  ÀÏ¹Ý    DBMS_JOBÀÇ È°¿ë - ¿À¶óŬ Àâ¸Å´ÏÀú È£¼® 05-10-28 3826
  ÀÏ¹Ý    DBMS_JOBÀÇ È°¿ë - ÀâÅ¥ÀÇ È®ÀÎ ¹× ½ÃÀÛ ¹× Á¦°Å È£¼® 05-10-31 3944
74 ÀÏ¹Ý decode È°¿ëÄõ¸® ºñ±³¿¬»êÀÚ ´ë¿ë sign() È£¼® 07-03-29 4291
90 ÀÏ¹Ý ENTERPRISE EDITION µ¥ÀÌÅͺ£À̽º¸¦ STANDARD EDITIONÀ¸·Î º¯°æÇÏ´Â ¹ý È£¼® 07-07-25 4768
37 ÀÏ¹Ý export dump ¾ÈµÉ¶§ È£¼® 06-02-17 4294
  ÀÏ¹Ý    export dump ¾ÈµÉ¶§ È£¼® 06-02-20 5129
28 ÀÏ¹Ý freetds ¼³Ä¡ È£¼® 05-11-10 3808
  ÀÏ¹Ý    freetds ¼³Ä¡ »ó¼¼¹æ¹ý (1) È£¼® 05-11-11 7264
109 ÀÏ¹Ý INDEX »ç¿ëÇϱâ mssql,oracle,mysql È£¼® 08-12-11 5856
133 ÀÏ¹Ý INDEXÀÇ »ç¿ë¿©ºÎ È®ÀÎÇϱâ È£¼® 11-04-01 1582
27 ÀÏ¹Ý    Linux Oralcle <-> MS SQL 2000 È£¼® 05-11-11 3717
131 ÀÏ¹Ý Linux ¹× Windows ȯ°æÀ» À§ÇÑ PHP, Oracle 10g Instant Client ¼³Ä¡ È£¼® 11-01-07 1662
1 [2] [3] [4] [5] [6] [7] [8] [9] [10]  ´ÙÀ½¸Ç³¡

 
Copyright © zenos.pe.kr. All rights reserved.