À妽º »ý¼º
¼¹ö ÇÁ·Î¼¼½º(¶Ç´Â À妽º°¡ º´·Ä·Î »ý¼ºµÇ°í ÀÖÀ» °æ¿ì¿¡´Â ¿©·¯ ÇÁ·Î¼¼½ºµé)´Â B-Tree¸¦ ±¸ÃàÇϱâ
Àü¿¡ À妽ºµÇ´Â °ªÀ» Á¤·ÄÇØ¾ß ÇÕ´Ï´Ù.
ORDER BY ¶Ç´Â GROUP BY Àý
¼¹ö ÇÁ·Î¼¼½º´Â
ORDER BY ¶Ç´Â GROUP BY ÀýÀÇ °ªÀ» Á¤·ÄÇØ¾ß ÇÕ´Ï´Ù.
DISTINCT °ª
DISTINCT Å°¿öµå¿¡ ´ëÇØ, Á¤·Ä ½Ã Áߺ¹µÈ °ªÀ» ¾ø¾Ö¾ß ÇÕ´Ï´Ù.
UNION, INTERSECT, ¶Ç´Â MINUS ¿¬»ê
¼¹ö´Â Áߺ¹µÈ °ªÀ» ¾ø¾Ö±â À§ÇØ ÀÛ¾÷ÇÏ°í ÀÖ´Â Å×À̺íÀ» Á¤·ÄÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.
Á¤·Ä-º´ÇÕ Á¶ÀÎ
SQL> select
dept_id, id
2> from s_emp,
s_dept
3> where s_emp.dept_id =
s_dept.id;
»ç¿ëÇÒ ¼ö ÀÖ´Â À妽º°¡ ¾øÀ» °æ¿ì, ÀÌÄûÁ¶ÀÎ(equijoin) ¿äûÀº ´ÙÀ½À» ¼öÇàÇØ¾ß ÇÕ´Ï´Ù:
ANALYZE ½ÇÇà
ANALYZE ¸í·ÉÀº Å×À̺í, À妽º, Ŭ·¯½ºÅÍ¿¡ °üÇÑ Åë°è
ÀڷḦ ¼öÁýÇϴµ¥ À¯¿ëÇϱ⠶§¹®¿¡, CBO°¡ ÃÖ»óÀÇ ½ÇÇà °èȹÀ» Á¤ÀÇÇÏ´Â µ¥ µµ¿òÀÌ µË´Ï´Ù. ÀÌ ¸í·ÉÀº µ¥ÀÌÅ͸¦ Á¤·ÄÇÏ¿©, ¿ä¾àµÈ Á¤º¸¸¦
Á¦°øÇÕ´Ï´Ù.
SQL> select
name,
value
2 from
v$sysstat where name = ¡®sorts
(rows)¡¯;
NAME
VALUE
---------------
-----------------------
sorts
(rows)
61751
SQL> execute
sys.dbms_utility.analyze_schema (¡®SCOTT¡¯,
COMPUTE¡¯);
PL/SQL
procedure successfully
completed.
SQL> select
name,
value
2 from
v$sysstat where name = ¡®sorts
(rows)¡¯;
NAME
VALUE
---------------
-----------------------
sorts
(rows)
622930
ÀÛ¾÷ÀÌ SORT_AREA_SIZE ÆĶó¹ÌÅÍÀÇ °ª(¹ÙÀÌÆ®)º¸´Ù ´õ ÀÛÀº ¿µ¿ª ³»¿¡¼ ¼öÇàµÉ ¼ö ÀÖ´Â
°æ¿ì, ¿À¶óŬ ¼¹ö´Â ¸Þ¸ð¸®¿¡¼ Á¤·ÄÀÛ¾÷À» ¼öÇàÇÕ´Ï´Ù.
Á¤·Ä ÀÛ¾÷ÀÌ ÀÌ °ªº¸´Ù ´õ ¸¹Àº °ø°£À» ÇÊ¿ä·Î ÇÒ °æ¿ì¿¡´Â:
Á¤·Ä ¿µ¿ª
Á¤·Ä °ø°£Àº
ÁÖÀÇ: ´ë·®ÀÇ Á¤·Ä ÀÛ¾÷À» ¼öÇàÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀº MTS¸¦ »ç¿ëÇؼ´Â ¾ÈµË´Ï´Ù.
ÆĶó¹ÌÅ͵é
SORT_AREA_SIZE
SORT_AREA_RETAINED_SIZE
¹®Á¦ Áø´Ü
Æ©´× ¸ñÇ¥
NOSORT Àý
SQL*Loader »ç¿ë ½Ã ´ÜÀÏ CPU ±â°è¿¡¼ ¹Ì¸® Á¤·ÄµÈ
µ¥ÀÌÅÍ¿¡ ´ëÇØ À妽º¸¦ »ý¼ºÇÒ ¶§ NOSORT ÀýÀ» »ç¿ëÇϽʽÿÀ. ÀÌ ÀýÀº Å×ÀÌºí¿¡ »ðÀÔµÈ µ¥ÀÌÅÍ¿¡ ´ëÇؼ¸¸
À¯È¿ÇÕ´Ï´Ù.
SQL>
create index S_EMP_DEPT_ID_FK on s_emp(dept_id) NOSORT;
ORA-01409: NOSORT option may not be used; rows are not in
ascending order
º¹¼ö CPU ±â°è¿¡¼, µ¥ÀÌÅÍ°¡ ¼ø¼´ë·Î ·ÎµåµÇÁö
¾Ê´õ¶óµµ, º´·Ä·Î µ¥ÀÌÅ͸¦ ·ÎµåÇÏ´Â °ÍÀÌ ´õ ºü¸¨´Ï´Ù. ±×·± ´ÙÀ½, º´·Ä À妽º »ý¼º ±â´ÉÀ» »ç¿ëÇÏ¿© Á¤·Ä ÀÛ¾÷ÀÇ ¼Óµµ¸¦ ³ôÀÏ ¼ö
ÀÖ½À´Ï´Ù.
UNION ALL
UNION ´ë½Å UNION ALLÀ» »ç¿ëÇϽʽÿÀ. ÀÌ ÀýÀº ÀÌÁß
°ªÀ» »èÁ¦ÇÏÁö ¾Ê½À´Ï´Ù. µû¶ó¼ Á¤·ÄÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.
ÁßøµÈ ·çÇÁ Á¶ÀÎ (Nested Loop Join)
ÀÌÄûÁ¶ÀÎ(equijoin) ¿äû¿¡ ´ëÇØ À妽º ¾×¼¼½º¸¦ »ç¿ëÇϽʽÿÀ:
SQL> select dept_id,
id
2 from s_emp,
s_dept
3 where s_emp.dept_id
= s_dept.id;
¿ÉƼ¸¶ÀÌÀú´Â Á¤·Ä-º´ÇÕ Á¶ÀÎ ´ë½Å ÁßøµÈ ·çÇÁ
Á¶ÀÎÀ» ¼±ÅÃÇÕ´Ï´Ù. ÁßøµÈ ·çÇÁ Á¶ÀÎÀº ¾î¶°ÇÑ Á¤·Ä ÀÛ¾÷µµ ¿ä±¸ÇÏÁö ¾ÊÀ¸¸ç, ´ÙÀ½À» ÇÊ¿ä·Î ÇÕ´Ï´Ù:
INDEXES ¿Í ORDER BY
ORDER BY ¹®°ú ÇÔ²² ºó¹øÇÏ°Ô ÂüÁ¶µÇ´Â ¿¿¡ À妽º¸¦ »ý¼ºÇϽʽÿÀ. À妽º°¡ ¿À¸§Â÷¼øÀ¸·Î Á¤·ÄµÇ°í ÀÌÁßÀ¸·Î ¿¬°áµÇ¾î
Àֱ⠶§¹®¿¡, ¿À¶óŬ ¼¹ö´Â Á¤·Ä ÀÛ¾÷ º¸´Ù´Â À妽º¸¦ »ç¿ëÇÒ °ÍÀÔ´Ï´Ù.
ANALYZE FOR COLUMNS
Á¶ÀÎ Á¶°Ç¿¡ °ü·ÃµÈ ¿¸¸ÀÇ Åë°èÀÇ ¾çÀ»
°¨¼Ò½ÃÅ°½Ê½Ã¿À: ANALYZE¡¦FOR COLUMNS ¶Ç´Â ANALYZE¡¦FOR ALL INDEXED COLUMNS
ÁÖÀÇ:
¡°ANALYZE¡¦ SIZE n¡± ¸í·ÉÀº °ü·Ã ¿¿¡ ´ëÇÑ È÷½ºÅä±×·¥À» »ý¼ºÇÕ´Ï´Ù. ÀÌ ÀýÀ» FOR ALL INDEXED COLUMNS Àý°ú
°áÇÕÇÏ¸é ±âº»Å°(primary key)¿Í °íÀ¯ÇÑ(unique) Á¦¾àÁ¶°Ç¿¡ ´ëÇØ ºÒÇÊ¿äÇÑ È÷½ºÅä±×·¥À» »ý¼ºÇÕ´Ï´Ù.
ANALYZE ESTIMATE
¿ÉƼ¸¶ÀÌÀú¿¡
´ëÇؼ´Â COMPUTE ÀýÀÌ ´õ Á¤È®ÇÕ´Ï´Ù. ±×·¯³ª, ¸¹Àº ¾çÀÇ Á¤·Ä °ø°£À» ÇÊ¿ä·Î Çϱ⠶§¹®¿¡, Å« Å×À̺í°ú Ŭ·¯½ºÅÍ¿¡ ´ëÇؼ´Â
ESTIMATE ÀýÀÌ ¼±È£µË´Ï´Ù.
µ¿ÀûÀÎ ºä¿Í Report.txt Ãâ·Â°á°ú
ÁÖÀÇ: OEM Áø´Ü ÆÑ ¾ÖÇø®ÄÉÀ̼Ç
Performance Manager ->
Database_Instance -> System Statistics
Performance Manager -> Load
-> Sort Rows Rate
ºñÀ²
sort(disk) ´ë sort(memory)ÀÇ ºñÀ²Àº 5% º¸´Ù À۾ƾß
ÇÕ´Ï´Ù.
Guidelines
µð½ºÅ© Á¤·Ä ÀÛ¾÷ÀÇ ºñÀ²ÀÌ ³ôÀ» °æ¿ì,
SORT_AREA_SIZEÀÇ Å©±â¸¦ Áõ°¡½ÃÅ°½Ê½Ã¿À. SORT_AREA_SIZE´Â °¢ ½ÇÇà ÀÛ¾÷ÀÇ Å©±â¸¦ Áõ°¡½ÃÅ°°í ½ÇÇà ¹× º´ÇÕÀÇ ÃÑ ÀÛ¾÷ ¼ö¸¦
°¨¼Ò½Ãŵ´Ï´Ù.
Å« Á¤·Ä ¿µ¿ª¿¡ ´ëÇÑ ¼º´ÉÀÇ µæ°ú ½Ç
Á¤·Ä ¿µ¿ªÀÇ Å©±â¸¦ Áõ°¡½Ãų °æ¿ì, Á¤·Ä ÀÛ¾÷À» ¼öÇàÇÏ´Â °¢
¼¹ö ÇÁ·Î¼¼½º´Â ´õ ¸¹Àº ¸Þ¸ð¸®¸¦
ÇÒ´çÇÕ´Ï´Ù. ÀÌ°ÍÀº ¿î¿µÃ¼Á¦ ¸Þ¸ð¸® ÇÒ´ç¿¡ ¿µÇâÀ» ¹ÌÄ¡°í ÆäÀÌ¡°ú ½º¿ÍÇÎ ÀÛ¾÷À» Æ÷ÇÔ½Ãų ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
Á¤·Ä ¿µ¿ªÀÇ Å©±â¸¦
Áõ°¡½Ãų °æ¿ì, µ¥ÀÌÅÍ°¡ °ð ÂüÁ¶µÉ °ÍÀÌ ¾Æ´Ï¶ó¸é, Á¤·Ä ¿µ¿ªÀÇ º¸À¯ Å©±â¸¦ °¨¼Ò½ÃÅ°°Å³ª ¿À¶óŬÀÌ Á¤·Ä ¿µ¿ªÀ» °¨¼Ò½ÃÅ°´Â Å©±â±îÁö Á¤·Ä ¿µ¿ªÀÇ
Å©±â¸¦ °¨¼Ò½Ãų °ÍÀ» °í·ÁÇϽʽÿÀ. º¸À¯µÈ Á¤·Ä ¿µ¿ªÀÌ ´õ ÀÛÀ»¼ö·Ï ¸Þ¸ð¸® »ç¿ëÀº ´õ ÀûÁö¸¸, µð½ºÅ© »óÀÇ Àӽà ¼¼±×¸ÕÆ®¿¡ ¾²±â¿Í Àб⸦ Çϱâ
À§ÇÑ I/O°¡ Ãß°¡µË´Ï´Ù.
ÁÖÀÇ: OEM Áø´Ü ÆÑ ¾ÖÇø®ÄÉÀ̼Ç
Performance Manager ->
Memory -> Memory Sort Hit %
|
Guidelines
ÀúÀåÀå¼Ò ÆĶó¹ÌÅÍ Á¤·Ä ÀÛ¾÷Àº SORT_AREA_SIZEº¸´Ù ÀÛÀ» °æ¿ì¿¡ ¸Þ¸ð¸®¿¡¼ ¼öÇàµÇ±â ¶§¹®¿¡, ÀͽºÅÙÆ® Å©±â¸¦ ¼³Á¤ÇÒ ¶§ ÀÌ°ÍÀ» °í·ÁÇØ¾ß ÇÕ´Ï´Ù.
´Ù¸¥ Àӽà Å×ÀÌºí½ºÆäÀ̽º »ç¿ëÀÚ°¡ ÇÊ¿ä·Î ÇÏ´Â Á¤·Ä °ø°£À» Á¤ÀÇÇϱâ À§ÇÏ¿©, V$SESSION°ú
V$SORT_USAGE ºä¸¦ °áÇÕÇÏ¿© ÀνºÅϽº¿¡¼ ÇöÀç È°µ¿ÁßÀÎ µð½ºÅ© Á¤·Ä ÀÛ¾÷¿¡ °üÇÑ Á¤º¸¸¦ ÀÔ¼öÇϽʽÿÀ:
SQL> SELCET s.username,
u.¡±USER¡±, u.tablespace, u.contents,
2
u.extents,
u.blocks
3 FROM v$session s,
v$sort_usage u
4 WHERE
s.saddr=u.session_addr
5 AND
u.contents=¡¯TEMPORARY¡¯;
USERNAME USER
TABLESPACE CONTENTS EXTENTS
BLOCKS
-------- -----
---------- --------- -------
------
STAT
SYSTEM TEMP
TEMPORARY
20
1000
SCOTT
SYSTEM TEMP
TEMPORARY
2
100
V$SORT_USAGE ÀÇ USER ¿Àº Ç×»ó ÀÌ ºä¸¦ ÁúÀÇÇÏ°í ÀÖ´Â »ç¿ëÀÚ¸¦ ³ªÅ¸³À´Ï´Ù. Á¤·Ä ÀÛ¾÷À» ¼öÇàÇÏ°í ÀÖ´Â
»ç¿ëÀÚ´Â V$SESSION ºäÀÇ usernameÀÔ´Ï´Ù.
´ë¿ë·®ÀÇ µð½ºÅ© °ø°£À» ¿ä±¸ÇÏ´Â »ç¿ëÀÚ STAT´Â ÀͽºÅÙÆ® Å©±â°¡ ´õ Å« ´Ù¸¥ ÀÓ½Ã
Å×ÀÌºí½ºÆäÀ̽º·Î ¹èÁ¤µÇ¾î¾ß ÇÕ´Ï´Ù.
½ºÆ®¶óÀÌÇÎ
Àӽà Å×ÀÌºí½ºÆäÀ̽º´Â ¿©·¯ ¸¹Àº µð½ºÅ©¿¡ ½ºÆ®¶óÀÌÇεǾî¾ß ÇÕ´Ï´Ù. ÀÓ½Ã
Å×ÀÌºí½ºÆäÀ̽º°¡, °¢±â ÃÊ´ç ÃÖ´ë I/O°¡ 50ȸÀÎ 2°³ÀÇ µð½ºÅ©¿¡¸¸ ½ºÆ®¶óÀÌÇεǾî ÀÖ´Ù¸é, ÃÊ´ç 100ȸÀÇ I/O¸¸ ¼öÇàµÉ ¼ö ÀÖ½À´Ï´Ù. Á¤·Ä
ÀÛ¾÷¿¡ ¸Å¿ì ±ä ½Ã°£ÀÌ ¼Ò¿äµÇ±â ¶§¹®¿¡, ÀÌ·¯ÇÑ Á¦ÇÑÀº ¹®Á¦°¡ µÉ ¼ö ÀÖ½À´Ï´Ù. 10°³ÀÇ µð½ºÅ©¿¡ Àӽà Å×ÀÌºí½ºÆäÀ̽º¸¦ ½ºÆ®¶óÀÌÇÎÇÒ °æ¿ì, Á¤·Ä
ÀÛ¾÷ÀÇ ¼Óµµ¸¦ 5¹è³ª ¿Ã¸± ¼ö ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì¿¡´Â, ÃÊ´ç I/O°¡ 500ȸ´Â °¡´ÉÇÒ °ÍÀÔ´Ï´Ù.
¹®¸Æ |
ÂüÁ¶ |
ÃʱâÈ ÆĶó¹ÌÅÍ |
SORT_AREA_SIZE |
µ¿Àû ¼º´É ºä |
V$SYSSTAT |
µ¥ÀÌÅÍ µñ¼Å³Ê¸® ºä |
None |
¸í·É¾î |
None |
ÆÐÅ°ÁöµÈ ÇÁ·Î½ÃÀú¿Í ÇÔ¼ö |
None |
½ºÅ©¸³Æ® |
None |
Áø´ÜÆÑ ¾îÇø®ÄÉÀÌ¼Ç |