|
|
[ÀϹÝ] 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À» ¼öÇàÇÑ´Ù´Â Á¡¿¡ À¯ÀÇÇØ¾ß ÇÑ´Ù.
|
|
|
|
|
|