¿À¶óŬ Æ©´×
Æ©´×(tuning)À̶õ ºÒÇÊ¿äÇÑ ÀϵéÀ» ÃÖ¼ÒÈÇÏ´Â °ÍÀÌ´Ù.
º¸´Ù ÀûÀº ³ë·ÂÀ¸·Î ¸¹Àº °á°ú¸¦ ³»°íÀÚ Çϴ Ȱµ¿.
1. Æ©´×(Tuning) Overview
Æ÷·ÎÁ§Æ®¸¦ °³¹ßÇÔ¿¡ ÀÖ¾î ½ÃÀÛºÎÅÍ ³¡±îÁö Æ©´×¿¡ ´ëÇÑ ¸¶Àε带 °¡Áö°í ¸ðµç ÀÏÀ» ó¸®ÇÏ´Â °ÍÀÌ´Ù.
Æ©´×
ÀýÂ÷
¾ÖÇø®ÄÉÀÌ¼Ç ÇüÅ ¾ÖÇø®ÄÉÀÌ¼Ç ÇüŸ¦ ¾Ë¸é Æ©´× Æ÷ÀÎÆ®¸¦ ã´Âµ¥ µµ¿òÀÌ µÈ´Ù.
-
OLTP(Online Transaction Processing)
´ëºÎºÐÀÇ ¾÷¹«´Â Insert/Update ÀÌ´Ù. ¿¹) ÀºÇàÀÇ ¿Â¶óÀÎ ¾÷¹«, Ç×°ø»çÀÇ ¿¹¾à ¾÷¹«, ÁÖ¹® ½Ã½ºÅÛ
µ¥ÀÌÅÍÀÇ Á¤È®¼º°ú °¡¿ë¼ºÀÌ Áß¿ä.
Æ©´× Ç׸ñ ·Ñ¹é ¼¼±×¸ÕÆ®, À妽º, Ŭ·¯½ºÅÍ, ÇØ½Ì,
µ¥ÀÌÅÍ ºí·Ï Å©±â, Å×ÀÌºí ¶Ç´Â ·Ñ¹é ¼¼±×¸ÕÆ®ÀÇ µ¿Àû ÇÒ´ç, Æ®·£Àè¼Ç ó¸® ¸ð´ÏÅÍ, ¸ÖƼ ½º·¹µå ¼¹ö, SGA Shared Pool,
SQL ¹®Àå Æ©´×, ¿ÏÀü ¹«°á¼º Á¦¾à, ÇÁ·Î½ÃÀú, ÆÐŰÁö, ÇÔ¼ö
- DSS (Decision Support
System)
ÃàÀûµÈ ´ë·®ÀÇ Á¤º¸¸¦ °¡°øÇؼ ¹Ì·¡ÀÇ »ç½ÇÀ» À¯ÃßÇϴµ¥ ¸ñÀûÀÌ ÀÖ´Â ¾÷¹«ÀÌ´Ù. ´ëºÎºÐÀÇ ÀÛ¾÷Àº Read¿Í Join ÀÌ´Ù.
Æ©´× Ç׸ñ À妽º, Ŭ·¯½ºÅÍ, µ¥ÀÌÅÍ ºí·Ï Å©±â, º´·Ä Á¶È¸ ¿É¼Ç, ÃÖÀûÈ, Äõ¸® ¼öÇàÁß ¿À¶óŬ
ÈùÆ® »ç¿ë, PL/SQL ÇÔ¼ö »ç¿ë
- º¹ÀâÇÑ ¿¬»ê ¾ÖÇø®ÄÉÀ̼Ç(Scientific Application)
¿¹) ±â»óû°ú °°Àº ´ë±Ô¸ðÀÇ
¿¬»êÀ» ¼öÇàÇÏ´Â °÷.
Æ©´× Ç׸ñ PL/SQL, º´·Ä Äõ¸® ¿¬»ê, ÃÖÀûÈ, Äõ¸® »ç¿ë Áß ¿À¶óŬ ÈùÆ®
»ç¿ë.
- Ŭ¶óÀ̾ðÆ®/¼¹ö ¾ÖÇø®ÄÉÀ̼Ç
Æ©´× Ç׸ñ ÀúÀå ÇÁ·Î½ÃÀú, µ¥ÀÌÅͺ£À̽º
Æ®¸®°Å, ¿ÏÀü ¹«°á¼º Á¦¾à, ¹è¿ ÇÁ·Î¼¼½Ì, ½ÃÄö½º.
2. SQL Æ©´× ÃÖÀûÈ (Optimization)
µ¥ÀÌÅ͸¦ Á¶ÀÛÇÒ ¼ö ÀÖ´Â ÀÎÅÍÆäÀ̽º Áß¿¡¼ ´ëÇ¥ÀûÀÎ °ÍÀÌ SQLÀÌ´Ù. Optimization : ¾î¶»°Ô Çϸé
È¿À²ÀûÀ¸·Î ÃÖ¼ÒÀÇ ÀÚ¿øÀ» »ç¿ëÇÏ¿© ¿øÇÏ´Â °á°ú¸¦ ¾òÀ» °ÍÀΰ¡.
SQL
SQLÀÌ ¾î¶»°Ô ¼öÇàµÇ´ÂÁö¸¦ Àß
ÀÌÇØÇϰí ÀÖÀ¸¸é SQL¿¬»ê½Ã ¹«½¼ ÀÚ¿øÀÌ ÇÊ¿äÇÏ°í ¾î¶»°Ô Æ©´×ÇØ¾ß ÇÏ´ÂÁö ½±°Ô ¾Ë ¼ö ÀÖ´Ù.
[±×¸². RDBMÀÇ ³»ºÎ
ÇÁ·Î½ÃÀú »ó°ü °ü°è]
SQL˼
±â´É»ó DML°ú DDL·Î ³ª´ ¼ö ÀÖ´Ù.
DML
1´Ü°è : Ä¿¼ÀÇ »ý¼º
Ä¿¼´Â SQL ¹®ÀåÀ» ¼öÇàÇϱâ À§Çؼ ¿À¶óŬÀÌ »ç¿ëÇÏ´Â ÀÚ¿øÀÌ´Ù. ½Ã½ºÅÛ ÀÚ¿øÀÌ ÃæºÐÇϸé ÃʱâÆÄ¶ó¹ÌÅÍÀÇ
OPEN_CURSORS¸¦ Å©°Ô ÇÏ´Â °ÍÀÌ À¯¸®ÇÏ´Ù.
2´Ü°è : ¹®ÀåÀÇ ÆÄ½º, ÁúÀÇ ÇÁ·Î¼¼½Ì
Shared Pool¿¡ ÀÌÀü¿¡ »ç¿ëÇÑ SQL ¹®ÀåÀÌ ÀÖ´ÂÁö È®ÀÎÇÏ°í ¾øÀ¸¸é ´Ù½Ã ÄÄÆÄÀÏ, ±ÇÇѰ˻ç, ¹®¹ý¿À·ù µîÀ» °Ë»çÇÏ¿©
°øÀ¯ ¿µ¿ª¿¡ ¿Ã¸°´Ù. (¹®ÀåÀÇ ÆÄ½º, ÁúÀÇ ÇÁ·Î¼¼½Ì) ÃÊ±â ÆÄ¶ó¹ÌÅÍÀÇ SHARED_POOL_SIZE¸¦ º¯°æ.
3´Ü°è : ¼³¸í °á°ú 4´Ü°è : Á¤ÀÇÀÇ Ãâ·Â 5´Ü°è : º¯¼öÀÇ ¹ÙÀεå
6´Ü°è : ¹®ÀåÀÇ ½ÇÇà SQL ¿¬»ê½Ã Àӽ÷ΠÇÊ¿äÇÑ ½ºÆäÀ̽º°¡ ¹ß»ýÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. »ç¿ëÀÚ°¡
Default Space¿Í Temporary Space¸¦ µÎÁö ¾ÊÀ» °æ¿ì ¿À¶óŬ System Space´Â »ç¿ëÀÚµéÀ» À§ÇÑ
Default Space°¡ µÇ¾î Àüü ¼º´ÉÀ» ÀúÇØÇÏ´Â ¿ä¼Ò°¡ µÉ ¼ö ÀÖ´Ù. Sort³ª Join µîÀÇ ¿¬»ê½Ã´Â Space
ºÎÁ·À¸·Î ÁߴܵǴ °æ¿ì°¡ ¹ß»ýÇÑ´Ù. ±×·¯¹Ç·Î Temporary Space¸¦ ÃæºÐÈ÷ È®º¸ÇØ µÎ¾î¾ß ÇÑ´Ù.
Insert,
Update, Delete ¿¬»ê ¼öÇà½Ã´Â Lock ÀÚ¿øÀ» »ç¿ëÇϹǷΠÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù.
7´Ü°è : ¹®ÀåÀÇ
º´·ÄÈ 8´Ü°è : ÁúÀÇ °á°ú ·¹ÄÚµåÀÇ FETCH
DDL µ¥ÀÌÅ͸¦
Á¶ÀÛÇÏÁö´Â ¾ÊÁö¸¸ TableÀ» »ý¼º, »èÁ¦, º¯°æ ½ÃŰ´Â SQL ¹®ÀåÀÌ´Ù. DML°ú ´Þ¸® Data DictionaryÀÇ °ªÀ»
º¯°æ½ÃŲ´Ù. DDL ¿¬»êÀ» ÅëÇÏ¿© µ¥ÀÌÅÍÀÇ À§Ä¡³ª ½ºÆäÀ̽º¸¦ º¯°æÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¹°¸®Àû I/O Æ©´×À» À§Çؼ ¸¹ÀÌ »ç¿ëÇÑ´Ù.
Shared SQL, PL/SQL ¿À¶óŬ Library Cache¿¡´Â Shared Pool°ú PL/SQL ¿µ¿ªÀÌ
ÀÖ´Ù. ¼º´É À§ÇØ ÀÚÁÖ »ç¿ëµÇ´Â SQL°ú PL/SQL ¹®ÀåµéÀ» ¾ó¸¶³ª ¸¹ÀÌ Àå±â°£ È®º¸ÇÏ´À³Ä°¡ Áß¿äÇÏ´Ù.
LRU(Least Recently Used) °øÀ¯ ¿µ¿ªÀº LRU ¾Ë°í¸®ÁòÀ¸·Î °ü¸®µÈ´Ù.
ÃÖ±Ù¿¡ »ç¿ëµÇÁö ¾ÊÀº SQL°ú PL/SQLÀ» À§ÇØ ÀÚ¸®¸¦ ³»ÁÖ¾î¾ß ÇÑ´Ù. ±×·¯¹Ç·Î °°Àº °á°ú¸¦ ¾ò±â À§ÇØ »ç¿ëµÇ´Â ¹®ÀåÀº
¹Ýµå½Ã °°Àº ÆûÀ¸·Î »ç¿ëµÇ¾î¾ß ÇÑ´Ù.
V$LIBRARYCACHE »ç¿ëÀÚ°¡ ¾ó¸¶³ª Library
Cache¸¦ Àß »ç¿ëÇϴ°¡¸¦ ¾Ë ¼ö ÀÖ´Â Åë°è ÀÚ·á°¡ ÀÖ´Ù.
SELECT SUM(pins)
"Executions" SUN(reloads) "Cache Misses while Executing"
FROM v$librarycache; Executions Cache
Misses while Executing ---------
------------------------- 320871
549
RELOADS Ratio = (reloads(549)/pins(320871)) * 100 = 0.17%
PINS : Library Cache ³»ÀÇ Ç׸ñÀÌ ½ÇÇàµÈ ¼ö RELOADS : ½ÇÇà ´Ü°è¿¡¼ÀÇ Library
Cache MissÀÇ ¼ö
RELOADS °ªÀÌ »ó´ëÀûÀ¸·Î PINS º¸´Ù ¸Å¿ì ÀÛÀ¸¸é Cache Hit Ratio°¡ ³ô´Ù´Â
°ÍÀ» ÀǹÌÇÑ´Ù. Cache Hit Ratio°¡ ³·´Ù´Â Àǹ̴ °øÀ¯¿µ¿ªÀÌ ºÎÁ·Çϰųª ¾ÖÇø®ÄÉÀ̼ǿ¡¼ °°Àº SQL, PL/SQL
¹®ÀåµéÀ» »ç¿ëÇÏÁö ¾Ê°Å³ª Trigger, Package ±â´ÉµéÀ» »ç¿ëÇÏÁö ¾Ê¾Æ¼ »õ·Î¿î ¾ÆÀÌÅÛµéÀÌ Library Cache¿¡ °è¼Ó
Reload µÇ±â ¶§¹®ÀÌ´Ù.
Library Cache¸¦ À§ÇÑ ¸Þ¸ð¸® ÇÒ´ç Reload°ªÀ» 0¿¡
±ÙÁ¢ÇÏ°Ô ¸¸µé·Á¸é ÆÄ¶ó¹ÌÅͰª Áß¿¡¼ SHARED_POOL_SIZE °ªÀ» Áõ°¡½ÃÄÑ¾ß ÇÑ´Ù. ¶Ç, ÃæºÐÇÑ °øÀ¯ ¿µ¿ªÀÇ ÀÌÁ¡À»
»ì¸®±â À§ÇØ OPEN_CURSORS °ªµµ °°ÀÌ Áõ°¡½ÃÄÑ¾ß ÇÑ´Ù.
Optimization Overview
OptimizerÀÇ ¸ñÇ¥´Â ÃÖ¼ÒÇÑÀÇ ÇÁ·Î¼¼½Ì ½Ã°£°ú ÃÖ´Ü ½Ã°£ÀÇ I/O¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. À̸¦ À§ÇØ
Optimizer´Â ½ÇÇà°èȹÀ» ¼¼¿ì°í ¹®ÀåÀ» ½ÇÇàÇϱâ Àü¿¡ °¡Àå È¿°úÀûÀÎ °èȹÀ» ¼±ÅÃÇÑ´Ù.
½ÇÇà °èȹ
(Execution Plan) DML¹®ÀåÀ» ½ÇÇàÇϱâ À§ÇØ OracleÀº ¸¹Àº ³»ºÎÀû ´Ü°è¸¦ ¼öÇàÇØ¾ß ÇÑ´Ù.
¾î¶°ÇÑ ¹®ÀåÀ» ½ÇÇàÇϱâ À§ÇØ ¿À¶óŬÀÌ »ç¿ëÇÏ´Â ´Ü°èµéÀÇ Á¶ÇÕÀ» ½ÇÇà °èȹÀ̶ó ÇÑ´Ù.
¿¹)
SELECT ename, job, sal, dname FROM emp, dept
WHERE emp.deptno = dept.deptno AND NOT EXISTS
(SELECT * FROM salgrade WHERE emp.sal BETWEEN losal AND
hisal);
ID OPERATION
OPTIONS OBJECT_NAME
---------------------------------------------------------
0 SELECT STATEMENT
1 FILTER
2 NESTED LOOPS
3 TABLE
ACCESS FULL
EMP 4 TABLE
ACCESS BY
ROWID DEPT
5 INDEX
UNIQUE SCAN PK_DEPTNO
6 TABLE
ACCESS FULL
SALGRADE
½ÇÇà
°èȹÀÇ °¢ ´Ü°è´Â ´ÙÀ½ ´Ü°è³ª ¸¶Áö¸· ´Ü°è¿¡¼ »ç¿ëµÉ ÇàµéÀ̳ª, »ç¿ëÀÚ³ª ¾îÇø®ÄÉÀ̼ÇÀÌ SQL¹®ÀåÀ» ¹ßÇàÇÑ °Í¿¡ ´ëÇÑ ´äÀ¸·Î¼ ÇàµéÀÇ
ÁýÇÕÀ» µ¹·ÁÁØ´Ù. °¢ ´Ü°è¿¡¼ ¹ÝȯµÈ ÇàµéÀÇ ÁýÇÕÀº ÇàÀÚ¿ø(row source)À̶ó°í ºÒ¸°´Ù. ±×¸²Àº ÇÑ ´Ü°è¿¡¼ ´ÙÀ½ ´Ü°è·Î ÇàµéÀÇ
È帧À» º¸¿©ÁÖ´Â °èÃþÀû ´ÙÀ̾î±×·¥ÀÌ´Ù. ´Ü°èÀÇ ¹øÈ£ ¸Å±èÀº ¿ì¸®°¡ ½ÇÇà °èȹÀ» º¼ ¶§ º¸¿©Áö´Â ¼ø¼¸¦ ¹Ý¿µÇϴµ¥, À̰ÍÀº ÀϹÝÀûÀ¸·Î
°¢ ´Ü°è°¡ ½ÇÇàµÇ´Â ¼ø¼°¡ ¾Æ´Ï´Ù.
Çϳª ÀÌ»óÀÇ Çà ÀÚ¿øÀ¸·ÎºÎÅÍ ÇàµéÀ» ¹Þ¾ÆµéÀδÙ.
- °ËÁ¤ ¹Ú½º·Î
Ç¥ÇöµÈ °¢ ´Ü°èµéÀº ¹°¸®ÀûÀ¸·Î µ¥ÀÌÅͺ£À̽º³»ÀÇ °´Ã¼·ÎºÎÅÍ µ¥ÀÌÅ͸¦ °Ë»öÇÑ´Ù. ±×·± ´Ü°è¸¦ Á¢±Ù °æ·Î(access paths)¶ó°í
ÇÑ´Ù.
1. ´Ü°è 3°ú 6Àº °¢°¢ EMP¿Í SALGRADE Å×À̺íÀÇ ¸ðµç ÇàµéÀ» Àд´Ù. 2. ´Ü°è 5´Â
PK_DEPTNO À妽º·Î 3´Ü°è¿¡¼ ¹ÝȯµÈ °¢°¢ÀÇ DEPTNO°ªÀ» ã¾Æº»´Ù. DEPT Å×ÀÌºí¿¡¼ÀÇ °ü·Ã ÇàÀÇ ROWIDS¸¦ ã´Â´Ù.
3. ´Ü°è 4´Â DEPTÅ×ÀÌºí¿¡¼ 5´Ü°è¿¡¼ ¹ÝȯµÈ ROWIDS°ªÀ» °®´Â ÇàµéÀ» °Ë»öÇÑ´Ù.
- ÇÏ¾á ¹Ú½ºµé·Î
Ç¥ÇöµÈ °¢ ´Ü°èµéÀº ÇàÀÚ¿ø¿¡ ´ëÇØ ÀÛµ¿ÇÑ´Ù. 1. ´Ü°è 2´Â 3´Ü°è¿Í 4´Ü°è·ÎºÎÅÍ ÇàÀÚ¿øÀ» ¹Þ¾ÆµéÀ̰í, ´Ü°è 3ÀÇ ÀÚ¿øÀ¸·ÎºÎÅÍ
°¢ ÇàµéÀ» ´Ü°è 4ÀÇ ÇØ´ç Çà¿¡ Á¶ÀÎÇϰí, 1´Ü°è·Î °á°ú ÇàµéÀ» ¹ÝȯÇÏ´Â Áßø ·çÇÁ(loop) ¿ÀÆÛ·¹À̼ÇÀ» ¼öÇàÇÑ´Ù.
2. ´Ü°è 1Àº ÇÊÅÍ ¿¬»êÀ» ¼öÇàÇÑ´Ù. ±×°ÍÀº ÇàÀÚ¿øÀ» 2´Ü°è¿Í 6´Ü°è·ÎºÎÅÍ ¹Þ¾ÆµéÀδÙ. 6´Ü°è¿¡¼ ÇØ´ç ÇàÀ» °¡Áö°í ¿Í¼
2´Ü°è·ÎºÎÅÍ ÇàÀ» ÃßÃâÇÏ¿©, 2´Ü°è·ÎºÎÅÍ ³²Àº ÇàµéÀ» ¹®ÀåÀ» ¹ßÇàÇÑ »ç¿ëÀÚ¿Í ¾îÇø®ÄÉÀ̼ǿ¡ ¹ÝȯÇÑ´Ù.
µû¶ó¼ ½ÇÇà¼ø¼´Â
3-5-4-2-6-1 ÀÌ´Ù.
Optimization Mode Cost-Based,
Rule-Based°¡ ÀÖ´Ù.
ÃÊ±â ÆÄ¶ó¹ÌÅÍ ÆÄÀÏÀ» ¼öÁ¤ OPTIMIZATION_MODE = COST
OPTIMIZATION_MODE = RULE
ALTER SESSION ¸í·É¾î »ç¿ë
ALTER SESSION SET OPTIMIZER GOAL = COST
¿É ¼Ç |
¼³ ¸í |
CHOOSE |
Table, Cluster, Index µîÀÌ
OptimizationÀ» À§ÇÑ Åë°è µ¥ÀÌÅ͸¦ °¡Áö°í ÀÖÀ¸¸ç Cost-Based ¹æ½ÄÀ¸·Î OptimizationÀ»
Çϰí Åë°è µ¥ÀÌÅͰ¡ ¾øÀ¸¸é Rule-Based ¹æ½ÄÀ¸·Î ÇÑ´Ù. |
RULE |
Rule-Based |
ALL_ROWS |
Åë°è µ¥ÀÌÅÍÀÇ À¯¹«¿¡ »ó°ü¾øÀÌ Cost-Based ¹æ½ÄÀÇ
ÃÖÀûȸ¦ ÇÑ´Ù. Best Throughput(󸮷®)ÀÌ ¸ñÀû. |
FIRST_ROWS |
Cost-Based Optimization, Best
Response Time ¸ñÀû |
ÃÖÀûÈ ¹æ¹ý ´ëºÎºÐ
Cost-Based ¹æ½ÄÀÌ Rule-Based ¹æ½Äº¸´Ù ÁÁÀº °á°ú¸¦ ³»³ª »ç¿ëÀÚ°¡Á÷Á¢ SQL ¿¬»êÀ» Æ©´×ÇÒ ¶§´Â Rule-Based
¹æ½ÄÀÌ ´õ ÁÁÀº °á°ú¸¦ ³½´Ù.
Rule-Based ¹æ½Ä
Rule-Based ¹æ½ÄÀº
Cost-Based ¹æ½Ä¿¡ ºñÇØ °£´ÜÇÏ´Ù. ¿©·¯ °³ÀÇ °¡´ÉÇÑ PATH¸¦ ã¾Æ ÀÌ¹Ì Á¤ÇØÁ® ÀÖ´Â Rank¸¦ ±âÁØÀ¸·Î ¼·ÎÀÇ
Cost¸¦ ºñ±³Çϰí, À̸¦ Åä´ë·Î °¡Àå È¿À²ÀûÀÎ °ÍÀ» ¼±ÅÃÇÑ´Ù.
¿É ¼Ç |
Access Path |
1 |
ROWID¿¡ ÀÇÇÑ ´ÜÀÏ Çà Á¢±Ù |
2 |
Ŭ·¯½ºÅÍ Á¶Àο¡ ÀÇÇÑ ´ÜÀÏ Çà Á¢±Ù |
3 |
Unique Key ¶Ç´Â Primary Key¸¦ »ç¿ëÇÏ´Â
Hash Cluster Key¿¡ ÀÇÇÑ ´ÜÀÏ Çà Á¢±Ù |
4 |
Unique Key ¶Ç´Â Primary Key¿¡ ÀÇÇÑ ´ÜÀÏ Çà
Á¢±Ù |
5 |
Ŭ·¯½ºÅÍ Á¶ÀÎ |
6 |
ÇØ½Ã Ŭ·¯½ºÅÍ Å° |
7 |
À妽º Ŭ·¯½ºÅÍ Å° |
8 |
º¹ÇÕ Å° |
9 |
´ÜÀÏ Ä÷³ À妽º |
10 |
À妽º Ä÷³¿¡¼ÀÇ ¹Ù¿îµå ¹üÀ§ Á¶È¸ |
11 |
À妽º Ä÷³¿¡¼ÀÇ ¾ð¹Ù¿îµå ¹üÀ§ Á¶È¸ |
12 |
¼ÒÆ® º´ÇÕ Á¶ÀÎ |
13 |
À妽º Ä÷³ÀÇ ÃÖ´ë ¶Ç´Â ÃÖ¼Ò°ª |
14 |
À妽º Ä÷³¿¡¼ÀÇ ORDER BY »ç¿ë |
15 |
Å×À̺íÀÇ Àüü °Ë»ö |
1. ROWID¿¡ ÀÇÇÑ ´ÜÀÏ Çà
Á¢±Ù ¹®ÀåÀÇ WHEREÀý¿¡ ROWID³ª ¿À¶óŬ Precompiler¿¡¼ Áö¿øÇϰí ÀÖ´Â È®ÀåµÈ SQL ±¸¹® ±¸Á¶ÀÇ
CURRENT OF CURSOR¿¡ ÀÇÇØ ÁöÁ¤µÈ RowµéÀÌ ½Äº°µÉ ¼ö ÀÖÀ» °æ¿ì¿¡¸¸ »ç¿ëÀÌ °¡´É. ¹®ÀåÀ» ½ÇÇàÇϱâ À§ÇØ ROWID¿¡
ÀÇÇØ Å×À̺íÀ» °Ë»öÇÑ´Ù.
2, Ŭ·¯½ºÅÍ Á¶Àο¡ ÀÇÇÑ ´ÜÀÏ Çà Á¢±Ù - ¹®ÀåÀÇ WHEREÀý¿¡ ÇÑ
Å×À̺íÀÇ Å¬·¯½ºÅÍ Å°ÀÇ °¢ Ä®·³°ú ±×¿¡ ´ëÀÀÇÏ´Â ´Ù¸¥ Å×À̺íÀÇ Ä÷³À» °°°ÔÇÏ´Â Á¶°ÇÀýÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. - ¹®ÀåÀÇ
WHEREÀý¿¡ Á¶ÀÎÀÌ ´ÜÁö ÇϳªÀÇ ÇàÀ» ¸®ÅÏÇÏ´Â °ÍÀ» º¸ÁõÇÏ´Â Á¶°ÇÀýÀ» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ·± Á¶°ÇÀº Unique Çϰųª
Primary KeyÀÎ Ä÷³ÀÇ '=' Á¶°ÇÀý°ú À¯»çÇÏ´Ù.
À§ µÎ Á¶°ÇÀÌ ¸¸Á·ÇÒ °æ¿ì¿¡ »ç¿ë. ¹Ýµå½Ã AND
¿¬»êÀÚ¸¦ ÅëÇÏ¿© ÇÕÃÄÁ®¾ß ÇÑ´Ù.
3, Unique Key ¶Ç´Â Primary Key¸¦ »ç¿ëÇÏ´Â
Hash Cluster Key¿¡ ÀÇÇÑ ´ÜÀÏ Çà Á¢±Ù - ¹®ÀåÀÇ WHEREÀýÀÌ '='Á¶°ÇÀý¿¡ ÇØ½Ã
Ŭ·¯½ºÅÍ Å°ÀÇ ¸ðµç Ä÷³À» »ç¿ëÇÏ¿©¾ß ÇÑ´Ù. ÇÕ¼ºµÈ Ŭ·¯½ºÅÍ Å°ÀÎ °æ¿ì´Â '=' Á¶°ÇÀýÀÌ ¹Ýµå½Ã AND ¿¬»êÀÚ¿¡ ÀÇÇØ ¿¬°áµÇ¾î¾ß
ÇÑ´Ù. - ¹®ÀåÀº Ä÷³ÀÌ ÇØ½Ã Ŭ·¯½ºÅÍ Å°¸¦ ¸¸µé µíÀÌ À¯ÀϼºÀ̳ª ±âº»Å°¸¦ ¸¸µé¾î³»±â ¶§¹®¿¡ ´ÜÁö ÇϳªÀÇ µ¥ÀÌÅÍ ÇุÀ»
¸®ÅÏÇÑ´Ù.
4, À¯ÀÏŰ ¶Ç´Â ±âº»Å°¿¡ ÀÇÇÑ ´ÜÀÏ Çà Á¢±Ù ¹®ÀåÀÇ WHERE ÀýÀÌ '=' Á¶°ÇÀý¿¡¼
Ä÷³µéÀÇ À¯ÀϼºÀ̳ª ±âº»Å°¸¦ »ç¿ëÇÒ °æ¿ì »ç¿ëµÉ ¼ö ÀÖ´Ù. º¹ÇÕµÈ Å°µé¿¡ ´ëÇØ '=' Á¶°ÇÀýÀº AND ¿¬»êÀÚ¸¦ ÅëÇØ ¿¬°áµÇ¾î¾ß ÇÑ´Ù.
ÀÌ·± ¹®ÀåÀ» ½ÇÇà½Ã۱â À§ÇØ ¿À¶óŬÀº ´ÜÀÏ ROWID¸¦ ±¸Çϱâ À§ÇØ À¯ÀϼºÀ̳ª ±âº»Å°ÀÇ À妽º¸¦ ÀÌ¿ëÇØ À¯ÀÏ °Ë»öÀ» ÇÑ´Ù.
±×¸®°í ³ª¼ ÀÌ ROWID¸¦ ÀÌ¿ëÇØ Å×À̺íÀ» ¾×¼¼½ºÇÑ´Ù.
5, Ŭ·¯½ºÅÍ Á¶ÀÎ µÎ Join Å×À̺íÀÌ
°°Àº Cluster¿¡ ÀúÀåµÇ°í, ¹®ÀåÀÇ WHEREÀý¿¡ ÇÑ Å×À̺íÀÇ °¢ Ä®·³¿¡ ´ëÇØ, ´ëÀÀÇÏ´Â Å×À̺íÀÇ Ä®·³À» °°°Ô ÇÏ´Â Á¶°ÇÀýÀ»
Æ÷ÇÔÇÏ´Â °æ¿ì »ç¿ëµÉ ¼ö ÀÖ´Ù. º¹ÇÕ key¿¡ ´ëÇØ '=' Á¶°ÇÀýÀº ¹Ýµå½Ã AND ¿¬»êÀÚ¿¡ ÀÇÇØ ¿¬°áµÇ¾î¾ß ÇÑ´Ù.
6, ÇØ½Ã Ŭ·¯½ºÅÍ Å° ¹®ÀåÀÇ WHEREÀý¿¡ Hash Cluster KeyÀÎ Ä®·³ÀÇ '=' Á¶°ÇÀýÀÌ
ÀÖÀ» °æ¿ì »ç¿ëµÇ¾îÁú ¼ö ÀÖ´Ù. º¹ÇÕ Cluster Key¿¡ ´ëÇØ '=' Á¶°ÇÀýÀº ¹Ýµå½Ã AND ¿¬»êÀÚ·Î ¿¬°áµÇ¾î¾ß ÇÑ´Ù. ÀÌ·±
¹®ÀåÀ» ½ÇÇàÇϱâ À§ÇØ OracleÀº ¹®Àå¿¡ ±â¼úµÈ Hash Cluster Key °ªÀ» ClusterÀÇ Hash Function¿¡
Àû¿ëÇØ¼ Hash °ªÀ» ±¸ÇÑ´Ù. ±×¸®°í ³ª¼ OracleÀº ÀÌ Hash °ªÀ» ÀÌ¿ëÇØ Å×ÀÌºí¿¡ ´ëÇÑ Hash ScanÀ» ¼öÇàÇÑ´Ù.
7, À妽º Ŭ·¯½ºÅÍ Å° ¹®ÀåÀÇ WHEREÀý¿¡ Indexed Cluster KeyÀÎ Ä®·³ÀÇ '='
Á¶°ÇÀýÀÌ ÀÖ´Â °æ¿ì »ç¿ëµÉ ¼ö ÀÖ´Ù. º¹ÇÕ Key¿¡ ´ëÇØ¼´Â '=' Á¶°ÇÀýÀº ¹Ýµå½Ã AND ¿¬»êÀÚ·Î ¿¬°áµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ·±
¹®ÀåÀ» ½ÇÇàÇϱâ À§ÇØ OracleÀº Cluster Key¿¡ ÀÇÇØ ¼¼úµÈ RowÀÇ ROWID¸¦ ±¸Çϱâ À§ÇØ Cluster Index¿¡
´ëÇÑ Unique ScanÀ» ¼öÇàÇÑ´Ù. ±×¸®°í ³ª¼ OracleÀº ÀÌ ROWID°ú Cluster ScanÀ» ÀÌ¿ëÇØ Å×À̺íÀ»
¾×¼¼½ºÇÑ´Ù. °°Àº Cluster Key °ªÀ» °¡Áö´Â ¸ðµç RowµéÀÌ °°Àº °÷¿¡ ÀúÀåµÇ±â ¶§¹®¿¡ Cluster ScanÀº ±× RowµéÀ»
ã±â À§ÇØ ´ÜÁö ÇϳªÀÇ ROWID¸¸ÀÌ ÇÊ¿äÇÏ´Ù.
8, º¹ÇÕ À妽º WHERE Àý¿¡ º¹ÇÕ index
Ä®·³µéÀÇ '=' Á¶°ÇÀýÀÌ AND ¿¬»êÀÚ¿¡ ÀÇÇØ ¿¬°á µÇ¾îÀÖ´Â °æ¿ì¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ·± ¹®ÀåÀ» ½ÇÇàÇϱâ À§ÇØ OracleÀº
Index ´ëÇÑ Range ScanÀ» ¼öÇàÇÏ¿© ¼±ÅÃµÈ RowµéÀÇ ROWID¸¦ ±¸Çϰí À̰ÍÀ» ÀÌ¿ëÇØ Å×À̺íÀ» ¾×¼¼½ºÇÑ´Ù.
9, ´ÜÀÏ Ä÷³ À妽º ¹®ÀåÀÇ WHERE Àý¿¡ Çϳª³ª ±× ÀÌ»óÀÇ ´ÜÀÏ Ä®·³ IndexÀÇ '='
Á¶°ÇÀýÀÌ ÀÖ´Â °æ¿ì¿¡ »ç¿ëµÇ¾îÁú ¼ö ÀÖ´Ù. ¿©·¯ °³ÀÇ ´ÜÀÏ Ä®·³ Index¿¡ ´ëÇØ Á¶°ÇÀýÀº ¹Ýµå½Ã AND ¿¬»êÀÚ¿¡ ÀÇÇØ ¿¬°áµÇ¾î¾ß
ÇÑ´Ù.
¸¸¾à WHERE Àý¿¡ ´ÜÁö ÇϳªÀÇ Index Ä®·³À» ÀÖÀ» °æ¿ì OracleÀº ¼±ÅÃµÈ RowµéÀÇ ROWID¸¦
±¸Çϱâ À§ÇØ Range ScanÀ» ¼öÇàÇÔÀ¸·Î½á ±× ¹®ÀåÀ» ½ÇÇàÇÑ´Ù. ±×¸®°í ³ª¼ ±¸ÇØÁø ROWID¸¦ ÀÌ¿ëÇØ Å×À̺íÀ» ¾×¼¼½ºÇÑ´Ù.
10, À妽º Ä÷³¿¡¼ÀÇ ¹Ù¿îµå ¹üÀ§ Á¶È¸ ¹®ÀåÀÇ WHERE Àý¿¡ ´ÜÀÏ Ä®·³ Index³ª Çϳª³ª
±×ÀÌ»óÀÇ, º¹ÇÕ KeyÀÇ ÇÑ Áß¿äÇÑ ºÎºÐÀÌ µÇ´Â Ä®·³ÀÌ Æ÷ÇÔµÈ °æ¿ì »ç¿ëµÉ ¼ö ÀÖ´Ù.
11, À妽º Ä÷³¿¡¼
¾ð¹Ù¿îµå ¹üÀ§ Á¶È¸ ¹®ÀåÀÇ WHEREÀý¿¡ ´ÜÀÏ Ä®·³ IndexÀÇ Ä®·³À̳ª Çϳª³ª ±×ÀÌ»óÀÇ , º¹ÇÕ IndexÀÇ ÇÑ
Áß¿äÇÑ ºÎºÐÀÌ µÇ´Â Ä®·³ Áß ÇϳªÀÇ Á¶°ÇÀýÀ» °¡Áö°í ÀÖÀ» ¶§ »ç¿ë °¡´ÉÇÏ´Ù.
12, ¼ÒÆ® º´ÇÕ Á¶ÀÎ
Join Å×À̺íÀÌ °°Àº Cluster¿¡ ÀúÀåµÇÁö ¾Ê°í, ¹®ÀåÀÇ WHEREÀý¿¡ ÀÖ´Â Á¶°ÇÀýÀÌ Equailty Á¶°ÇÀýÀ̶ó¸é, ÀÌ
Á¢±Ù °æ·Î°¡ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¹®ÀåÀ» ½ÇÇàÇϱâ À§ÇØ OracleÀº Sort-Merge ¿¬»êÀ» »ç¿ëÇÑ´Ù.
13, À妽º Ä÷³ÀÇ ÃÖ´ë ¶Ç´Â ÃÖ¼Ò°ª ´ÙÀ½ÀÇ Á¶°ÇÀ» ¸¸Á·ÇÏ´Â SELECT ¹®Àå¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù.
- Query¿¡ Single-Column Index³ª Composite Index°¡ ÀÖ´Â Ä®·³ÀÇ ÃÖ´ë°ªÀ̳ª ÃÖ¼Ò°ªÀ»
±¸Çϱâ À§ÇØ MAX³ª MIN ÇÔ¼ö°¡ »ç¿ëµÇ´Â °æ¿ì. ¿©±â¼ Cluster Index´Â Á¦¿Ü. MAX¿Í MINÇÔ¼öÀÇ
argument´Â Ä®·³, »ó¼ö, + ¿¬»êÀÚ, || ¿¬»êÀÚ³ª CONCAT ÇÔ¼ö µîÀ» Æ÷ÇÔÇÏ´Â ¾î¶°ÇÑ ¼ö½Äµµ ¿Ã ¼ö ÀÖ´Ù. -
Select Àý¿¡ ´Ù¸¥ ¼ö½ÄÀÌ ¿ÀÁö ¾Ê¾Æ¾ß ÇÑ´Ù. - ¹®ÀåÀº WHEREÀýÀ̳ª GROUP BY ÀýÀÌ ¾ø¾î¾ß ÇÑ´Ù. ÀÌ·±
Query¸¦ ½ÇÇàÇϱâ À§Çؼ OracleÀº IndexÀÇ Range ScanÀ» ÀÌ¿ëÇØ ÃÖ´ë°ªÀ̳ª ÃÖ¼Ò°ªÀ» ã¾Æ³½´Ù. ÃÖ´ë°ªÀ̳ª ÃÖ¼Ò°ªÀ»
ã°ÔµÈ´Ù¸é OracleÀº ´õ ÀÌ»óÀÇ ScanÀº ÇÏÁö ¾Ê´Â´Ù.
14, À妽º Ä÷³¿¡¼ÀÇ ORDER BY »ç¿ë
´ÙÀ½ÀÇ Á¶°ÇµéÀ» ¸¸Á·ÇÏ´Â select ¹®¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù.
- Query¿¡ ORDER BYÀýÀÌ
ÀÖ¾î¾ßÇϰí, ±× ORDER BYÀý¿¡ »ç¿ëµÇ´Â Ä®·³Àº Single-Column Index°¡ Àְųª, Composite IndexÀÇ
Leading PortionÀ̾î¾ß ÇÑ´Ù. Cluster Index´Â Á¦¿Ü. - ±×¸®°í PRIMARY KEY³ª NOT
NULL Integrity°¡ ±× IndexµÈ Ä®·³¿¡ ÀÖ¾î¾ß ÇÑ´Ù. ORDER BYÀý¿¡ »ç¿ëµÈ Ä®·³¿¡ NULLÀÌ À־ ¾È µÈ´Ù´Â
¸»ÀÌ´Ù. - NLS_SORT ¸Å°³º¯¼ö°¡ BINARY·Î ¼³Á¤µÇ¾î¾ß ÇÑ´Ù.
ÀÌ·± Query¸¦ ½ÇÇàÇϱâ À§ÇØ
OracleÀº IndexÀÇ Range ScanÀ» »ç¿ëÇÏ¿© Á¤·ÄµÈ ¼ø¼¿¡¼ ÇØ´ç RowµéÀÇ ROWIDµéÀ» ±¸ÇÑ´Ù. ±×¸®°í ³ª¼
OracleÀº ÀÌ ROWIDµéÀ» ÀÌ¿ëÇØ ÇØ´ç Row¸¦ ¾×¼¼½ºÇÑ´Ù.
15, Å×À̺íÀÇ Àüü °Ë»ö ¹®ÀåÀÇ
WHERE Àý°ú »ó°ü¾øÀÌ ¸ðµç SQL¹®Àå¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù.
Rule-Based ¹æ½ÄÀÇ ½ÇÇà°èȹ -
¼öÇà °¡´ÉÇÑ ½ÇÇà°èȹÀ» ±¸ÇÑ´Ù. - Rank Table¿¡ µû¶ó¼ ¼øÀ§¸¦ °áÁ¤ÇÑ´Ù. - °¡Àå ³·Àº ¼øÀ§¸¦ ¼±ÅÃÇÏ¿©
¼öÇàÇÑ´Ù.
Cost-Based ¹æ½ÄÀÇ ½ÇÇà°èȹ - Rule-Based ¹æ½ÄÀÌ ½ÇÇà°èȹÀ» ±¸ÇÏ´Â °Í°ú
°°Àº ¹æ½ÄÀ¸·Î ½ÇÇà°èȹÀ» ±¸ÇÑ´Ù. - °¢ ½ÇÇà °èȹ¿¡ ´ëÇÑ Cost¸¦ ±¸ÇÑ´Ù. Cost´Â ½ÇÇà°èȹ¿¡ »ç¿ëÇÒ CPU
Time, I/O ±×¸®°í ¸Þ¸ð¸®¸¦ ±âÁØÀ¸·Î °è»êÇÑ´Ù. - Cost¸¦ ºñ±³Çؼ °¡Àå ³·Àº ½ÇÇà°èȹÀ» ¼±ÅÃÇÏ¿© ¼öÇàÇÑ´Ù.
ANALYZE ¸í·É¾î Cost-Based ¹æ½Ä¿¡ »ç¿ëÇÒ Åë°èµ¥ÀÌÅ͸¦ ¸ð¾Æ ÁØ´Ù.
ANALYZE ¸í·É¾î´Â ¼öÇàµÉ ¶§¸¶´Ù ´ÙÀ½ÀÇ Á¤º¸¸¦ ¼öÁ¤
TABLE - Å×À̺íÀÇ
Çà¼ö, »ç¿ëµÈ ºí·Ï ¼ö, Çѹøµµ »ç¿ëµÇÁö ¾ÊÀº ºí·Ï ¼ö, »ç¿ë °¡´ÉÇÑ SpaceÀÇ Æò±Õ, Chained Row ¼ö, Ä÷³´ç
Distinct ValueÀÇ ¼ö, Ä÷³´ç µÎ ¹øÂ°·Î °¡Àå ÀÛÀº °ª, Ä÷³´ç µÎ ¹øÂ°·Î °¡Àå Å« °ª.
INDEX - Index Level, Level ºí·Ï ¼ö, Distinct Key ¼ö, Ű´ç
Leaf ºí·Ï ¼öÀÇ Æò±Õ, Ű´ç Data ºí·Ï ¼öÀÇ Æò±Õ, Clustering Factor, ÃÖ¼Ò Å° °ª, ÃÖ´ë Ű °ª.
Hints »ç¿ë Optimizer´Â µ¥ÀÌÅͺ£À̽º °´Ã¼¿¡ ´ëÇÑ ¾ó¸¶³ª ¸¹°í, Á¤È®ÇÑ µ¥ÀÌÅ͸¦ °¡Áö°í
Àִ°¡¿¡ ´ëÇÑ ÀÇÁ¸µµ°¡ ³ô¾Æ Optimizer°¡ ´õ¿í È¿°úÀûÀ¸·Î SQL ¿¬»êÀ» ¼öÇàÇϵµ·Ï »ç¿ëÀÚ°¡ »ç¿ëÇÑ´Ù.
Hint¸¦ ÅëÇÏ¿© Optimizer¿¡°Ô ¾Ë·Á ÁÙ ¼ö ÀÖ´Â »çÇ× - SQL ¿¬»êÀ» À§ÇÑ Cost-Based Á¢±Ù
¹æ½ÄÀÇ ¸ñÇ¥, Á¢±Ù¹æ½Ä ÁöÁ¤, Index º¸´Ù ´õ È¿°úÀûÀÎ Scan ¹æ¹ý, Join ¼ø¼, º´·Ä¿¬»ê µî±Þ, Join ¿¬»ê.
Syntax /* + comment */ comment¸¦ Optimizer¿¡°Ô ¾Ë·Á ÁØ´Ù.
Hint ±â´É »ç¿ë½Ã Syntax³ª ±âŸ ¿À·ù°¡ ¹ß»ýÇϸé Optimizer´Â ¿À·ù ¸Þ½ÃÁö¸¦ »ç¿ëÀÚ¿¡°Ô Àü´ÞÇÏÁö ¾Ê°í À̸¦
¹«½ÃÇϰí, ¿¬»êÀ» ¼öÇàÇÑ´Ù.
SQL TRACE SQLÀ» Æ©´×Çϱâ À§ÇØ ÇöÀçÀÇ SQL ¹®ÀåÀÇ ¼öÇà
»óŸ¦ Á¤È®È÷ ÆÄ¾ÇÇØ¾ß ÇÏ°í Æ©´× ÀÛ¾÷ÀÌ ÀǵµÇÑ ´ë·ÎµÇ¾ú´ÂÁö, È¿°ú´Â ¾î´À Á¤µµÀÎÁö ¾Ë¾Æ º¼ Çʿ䰡 ÀÖÀ» ¶§ SQL Trace¸¦
»ç¿ëÇÑ´Ù.
SQL Trace¸¦ ÀÌ¿ëÇØ ¾òÀ» ¼ö ÀÖ´Â Á¤º¸(V$SESSION) - CPU TIME,
ÃÑ ¼öÇà ½Ã°£, ¹°¸®Àû ¶Ç´Â ³í¸®Àû I/O, Library Cache, Parse Count, Execute Count, Fetch
Count, ¼öÇà Recode ¼ö.
SQL TraceÀÇ ÃʱâÈ ÃÊ±â ÆÄ¶ó¹ÌÅÍ
TIMED_STATISTICS, MAX_DUMP_FILE_SIZE USER_DUMP_DEST
¼¼¼Ç ÃʱâÈ ALTER SESSION SET SQL TRACE = TRUE
»ç¿ëÁßÀÎ
¾ÖÇø®ÄÉÀ̼ÇÀÇ SQL Æ©´×
ºÐ¼® ¹× ¿À·ù ã±â
Index Index ´Â
Select ¿¬»êÀÇ ¼º´ÉÀ» ³ôÀÌ´Â ¿ä¼ÒÀ̳ª Update¿Í Insert ½Ã¿¡´Â ºÎÇÏ·Î ÀÛ¿ëÇÑ´Ù. ÇöÀçÀÇ Table¿¡¼ Index
µéÀÌ Á¤È®ÇÏ°Ô »ý¼ºµÇ¾î Á¦±â´ÉÀ» ´ÙÇϰí ÀÖ´ÂÁö È®ÀÎÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ EXPLAIN PLAN ±â´ÉÀ» »ç¿ëÇÏ¿© Index µéÀÌ
¿Ã¹Ù¸£°Ô »ç¿ëµÇ°í ÀÖ´ÂÁö È®ÀÎÇØ¾ß ÇÑ´Ù.
µ¿½Ã »ç¿ëÀÚ °³¹ß ´Ü°è¿¡¼ µ¿½Ã »ç¿ëÀÚ¸¦ »ý°¢ÇÏÁö ¾ÊÀ» ¼ö
µµ ÀÖ°í Test ÇØº¼ ȯ°æÀÌ ¾ÈµÉ °æ¿ìµµ ÀÖ´Ù. ¸¹Àº µ¿½Ã »ç¿ëÀÚ°¡ Çϳª ȤÀº µÎ °³ÀÇ Table¿¡ ÁýÁߵǾî ÀÖÀ» °æ¿ì
°³¹ß´Ü°è¿¡¼´Â ¹ß°ßµÇÁö ¾Ê¾Ò´ø ÀÚ¿øÀÇ °æÀïÀÌ ÀϾÙ. ÀÌ °æ¿ì Disk I/O ÁýÁßÈ Çö»óÀÌ ÀϾ´Â µ¥ ¿ì¼± ¿©·¯
Disk¿¡ °ÉÃļ µ¥ÀÌÅÍ ÆÄÀÏÀ» ±¸¼ºÇÏ¿© I/O¸¦ ºÐ»ê½Ã۰í Å©±â°¡ ÀÛÀº TableÀº Table »ý¼ºÀ» ´Ù½Ã ÇÏ¿© ºí·Ï ´ç ·¹ÄÚµå
¼ö¸¦ ÁÙÀÌ´Â ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.
º´¸ñ Çö»ó ã±â º´¸ñ Çö»óÀ» ÀÏÀ¸Å°´Â SQL ¿¬»êÀ» ã´Â °ÍÀº Èûµç
ÀÏÀÌ´Ù. EXPLAIN PLAN ±â´ÉÀ» »ç¿ëÇÏ¿© CPU Time, ÃÑ ¼öÇà ½Ã°£, SQL ÃÖÀûÈ »óŸ¦ ÆÄ¾ÇÇÏ°í ¾×¼¼½º °æ·Î¸¦
º¯°æÇϰųª Á¶È¸µÇ´Â ·¹ÄÚµå ¼ö¸¦ ÁÙÀÌ´Â ¹æ¹ý µîÀ» ã´Â´Ù.
¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß°úÁ¤ÀÇ SQL Æ©´×
INDEX - Index »ç¿ëÀ» °í·ÁÇØ¾ß ÇÏ´Â TableÀÇ Æ¯¼º Select ¿¬»ê °á°ú°¡
Àüü Record ¼öÀÇ 5% À̳»ÀÎ Å« Table, Áߺ¹µÈ µ¥ÀÌÅͰ¡ ÀûÀº Table, Insert, Update, Delete ¿¬»êÀÌ
ÀûÀº Table, Query ¼öÇà½Ã Á¶°ÇÀÌ °£·«ÇÑ Table.
- Index »ç¿ëÀ» ÇÇÇØ¾ß ÇÏ´Â TableÀÇ Æ¯¼º
Select ¿¬»ê½Ã °á°ú°¡ Àüü Record ¼öÀÇ 5% ÀÌ»óÀÎ Table, Áߺ¹µÈ Data°¡ ¸¹Àº Table, Select
¿¬»êÀÌ ÁÖ·Î ÀϾ´Â Table, Query ¼öÇà½Ã Á¶°ÇÀýÀÌ ¸Å¿ì º¹ÀâÇÑ Table.
CLUSTER
ÀåÁ¡Àº ÇϳªÀÇ I/O ¿¬»êÀ¸·Î ¿©·¯ TableÀÇ Á¤º¸¸¦ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù ±×·¯³ª Index¿Í °°ÀÌ ¼º´ÉÀ» ÀúÇϽÃų
¼ö ÀÖ´Ù.
- Cluster¸¦ »ç¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÒ °æ¿ì Insert ¿¬»êÀÌ ¸¹Àº °æ¿ì, Cluster ±¸¼º
Table Áß ÇϳªÀÇ Table¿¡ Full ScanÀÌ ÀÚÁÖ ÀϾ´Â °æ¿ì, Cluster ±¸¼º TableµéÀÌ µ¿½Ã¿¡ ¾×¼¼½ºµÇÁö ¾Ê´Â
°æ¿ì°¡ ¸¹À» ¶§.
HASH CLUSTER µ¥ÀÌÅÍ ºí·ÏÀ» ¾×¼¼½ºÇϱâ À§ÇØ ¿©·¯ ¹øÀÇ ³»ºÎ ÀýÂ÷¸¦
°ÅÃÄ¾ß Çϴµ¥ ÇØ½Ã Ŭ·¯½ºÅÍ´Â Çѹø¿¡ ±× ÀÏÀ» ´ÙÇϱ⠶§¹®¿¡ ¼Óµµ°¡ °¡Àå ºü¸£´Ù.
±×·¯³ª ÇØ½Ã ۰ªÀÌ º¯ÇÏÁö ¾Ê¾Æ¾ß
Çϰí TableÀÌ Á¤ÀûÀ̾î¾ß ÇÑ´Ù´Â ´ÜÁ¡ ¶§¹®¿¡ ¸¹ÀÌ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
JOIN ¿À¶óŬ ½Ã½ºÅÛ
ÀÚ¿øÀ» ¸¹ÀÌ ¼ÒºñÇÏ´Â ¿¬»êÀÌ´Ù.
- EQUIJOIN Á¶°ÇÀý Equality Condition(=)¿¡ ÀÇÇØ Á¶ÀÎÀÌ
ÀÌ·ç¾îÁø´Ù.
EquijoinÀÇ ¼º´ÉÀ» ³ôÀ̱â À§Çؼ´Â Index ±â´ÉÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÚÁÖ »ç¿ëµÇ´Â ¿¬»êÀÇ
°æ¿ì´Â Cluster ±â´É»ç¿ëÀ» °í·ÁÇÏ´Â °Íµµ ÁÁ´Ù.
- SELFJOIN EQUIJOIN°ú °°À¸³ª ÇϳªÀÇ
Table¿¡¼ Á¶ÀÎÀÌ ÀϾ´Â °ÍÀÌ ´Ù¸£´Ù. Á¶°ÇÀý¿¡ ÀÖ´Â Ä÷³¿¡ Index¸¦ »ý¼ºÇÏ¿© ¼º´ÉÀ» ³ô¿©¾ß ÇÑ´Ù.
-
Outer Join Equijoin°ú ºñ½ÁÇϳª °á°ú´Â ¸¸Á·ÇÏ´Â ·¹ÄÚµå»Ó ¾Æ´Ï¶ó ¸¸Á·ÇÏÁö ¾Ê´Â ·¹Äڵ嵵 Ãâ·ÂÇÑ´Ù.
Best Throughput Á¶ÀÎ ¿¬»ê½Ã Æ©´×ÀÇ ¸ñÇ¥À̸ç, ¿À¶óŬ Optimizer¿¡°Ô
USE_MERGE Hint¸¦ ÁÖ¾î¾ß ÇÑ´Ù.
Best Response Time Á¶ÀÎ ¿¬»ê½Ã Æ©´×ÀÇ
¸ñÇ¥À̸ç, Optimizer¿¡°Ô USE_NL Hint¸¦ ÁÖ¾î¾ß ÇÑ´Ù.
º´·Ä Á¶È¸ Single Server
Process°¡ ¼öÇàÇÏ´Â ÇϳªÀÇ SQL ¿¬»êÀ» µ¿½Ã¿¡ Multiple Server Process°¡ ³ª´©¾î ¼öÇàÇÏ´Â °ÍÀÌ´Ù.
PQP (Parallel Quer
Processing) Æ©´×
System I/O ´ë¿ªÆø ¿ë·®ÀÌ Å« System, CPU ¼º´ÉÀÌ
¿ì¼öÇÑ System, Sort¸¦ À§ÇÑ ¸Þ¸ð¸®°¡ ÃæºÐÇÑ System¿¡´Â PQP°¡ ÁÁÀº °á°ú¸¦ °¡Á®¿Â´Ù.
I/O PQP´Â µ¥ÀÌÅÍ ÆÄÀÏÀÌ ¸¹Àº µð½ºÅ©¿¡ °ÉÃļ ºÐ»êµÇ¾î Àִ ȯ°æ¿¡ ÀûÇÕÇÏ´Ù.
µð½ºÅ© ºÐ»êÀ» ÇÏ´Â ¹æ¹ý Áß¿¡´Â ·£´ý ¾×¼¼½º°¡ ¸¹Àº ¾ÖÇø®ÄÉÀÌ¼Ç È¯°æ¿¡¼´Â OS ±â´ÉÀ» »ç¿ëÇϰí ÀÏÁ¤·®ÀÇ Æ¯Á¤ ºÎºÐ
µ¥ÀÌÅ͸¦ ÀÚÁÖ ¾×¼¼½ºÇϴ ȯ°æ¿¡¼´Â »ç¿ëÀÚ°¡ Á÷Á¢ÇÏ´Â ¹æ¹ýÀÌ À¯¸®ÇÏ´Ù. ºÐ»êµÇ´Â ÃÖ¼ÒÀÇ ´ÜÀ§´Â
DB_FILE_MULTIBLOCK_READ_COUNTÀÇ 2-3¹è°¡ µÇµµ·Ï ÇØ¾ß ÇÑ´Ù.
Sort¸¦ À§ÇÑ Àӽà ½ºÆäÀ̽º´Â
¿©·¯ °³ÀÇ µð½ºÅ©¸¦ ÇÕÃļ ¸¸µé¾î¾ß PQP µµÁß Sort, Merge¿¡ °É¸®´Â ½Ã°£À» ´ÜÃàÇÒ ¼ö ÀÖ´Ù.
Parallel Degree Parallel Degree´Â ¼º´É¿¡ ¹ÌÄ¡´Â ¿µÇâÀÌ ¸Å¿ì Å©´Ù.
±×·¯¹Ç·Î ¸¹Àº ¹Ýº¹ÀûÀÎ ½ÃÇèÀ» ÅëÇÏ¿© °áÁ¤ÇØ¾ß ÇÑ´Ù.
3. ¿À¶óŬ ÀνºÅϽº Æ©´×
¸Þ¸ð¸® Æ©´×
¿î¿µÃ¼Á¦ Æ©´× ¿î¿µÃ¼Á¦¿¡¼ ÀúÀåÀåÄ¡´Â "Real Memory",
"Virtual Memory", "Expended Storage", "Disk" µîÀÌ ÀÖ´Ù. O/S¿¡ µû¶ó Paging ¶Ç´Â
SwappingÀÌ ¹ß»ýÇÏ¸é ¸¹Àº I/O¸¦ µ¿¹ÝÇϱ⠶§¹®¿¡ ÀÌ µéÀÌ ÀϾÁö ¾Ê°Ô ÇÏ´Â °ÍÀÌ ÁÖ¸ñÀûÀÌ´Ù. À̸¦ À§Çؼ´Â Á¦ÇÑÀûÀÎ
¸Þ¸ð¸®·Î »ç¿ëÀڵ鿡°Ôµµ Àû´çÇÑ ¾çÀ» ÇÒ´çÇϰí SGA¿¡µµ ÀûÀýÇÏ°Ô ÇÒ´çÇØ¾ß ÇÑ´Ù.
UNIX ȯ°æ¿¡¼´Â "sar" ¸í·É¾î³ª
¸ð´ÏÅ͸µ ÅøÀ» ÀÌ¿ëÇÏ¿© »óŸ¦ È®ÀÎÇÑ´Ù.
SGA Æ©´× Data Dictionary Cache³ª
Library Cache¿¡¼ Miss°¡ ¹ß»ýÇÏÁö ¾Êµµ·Ï Shared Pool¿¡ ÃæºÐÇÑ ¿µ¿ªÀ» ÇÒ´çÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
Private SQL, PL/SQL Area Æ©´× Æ©´×ÀÇ ¸ñÀûÀº Parse ¹ß»ý Ƚ¼ö¸¦ ÁÙÀÌ´Â
°ÍÀÌ´Ù. SQL Trace ±â´ÉÀ» ÀÌ¿ëÇØ¼ Parse ´Ü°è¿¡¼ÀÇ Count ¼ö¿Í Execute ´Ü°è¿¡¼ÀÇ Count ¼ö°¡ °ÅÀÇ
°°Àº ¼ö·Î ÆÇ´ÜµÇ¸é À̸¦ ÁÙ¿©¾ß ÇÑ´Ù.
Private SQL, PL/SQL AreaÀÇ Å©±â¸¦ Áõ°¡½ÃŰ·Á¸é ÃÊ±â ÆÄ¶ó¹ÌÅÍ
ÆÄÀÏÀÇ OPEN_CURSORS °ªÀ» Áõ°¡½ÃŲ´Ù.
Shared Pool Æ©´× Æ©´×ÀÇ ¸ñÀûÀº Parse
Call ¼ö, Execute Call ¼ö µîÀ» ÁÙÀ̰í, Data Dictionary Cache¿¡ ´ëÇÑ Miss¸¦ ÃÖ¼ÒÈÇØ¼ ¿À¶óŬ
¼º´ÉÀ» ÃÖ´ëÇÑÀ¸·Î ±Ø´ëÈÇϴµ¥ ÀÖ´Ù.
Library Cache Æ©´× Library Cache
Miss´Â Parse ´Ü°è¿Í Execute ´Ü°è¿¡¼ ÀϾÙ. Cache Hit Rate °¡ ¶³¾îÁö¸é ¿µ¿ªÀ» Ű¿ì´Â °ÍÀÌ Æ©´×
¹æ¹ýÀÌ´Ù.
+ V$LIBRARYCACHE Table DBA ±ÇÇÑÀ» °¡Áø »ç¿ëÀÚ¸¸ÀÌ Á¶È¸°¡´É
SELECT SUM(pins) "Executions" SUN(reloads) "Cache Misses
while Executing" FROM v$librarycache; Executions
Cache Misses while Executing
---------
------------------------- 320871
549
RELOADS Ratio = (reloads(549)/pins(320871)) * 100 = 0.17%
PINS : Library Cache ³»ÀÇ Ç׸ñÀÌ ½ÇÇàµÈ ¼ö RELOADS : ½ÇÇà ´Ü°è¿¡¼ÀÇ Library Cache
MissÀÇ ¼ö
RELOADS´Â 0¿¡ °¡±î¿ö¾ß Çϰí PINS¿¡¼ RELOADSÀÇ ºñÀ²ÀÌ 1% ÀÌ»óÀ̸é Library
Cache Miss¸¦ ÁÙÀδÙ.
+ Library Cache Miss ÁÙÀÌ´Â ¹æ¹ý ´õ ¸¹Àº ¸Þ¸ð¸®¸¦ ÇÒ´çÇϰí
SQLÀ» »ç¿ëÇÒ ¶§ ´ÙÀ½ »çÇ×À» ÁÖÀÇÇØ¾ß ÇÑ´Ù. 1, ´ÙÀ½Àº ´Ù¸¥ °ÍÀ¸·Î °£ÁÖÇÏ¿© Shared SQL Area¸¦ °øÀ¯ÇÒ ¼ö
¾ø´Ù. SELECT * FROM emp; SELECT * FROM Emp; 2, ´Ù¸¥
»ç¿ëÀÚ°¡ °°Àº À̸§ÀÇ TableÀ» °¡Áö°í ÀÖÀ» °æ¿ì. ÀÌ °æ¿ì´Â ¼ÒÀ¯ÀÚ¸¦ Ç¥½ÃÇØ¼ »ç¿ëÇÑ´Ù. SELECT * FROM
BOB.emp; 3, SQL ¹®Àå ³»¿¡¼ ¹ÙÀÎµå º¯¼ö´Â À̸§°ú µ¥ÀÌÅÍ Å¸ÀÔÀÌ Æ²·Á¼´Â ¾È µÈ´Ù.
SELECT * FROM emp WHERE deptno =:department_no; SELECT *
FROM emp WHERE deptno =:d_no; 4, »ó¼ö ´ë½Å °°Àº À̸§°ú µ¥ÀÌÅÍ Å¸ÀÔÀ» °¡Áø ¹ÙÀÎµå º¯¼ö¸¦
»ç¿ëÇÑ´Ù.
Data Dictionary Cache Æ©´× ÀνºÅϽº°¡ Startup µÇ´Â ½ÃÁ¡¿¡
Data Dictionary Cache¿¡ µ¥ÀÌÅ͵éÀÌ ¾ø±â ¶§¹®¿¡ Miss°¡ ¹ß»ý. »ç¿ëÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®¸¦ Áõ°¡½Ã۱â À§ÇØ
SHARED_POOL_SIZE¸¦ Áõ°¡½ÃŲ´Ù.
Buffer Cache Æ©´× Cache Hit
Ratio¸¦ ³ôÀÌ´Â °ÍÀÌ Æ©´×ÀÇ ¸ñÀûÀÌ´Ù.
V$SYSSTAT DBA »ç¿ëÀÚ¸¸ Á¶È¸°¡ °¡´ÉÇϰí
Cache Hit Ratio¸¦ ±¸ÇÒ ¼ö ÀÖ´Ù. DB BLOCK GETS, CONSISTENT GETS : ÇÕÀº µ¥ÀÌÅ͸¦
¿ä±¸ÇÏ´Â ÃÑ È½¼ö. PHYSICAL READS : µð½ºÅ©»óÀÇ µ¥ÀÌÅÍ ÆÄÀÏÀ» ¾×¼¼½ºÇÑ RequestÀÇ ÃÑ È½¼ö.
SELECT name, value FROM v$sysstat WHERE
name IN ('db block gets', 'consistent gets', 'physical
reads');
Cache Hit Ratio = 1- (physical reads / (db
block gets + consistent reads))
Hit Ratio°¡ 60-70% º¸´Ù ÀÛ´Ù¸é ¼º´É
Çâ»óÀ» À§ÇØ Cache¿¡¼ Buffer ¼ö¸¦ Áõ°¡½ÃÄÑ¾ß Çϴµ¥ DB_BLOCK_BUFFERS °ªÀ» Å©°Ô ÇÏ¸é µÈ´Ù.
X$KCBRBH Buffer ¼ö°¡ Áõ°¡ÇÔ¿¡ µû¶ó Cache Hit RatioÀÇ º¯È¸¦ ¾Ë ¼ö ÀÖ´Â
TableÀÌ´Ù. Buffer ¼ö¸¦ Á¶Á¤ÇÑ ÈÄ¿¡ ±× È¿°ú¸¦ ¾Ë¾Æº¸±â´Â ÁÁÀ¸³ª À̸¦ ¼öÇàÇÔ¿¡ µû¶ó ºÎÇϰ¡ ¹ß»ýÇÑ´Ù´Â °ÍÀ» ¸í½ÉÇØ¾ß
ÇÑ´Ù.
X$KCBCBH Buffer¸¦ ÁÙÀÓÀ¸·Î¼ ³ªÅ¸³ª´Â ACM(Additional Cache Miss) °ªÀ»
¾Ë¾Æº¸´Â Table.
DB_BLOCK_LRU_STATISTIC = TRUE
¿¹) ÇöÀç
Buffer°¡ 100À̶ó¸é 90À¸·Î ÁÙ¿´À» ¶§ ACM? SELECT SUM(count) acm
FROM sys.x$kcbcbh WHERE indx >= 90;
INDX : Cache ³»ÀÇ °¡´ÉÇÑ Buffer ¼ö COUNT : INDX¿¡ ±âÀÎÇÑ
ACM
I/O Æ©´×
¾ÖÇø®ÄÉÀ̼ÇÀÌ ½Ã½ºÅÛÀÇ ¾î¶² ÀÚ¿øÀ» »ç¿ëÇÏ´À³Ä¿¡ µû¶ó I/O Bound ¾÷¹«¿Í
CPU Bound·Î ±¸ºÐÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¹°¸®Àû Read/Write ¿¬»ê¿¡ ¸¹Àº ½Ã°£À» ¼ÒºñÇϰí Àֱ⠶§¹®¿¡
I/O¿¡ ´ëÇÑ Æ©´×ÀÌ Áß¿äÇÏ´Ù.
µð½ºÅ© ¸¶Âû(Disk Contention) µ¿½Ã¿¡ ¸¹Àº »ç¿ëÀÚ°¡
°°Àº µð½ºÅ© ºí·ÏÀ» Access ÇϰíÀÚ ÇÒ ¶§ ¹ß»ýÇÏ´Â Çö»ó.
V$FILESTAT SELECT
name, phyrds, phywrts FROM V$datafile df, V$filestat fs
WHERE df.file# = fs.file#
+ phyrds : °¢ µ¥ÀÌÅÍ ÆÄÀÏÀ» Àд Ƚ¼ö
+ phywrts : °¢ µ¥ÀÌÅÍ ÆÄÀÏ¿¡ ÀúÀåÇÑ È½¼ö
I/O ºÐ»ê µð½ºÅ©³ª µð½ºÅ© ÄÁÆ®·Ñ·¯¿¡
ÃʰúµÇ´Â Request 󸮸¦ ¿ä±¸¹ÞÀº µð½ºÅ©µéÀ» ã¾Æ³»¾î À̵éÀ» ºÐ»ê½ÃŰ´Â °ÍÀÌ´Ù.
- µ¥ÀÌÅÍ ÆÄÀÏ, ¸®µÎ ·Î±× ÆÄÀÏ
ºÐ¸® ¸®µÎ ·Î±× ÆÄÀÏÀº Æ®·£Àè¼ÇÀÌ ¿Ï·áµÇ¸é ±×¿¡ ´ëÇÑ ·Î±×¸¦ ±â·ÏÇÏ´Â ÆÄÀÏÀÌ´Ù. ¶Ç ÇÑ Request¸¦ ¼øÂ÷ÀûÀ¸·Î ¹Þ¾Æ
ó¸®ÇÑ´Ù. ±×·¯¹Ç·Î Random ¾×¼¼½º°¡ ÁÖ·Î ÀϾ´Â µ¥ÀÌÅÍ ÆÄÀϰú ºÐ¸®ÇÏ¸é ±× È¿°ú°¡ Å©´Ù. Àå¾Ö¿¡ ´ëºñÇÏ¿© ¹Ì·¯¸µ
ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
- Striping ÇϳªÀÇ µ¥ÀÌÅ͸¦ ¼¼±×¸ÕÆ®·Î ºÐÇÒÇÏ¿© ¿©·¯ °³ÀÇ µð½ºÅ© ÀåÄ¡·Î ºÐ»ê½ÃŰ´Â
°Í.
- Table°ú Index ºÐ¸® Table¿¡ ÀúÀåµÇ¾î ÀÖ´Â µ¥ÀÌÅ͸¦ accessÇϱâ À§Çؼ´Â Index¸¦
ÂüÁ¶Çϴµ¥ ÀÌ µéÀÌ ÇÑ µð½ºÅ©¿¡ ÀÖÀ» °æ¿ì´Â ƯÁ¤ µð½ºÅ©¿¡ °úºÎÇϰ¡ ¹ß»ýÇÑ´Ù.
- ¿À¶óŬ »ç¿ë µð½ºÅ© ºÐ¸®
´Ù¸¥ ¾ÖÇø®ÄÉÀÌ¼Ç ¿ä¼Ò³ª, OS¿¡¼ »ç¿ëÇÏ´Â µð½ºÅ©µéÀ» ¼·Î ºÐ¸®ÇÏ´Â °ÍÀÌ ¿À¶óŬ¿¡ ´ëÇÑ ¿ÜºÎÀÇ ¿µÇâÀ» ÃÖ¼ÒÈÇÒ ¼ö ÀÖ´Ù.
µ¥ÀÌÅÍ ºí·Ï µ¥ÀÌÅ͵éÀº Table ¾È¿¡ µ¥ÀÌÅÍ ºí·ÏÀ̶ó´Â ´ÜÀ§ ¿µ¿ªº°·Î ÀúÀåµÈ´Ù. ÇÑ µ¥ÀÌÅÍ
ºí·Ï¿¡ ¸¹Àº µ¥ÀÌÅͰ¡ ÀÖ¾î¾ß ¼º´É¿¡ µµ¿òÀÌ µÇ´Â °æ¿ì°¡ ÀÖ°í, Àû¾î¾ß µµ¿òÀÌ µÇ´Â °æ¿ìµµ ÀÖ´Ù. »ç¿ëÁß¿¡ µ¥ÀÌÅÍ ºí·ÏÀÌ ´õ
ÇÊ¿äÇØ¼ °è¼Ó ÇÒ´ç¹ÞÀ¸¸é ¼º´ÉÀÌ ÀúÇ쵃 ¼ö Àֱ⠶§¹®¿¡ À̸¦ ¹æÁöÇϱâ À§ÇÑ ³ë·ÂÀÌ ÇÊ¿äÇÏ´Ù.
Update/Insert ¿¬»ê°ú µ¥ÀÌÅÍ ºí·Ï - Migration : Update°¡ ÀÚÁÖ ¹ß»ýÇÏ¿©
µ¥ÀÌÅÍ ºí·Ï¿¡ ´õ ÀÌ»ó µ¥ÀÌÅ͸¦ ÀúÀåÇÒ °ø°£ÀÌ ¾ø´Â °æ¿ì ¿À¶óŬÀº ÃæºÐÈ÷ Å« µ¥ÀÌÅÍ ºí·ÏÀ» ã¾Æ¼ ¿ø·¡ µ¥ÀÌÅÍ ºí·Ï¿¡ ÀÖ´Â ³»¿ëµéÀ»
»õ·Î¿î °÷À¸·Î À̵¿½ÃŲ´Ù. - Chaining Row : ÃæºÐÈ÷ Å« µ¥ÀÌÅÍ ºí·ÏÀÌ ¾ø´Â °æ¿ì ¿ø·¡ µ¥ÀÌÅÍ ºí·ÏÀÇ µ¥ÀÌÅ͸¦
³ª´©¾î¼ ´Ù¸¥ µ¥ÀÌÅÍ ºí·Ï¿¡ ºÐ»ê ÀúÀåÇÑ´Ù.
Migration°ú ChainingÀ» ¹æÁöÇÏ´Â ±Ùº»ÀûÀÎ ¹æ¹ýÀº ÃæºÐÈ÷ Å«
µ¥ÀÌÅÍ ºí·ÏÀ» ÇÒ´çÇØ ÁÖ´Â °ÍÀÌ´Ù. Table »ý¼º½Ã PCTUSED, PCTFREE ±â´ÉÀ» »ç¿ëÇÏ¿© Update, Insert
¿¬»ê½Ã ÇÊ¿äÇÑ ¿µ¿ªÀ» µ¥ÀÌÅÍ ºí·Ï¿¡ ¸¶·ÃÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù.
ÀÌ¹Ì ¹ß»ýÇÑ Migration°ú ChainingÀÇ Ã³¸®
¹æ¹ý
+ ANALYZE ¸í·ÉÀ» ÀÌ¿ëÇØ Á¤º¸¸¦ ±¸ÇÑ´Ù. ANALYZE TABLE order_hist
LIST CHAINED ROWS;
+ Ãâ·Â µ¥ÀÌÅ͸¦ º»´Ù. SELECT OWNER_NAME,
TABLE_NAME, HEAD_ROWID, TIME FROM chained_rows
WHERE table_name = 'ORDER_HIST';
+ MigratedµÇ°Å³ª ChainµÈ
µ¥ÀÌÅÍ ÇàÀ» °¡Áö°í ÀÖ´Ù¸é ´ÙÀ½ ´Ü°è¸¦ °ÅÃÄ ÀÌ·¯ÇÑ ÇàµéÀ» Á¦°ÅÇÑ´Ù. - MigrateµÇ°Å³ª ChainµÈ µ¥ÀÌÅÍ ÇàÀ» °¡Áö°í
ÀÖ´Â, ½ÇÁ¦ Table°ú °°Àº Ä÷³À» °¡Áö°í ÀÖ´Â Àӽà Å×À̺íÀ» »ý¼ºÇÑ´Ù. - ½ÇÁ¦ Table¿¡¼ MigrateµÇ°í,
ChainµÈ µ¥ÀÌÅÍ ÇàµéÀ» Áö¿î´Ù. - Àӽà TableÀÇ µ¥ÀÌÅÍ ÇàµéÀ» ½ÇÁ¦ Å×ÀÌºí¿¡ InsertÇÑ´Ù. - ÀÓ½Ã
TableÀ» Á¦°ÅÇÑ´Ù.
+ Ãâ·Â Table¿¡¼ ¸ð¾ÆÁø Á¤º¸¸¦ Áö¿î´Ù. DELETE FROM
chained_row WHERE table_name = 'ORDER_HIST';
+ ´Ù½Ã
ANALYZE ¸í·ÉÀ» ÀÌ¿ëÇØ Á¤º¸¸¦ ¸ðÀ¸°í, ±× Á¤º¸¸¦ º»´Ù. + Ãâ·Â ÆÄÀÏ¿¡ Row°¡ ³ªÅ¸³ª¸é µ¥ÀÌÅÍ ºí·ÏÀÇ Å©±â¸¦ Áõ°¡½ÃÄÑ
ÀÌÀü ChainµÈ ÇàÀ» ¾ø¾Ø´Ù.
¸ðµç »óȲ¿¡¼ ÀÌ·± ChainingÀ» ÇÇÇÒ ¼ö´Â ¾ø´Ù. ¸¸¾à LONG Ä÷³À̳ª
±ä CHAR, VARCHAR2 Ä÷³À» °¡Áö°í ÀÖ´Ù¸é ÀÌ·± ChainingÀ» ÇÇÇÒ ¼ö ¾ø´Ù.
Dynamic
Space Management ÃÖ¼ÒÈ DB °´Ã¼µéÀÇ »ý¼º Ãʱ⿡ ÇÒ´ç¹ÞÀº ¿µ¿ªÀÌ »ç¿ë Áß¿¡ ºÎÁ·Çϸé À̵éÀ» Áõ°¡½ÃÄѾß
ÇÑ´Ù. ÀÌ·± Çö»óÀº °ú´ÙÇÑ I/O Request¸¦ µ¿½Ã¿¡ ¹ß»ý½ÃŰ¹Ç·Î ¼º´É¿¡ ÀúÇØ¿ä¼Ò°¡ µÈ´Ù. ±×·¯¹Ç·Î °´Ã¼¸¦ »ý¼ºÇÒ
¶§ ¿¹»óµÇ´Â ½ºÆäÀ̽º¸¦ ¹Ì¸® ÇÒ´çÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
µ¿Àû È®Àå °Ë»ç Recursive Call
: »ç¿ëÀÚ°¡ ¼öÇàÇÏ´Â SQL ¿¬»ê°ú ÇÔ²² ¿À¶óŬ »ç¿ëÀÚµéÀÌ ¿ä±¸ÇÑ SQL ¹®ÀåÀ» ¼öÇàÇϱâ À§ÇØ »õ·Î¿î SQL ¹®ÀåµéÀ» ¸¸µé¾î ¼öÇà.
+ Recursive CallÀÌ ¹ß»ýÇÏ´Â °æ¿ì - Data Dictionary Cache¿¡ Miss°¡ ¹ß»ýÇßÀ»
°æ¿ì - µ¥ÀÌÅͺ£À̽º Æ®¸®°Å ¼öÇà - DDL ¹®ÀåÀÇ ½ÇÇà - Stored Procedure, Function,
Package ±×¸®°í Anonymous PL/SQL ºí·Ï µîÀÌ °¡Áö°í ÀÖ´Â SQL ¹®ÀåÀÇ ¼öÇà - Referential
Integrity ConstraintÀÇ ½ÇÇà
SELECT name, value FROM
v$sysstat WHERE name = 'recursive calls';
ExtentÀÇ È®Àå Å« Extent ¾È¿¡ ¿©·¯ °³ÀÇ µ¥ÀÌÅÍ ºí·ÏÀ» ÇÑ ¹ø¿¡ ¾×¼¼½ºÇÏ´Â °ÍÀÌ ¼º´É
Çâ»ó¿¡ ÁÁ´Ù. ±×·¯¹Ç·Î Table Áß ¼º´ÉÀÌ ºü¸¥ °ÍÀº ¿©·¯ °³ÀÇ ÀÛÀº Extent¸¦ ÀÚÁÖ ÇÒ´ç¹Þ°Ô ÇÏ´Â °Íº¸´Ù Å«
Extent°¡ Çѹø¿¡ ÇÒ´çµÇµµ·Ï ÇÏ´Â °ÍÀÌ ÁÁ´Ù.
Contention Æ©´×
Rollback
Segment Contention ·Ñ¹é¼¼±×¸ÕÆ® ºí·ÏÀ» Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ ±â´Ù¸®´Â ¼ö¸¦ º¸°í ÆÇ´ÜÇÒ ¼ö Àִµ¥
V$WAITSTAT¸¦ ÀÌ¿ëÇØ¼ rollback segment¿¡ ´ëÇÑ contentionÀÌ ¼º´ÉÀ» °¨¼Ò½Ã۰í ÀÖ´ÂÁö ¾î¶²Áö¸¦ °áÁ¤ÇÒ ¼ö
ÀÖ´Ù.
Default·Î¼ ÀÌ Å×À̺íÀº SYS À¯Àú¿Í SYSTEM¿Í °°Àº SELECT ANY TABLE ½Ã½ºÅÛ ±ÇÇÑÀ»
°¡Áø ´Ù¸¥ À¯Àúµé¸¸ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. SELECT class, count FROM
v$waitstat WHERE class IN ('system undo header',
'system undo block', 'undo header', 'undo block');
CLASS COUNT
------------------- -------------
system undo header 2089
system undo block 633
undo header 1235
undo block 942
¡¤system undo header : SYSTEM rollback segmentÀÇ header blockÀ»
Æ÷ÇÔÇÏ´Â buffer¸¦ ±â´Ù¸®´Â ¼öÀÌ´Ù. ¡¤system undo block : SYSTEM rollback segmentÀÇ
header block ÀÌ¿ÜÀÇ ´Ù¸¥ blockµéÀ» Æ÷ÇÔÇÏ´Â buffer¸¦ ±â´Ù¸®´Â ¼öÀÌ´Ù. ¡¤undo header :
SYSTEM rollback segmentÀÇ header block ÀÌ¿ÜÀÇ ´Ù¸¥ rollback segmentÀÇ header
blockÀ» Æ÷ÇÔÇÏ´Â bufferµéÀ» ±â´Ù¸®´Â ¼öÀÌ´Ù. ¡¤undo block : SYSTEM rollback
segmentÀÌ¿ÜÀÇ ´Ù¸¥ rollback segments ÀÇ header block°ú´Â ´Ù¸¥ blocksÀ» Æ÷ÇÔÇÏ´Â bufferµéÀ»
±â´Ù¸®´Â ¼öÀÌ´Ù.
À§¿¡ ³ªÅ¸³ class º°·Î ±â´Ù¸®´Â Buffer ¼ö¿Í °°Àº ½Ã°£ µ¿¾È ÃÑ Request ¼ö¸¦
ºñ±³Çϸé Contention Á¤µµ¸¦ ¾Ë ¼ö ÀÖ´Ù.
SELECT SUM(value)
FROM v$sysstat WHERE name IN ('db block gets',
'consistent gets');
SUM(VALUE) ------------
929530 ÀÌ °á°ú°ª°ú °¢ Classº° Count°ªµéÀ» ºñ±³Çؼ 1%°¡ ³ÑÀ¸¸é ·Ñ¹é ¼¼±×¸ÕÆ®ÀÇ ¼ö¸¦
´Ã·Á¾ß ÇÑ´Ù.
Redo Log Buffer Contention ¸®µÎ ·Î±× ÆÄÀÏ¿¡ Log Entry¸¦
±â·ÏÇϱâ À§Çؼ´Â ¸®µÎ ·Î±× ¹öÆÛ¸¦ °ÅÃļ ³»·Á°¡¾ß Çϴµ¥ Request °¡ ¸¹À» °æ¿ì »ç¿ëÀÚ ÇÁ·Î¼¼½º´Â ´ë±âÇÏ´Â ½Ã°£ÀÌ ±æ¾îÁö°Ô
µÈ´Ù. À̸¦ ´ÜÃà½Ã۱â À§ÇØ ¸®µÎ ·Î±× ¹öÆÛ¸¦ ´Ã·Á ÁÖ¾î¾ß ÇÑ´Ù. SELECT name, value
FROM v$sysstat WHERE name = 'redo log space
requests';
°á°ú °ªÀÌ 0¿¡ °¡±î¿ï ¶§±îÁö 5%¾¿ ¸®µÎ ·Î±× ¹öÆÛ ¼ö¸¦ ´Ã·Á¾ß Çϴµ¥ ÀÌ´Â ¿À¶óŬ Ãʱâ
ÆÄ¶ó¹ÌÅÍÀÇ LOG_BUFFERÀÇ °ªÀ» Ű¿ì¸é µÈ´Ù.
Redo Log Buffer Latch ¸®µÎ
·Î±× ¹öÆÛ ¾×¼¼½º´Â Latch¿¡ ÀÇÇØ¼ Á¶Á¤µÈ´Ù.
- Redo Allocation Latch ¸®µÎ ·Î±× ¹öÆÛ¿¡¼
Redo Entry¸¦ À§ÇÑ °ø°£À» ÇÒ´çÇÏ´Â °ÍÀ» Á¦¾îÇÑ´Ù. Buffer¿¡ °ø°£À» ÇÒ´çÇÒ ¶§´Â ¿À¶óŬ »ç¿ëÀÚ ÇÁ·Î¼¼½º°¡ ¹Ýµå½Ã
Redo Allocation Latch¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ¸¸¾à ÇϳªÀÇ Redo Allocation Latch°¡ ÀÖ´Ù¸é ÇÑ
¹ø¿¡ ´Ü ÇϳªÀÇ »ç¿ëÀÚ ÇÁ·Î¼¼½º¸¸ ¹öÆÛ¿¡ °ø°£À» ÇÒ´çÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÃÊ±â ÆÄ¶ó¹ÌÅÍÀÇ
LOG_SMALL_ENTRY_MAX_SIZE°ª¿¡ µû¶ó Á¤ÇØÁø´Ù.
ContentionÀ» ÃÖ¼ÒÈ ÇÏ·Á¸é
LOG_SMALL_ENTRY_MAX_SIZE°ªÀ» °¨¼Ò½ÃŲ´Ù.
- Redo Copy Latch Redo
Entry°¡ ³Ê¹« Ä¿¼ Redo Allocation Latch¿¡ º¹»çÇÒ ¼ö ¾ø´Ù¸é, »ç¿ëÀÚ ÇÁ·Î¼¼½º´Â ¹öÆÛ¿¡ Entry¸¦ º¹»çÇϱâ
Àü¿¡ Redo Copy Latch¸¦ °®°í ÀÖ¾î¾ß¸¸ ÇÑ´Ù. Redo Copy Latch¸¦ Àâ°í ÀÖ´Â µ¿¾È »ç¿ëÀÚ ÇÁ·Î¼¼½º´Â
¹öÆÛ¿¡ ÇÒ´çµÈ °ø°£ ¾È¿¡ Redo Entry¸¦ º¹»çÇÑ ÈÄ Redo Copy Latch¸¦ ÇØÁ¦ÇÏ°Ô µÈ´Ù. Redo Copy
LatchÀÇ ¼ö´Â ÃÊ±â ÆÄ¶ó¹ÌÅÍ LOG_SIMULTANEOUS_COPIES¿¡ ÀÇÇØ °áÁ¤µÈ´Ù.
ContentionÀ»
ÃÖ¼ÒÈÇÏ·Á¸é LOG_SIMULTANEOUS_COPIESÀÇ ±âº»°ªÀº ÇöÀç CPUÀÇ ¼ö·Î µÇ¾î Àִµ¥ À̸¦ µÎ ¹èÁ¤µµ ´Ã¸®¸é
¼º´É¿¡ µµ¿òÀÌ µÈ´Ù.
Sort Æ©´× ´ëºÎºÐ ¾ÖÇø®ÄÉÀ̼ǿ¡´Â ±âº» Sort ¿µ¿ªÀ¸·Îµµ ¼º´É»ó ¹«¸®´Â ¾øÀ¸³ª,
Çʿ信 µû¶ó¼ Sort ¿µ¿ªÀÌ ºÎÁ·ÇÏ´Ù°í ÆÇ´ÜµÇ¸é À̸¦ ´Ã·Á¾ß ÇÑ´Ù. (¿À¶óŬ ÃÊ±â ÆÄ¶ó¹ÌÅÍ SORT_AREA_SIZE °ªÀ» Áõ°¡)
SELECT name, value FROM v$sysstat WHERE name
IN('sorts(memory)', '(sorts(disk)');
sorts(memory) :
µð½ºÅ©»óÀÇ Temporary Segment¿Í I/O ¾øÀÌ Sort ¿µ¿ª¿¡¼¸¸ ÀÌ·ç¾îÁö´Â Sort ¼ö.
sorts(disk) : Sort ¿µ¿ª¿¡¼¸¸ ó¸®Çϱ⿡´Â µ¥ÀÌÅͰ¡ ³Ê¹« Ä¿¼ Temporary Segment¿Í
I/O°¡ ÇÊ¿äÇÑ Sort ¼ö.
Sort ¿µ¿ªÀ» Å©°Ô Çϸé Sort °ü·Ã ÀÛ¾÷µéÀº ¼Óµµ°¡ Çâ»óµÇ³ª, Private
SQL°ú PL/SQLÀ» À§ÇÑ ¸Þ¸ð¸® µî ´Ù¸¥ ¿ä¼Ò¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖÀ¸¹Ç·Î ÁÖÀÇÇØ¾ß ÇÑ´Ù.
- NOSORT
Index »ý¼º½Ã Sort°¡ ¹ß»ýÇÑ´Ù. ¹Ýµå½Ã SortÇÒ Çʿ䰡 ¾ø´Â Index´Â NOSORT ±â´ÉÀ» »ç¿ëÇÏ¿© ºÎÇϸ¦ ÁÙÀÌ´Â
°ÍÀÌ ÁÁ´Ù. CREATE INDEX emp_index ON emp(ename)
NOSORT;
Free List Contention Æ©´× µ¿½Ã¿¡ ÇÑ Table¿¡ Insert
¿¬»êÀÌ ¸¹ÀÌ ¹ß»ýÇÏ´Â °æ¿ì¿¡´Â Free List°¡ ºÎÁ·ÇÑ Çö»óÀÌ ¹ß»ýÇϰí ÀÌ´Â ¼º´É ÀúÇØ ¿äÀÎÀÌ µÈ´Ù. SELECT
class, count FROM v$waitstat WHERE class = 'free
list'; Free List ´ë±â Ƚ¼öÀÇ ºñÀ²ÀÌ 1% ÀÌ»óÀ̸é Ãæµ¹°¨¼Ò¸¦ À§ÇØ Free ListÀÇ Ãß°¡ ¹èÁ¤À»
°í·ÁÇÑ´Ù.
FREELISTS Storage Parameter°ªÀ» Áõ°¡ÇÏ¿© TableÀ» ´Ù½Ã »ý¼ºÇÏ¸é µÈ´Ù.
Checkpoint Æ©´× Checkpoint°¡ ÀÚÁÖ ¹ß»ýÇÏ¸é ¸¸¾àÀÇ °æ¿ì¿¡ ¹ß»ýÇÒ ÀνºÅϽº Failure¿Í °°Àº
»óȲ¿¡¼ Recovery ½Ã°£À» ÁÙ¿© ÁÖÁö¸¸, ¿À¶óŬ ¼º´É ÀúÇÏ ¿äÀÎÀÌ µÇ±âµµ ÇÑ´Ù. ¼öÇà¼Óµµ°¡ Áß¿äÇÑ È¯°æ¿¡¼´Â
Checkpoint ºóµµ¼ö¸¦ ÁÙÀ̰í, ¾ÈÁ¤¼ºÀÌ Áß¿äÇÑ È¯°æ¿¡¼´Â Checkpoint ºóµµ¼ö¸¦ ´Ã¸°´Ù.
-
Checkpoint ºóµµ¼ö¸¦ ÃÖ¼ÒÈÇÏ·Á¸é LOG_CHECKPOINT_INTERVAL°ªÀ» °¡Àå Å« Redo Log ÆÄÀϺ¸´Ù Å©°Ô
¼¼ÆÃ. LOG_CHECKPOINT_TIMEOUT°ªÀ» 0À¸·Î ¼¼ÆÃ. - Checkoint ºóµµ¼ö¸¦ ´Ã¸®·Á¸é
LOG_CHECKPOINT_INTERVAL°ªÀ» ÀÛ°Ô ¼¼ÆÃ. LOG_CHECKPOINT_TIMEOUT°ªÀ» ÀÛ°Ô ¼¼ÆÃ.
ÃÊ±â ÆÄ¶ó¹ÌÅÍ¿¡¼ CHECKPOINT_PROCESS = TRUE
4. ¼¹ö Æ©´×
ÇÁ·Î¼¼½º(Process) Àüü »ç¿ëÀÚ ÇÁ·Î¼¼½º ¼ö¿Í ¿À¶óŬ ÀνºÅϽº °ü·Ã ÇÁ·Î¼¼½º ¼ö ±×¸®°í OS °ü·Ã ÇÁ·Î¼¼½º
¼öµéÀÇ ÇÕÀÌ Àüü ÇÁ·Î¼¼½ºÀÇ ¼ö°¡µÈ´Ù.
Àüü ÇÁ·Î¼¼½º ¼öÀÇ 10-30% ÀÌ»óÀÇ ÇÁ·Î¼¼½ºµéÀÌ ÁöÀå ¾øÀÌ ¼öÇàµÉ ¼ö ÀÖ´Â
ȯ°æÀ» Á¦°øÇØ¾ß ÇÑ´Ù. ¿À¶óŬ ÀνºÅϽº ÇÁ·Î¼¼½º¿Í ¿À¶óŬ »ç¿ëÀÚ ÇÁ·Î¼¼½º´Â ¿ì¼± ¼øÀ§¸¦ °°°Ô ÇØ¾ß ÇÑ´Ù.
¸Þ¸ð¸®
SGA°¡ ÀÛÀº °æ¿ì CPU idle »óŰ¡ ¸¹ÀÌ ¹ß»ýÇÑ´Ù. ÀÌ´Â SGA°¡ À۾Ƽ ¿À¶óŬ ÀνºÅϽº´Â I/O Wait¿¡
¸¹Àº ½Ã°£À» ¼ÒºñÇϱ⠶§¹®ÀÌ´Ù.
NetWare, NT ȯ°æ - ´Ù¸¥ ÇÁ·Î¼¼½º¿Í °°Àº ¸Þ¸ð¸®¸¦ »ç¿ë.
UNIX ȯ°æ - Shared ¸Þ¸ð¸®¶ó´Â Ư¼öÇÑ Á¾·ùÀÇ ¸Þ¸ð¸®¸¦ »ç¿ë. - Page Size
Entension(PSE)¶ó´Â ±â´É(OS ºÎÆÃ½Ã ¿À¶óŬÀ» À§ÇØ ¹Ì¸® ¸¹Àº ¾çÀÇ ¸Þ¸ð¸®¸¦ ¿¹¾à)À» »ç¿ëÇÏ¸é ¼º´É¿¡ ¸¹Àº µµ¿òÀÌ µÇ³ª,
ÀÌ ¸Þ¸ð¸®¸¦ ¿À¶óŬÀÌ ´Ù »ç¿ëÇÏÁö ¾Ê¾Æµµ ´Ù¸¥ ÇÁ·Î¼¼½º´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.
I/O Áß¿äÇÑ Æ©´× ¿ä¼Ò´Â I/O
´ë¿ªÆø, I/O ¸Þ¼Òµå, ºí·Ï Å©±â.
ºí·Ï Å©±â´Â I/O ºÎÇÏ¿Í ¸¹Àº °ü°è°¡ ÀÖ´Ù. OLTP, ·£´ý
¾×¼¼½º°¡ ¸¹Àº ȯ°æ - 2k ¶Ç´Â 4k DSS, ½ÃÄö¼È ¾×¼¼½º°¡ ¸¹Àº ȯ°æ - 4k ¶Ç´Â 8k
OS ºí·Ï Å©±â¿Í
DB ºí·Ï Å©±â¸¦ °°°Ô Çϰųª OS ºí·ÏÅ©±â°¡ DB ºí·Ï Å©±â¿¡ µÎ ¹è°¡ µÇµµ·Ï ÇÏ´Â °ÍÀÌ ¼º´ÉÀ» ÁÁ°Ô ÇÏ´Â ¿äÀÎÀÌ µÈ´Ù.
I/O ¸Þ¼Òµå Áß¿¡´Â OS ÆÄÀÏ ½Ã½ºÅÛ ¹öÆÛ¸¦ »ç¿ëÇÏ´Â ÀϹæÀûÀÎ ¹æ½ÄÀÌ ÀÖ°í, OS ÆÄÀÏ ½Ã½ºÅÛ ¹öÆÛ¸¦
»ç¿ëÇÏÁö ¾Ê´Â Raw Device ¹æ½ÄÀÌ ÀÖ´Ù. + Sun Solaris : Filesystem, Raw Device¿¡¼
Async I/O »ç¿ë°¡´É + SCO : Raw Device¿¡¼ Async I/O »ç¿ë°¡´É + Pyramid : Raw
Device¿¡¼ Async I/O »ç¿ë°¡´É + Sequent : Raw Device¿¡¼ Async I/O »ç¿ë°¡´É
Raw Device ¹æ½ÄÀº OSÀÇ ºÎÇϸ¦ ÁÙÀÏ ¼ö ÀÖ°í, I/O ¼º´ÉÀ» ³ôÀÏ ¼ö ÀÖ´Ù.
Asynchronous I/O ¹æ½ÄÀº ¿À¶óŬ I/O ¼º´ÉÀ» Å©°Ô ³ôÀÏ ¼ö ÀÖ´Â ¹æ¹ýÀÌ´Ù. O/S ´Â
RequestµéÀ» ¸ð¾Æ¼ µð½ºÅ© ÄÁÆ®·Ñ·¯¸¦ ¿ä±¸ÇÏ°í ´Ù¸¥ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù. ³ªÁß¿¡ µð½ºÅ© ÄÁÆ®·Ñ·¯¿¡¼ ÀÀ´äÀÌ ¿À¸é
ÀÎÅÍ·´Æ®¸¦ ¹Þ´Â´Ù. Asynchronous I/O ¹æ½ÄÀº ´Ù¸¥ ¹æ½Ä°ú ºñ±³ÇÏ¿© 10-30%ÀÇ ¼º´ÉÀ» Çâ»ó½Ãų ¼ö ÀÖ´Ù.
¿¹) SCO UNIX $chown oracle /dev/async $chgrp dba
/dev/async ASYNC_WRITE = TRUE
UnixWare
$chown oracle /dev/async $chgrp dba /dev/async
USE_ASYNC_TO = TRUE LGWR_USE_ASYNC_IO = TRUE
Post-Wait Semaphore ¿À¶óŬÀÌ »ç¿ëÀÚ¿¡°Ô Sleeping SignalÀ» ÁÙ ¼ö ÀÖ°ÔÇϰí, ´Ù½Ã
ÀÏÀ» ÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â »õ·Î¿î ÇüÅÂÀÇ SemaphoreÀÌ´Ù. CPUÀÇ Idle CycleÀ» Å©°Ô ÁÙ¿© ¼º´ÉÀ» Çâ»ó½ÃŲ´Ù.
Post-Wait SemaphoreÀÇ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é. - ¿À¶óŬ ÃÊ±â ÆÄ¶ó¹ÌÅÍ ¼öÁ¤.
USER_POST_WAIT_DRIVER = TRUE POST_WAIT_DEVICE =
/dev/pw Device À̸§Àº ½Ã½ºÅÛ¸¶´Ù ´Ù¸¦ ¼ö ÀÖ´Ù. - DeviceÀÇ »ç¿ë ±ÇÇÑÀ» ¼öÁ¤.
%chown oracle /dev/pw %chgrp dba /dev/pw -
Post-Wait Device°¡ »ç¿ëµÇ´ÂÁö È®ÀÎ. %ipcs
5. Performance
Parameter
¿À¶óŬ ÃÊ±â ÆÄ¶ó¹ÌÅÍ º¯¼öµéÀº ¿À¶óŬ ¼º´É¿¡ ¸¹Àº ¿µÇâÀ» ÁØ´Ù. ÀÌ º¯¼öµéÀ» ÀÌÇØÇϰí
Çʿ信 µû¶ó¼ ÀûÀýÇÏ°Ô ¼öÁ¤ÇÏ°í »ç¿ëÇÏ¸é ¼º´É Çâ»ó¿¡ ¸¹Àº µµ¿òÀÌ µÈ´Ù.
[Âü°í. ±³Á¦ 491-497]


|