Oracle 8i¤«¤éƳÆþ¤µ¤ì¤¿¡¢Stored Outline¤Î´ðÁäò¤ª¤µ¤é¤¤¡£
Stored Outline¤È¤Ï¡¢Ã»¤¯¸À¤¨¤Ð¡¢SQL¤Î¼Â¹Ô·×²è¤ò¥Ç¡¼¥¿¥Ù¡¼¥¹¤ËÊݸ¤¹¤ëµ¡Ç½¡¢Ä¹¤¯¸À¤¨¤Ð¡¢SQL¤Î¥Ï¡¼¥É²òÀÏ»þ¤ËOracle¤¬»²¹Í¤È¤¹¤ë¥Ò¥ó¥Èʸ¥»¥Ã¥È¤òºîÀ®¤·¤½¤ì¤òÊݸ¤¹¤ëµ¡Ç½¡¢¤È¤Ê¤ë¡£Êݸ¤·¤¿¥¢¥¦¥È¥é¥¤¥ó(Stored Outline)¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¥Ñ¥é¥á¡¼¥¿¤òÊѹ¹¤¹¤ë¤³¤È¤Ë¤è¤ê»ÈÍѲÄÈݤò·èÄê¤Ç¤¤ë¡£
Stored Outline¤Ï¡¢°ìÅÙºîÀ®Êݸ¤µ¤ì¤ì¤Ð¡¢¤½¤ì¤ò»ÈÍѲÄǽ¤È¤·¤Æ¤¤¤ë¸Â¤ê¡¢Ä̾ï¤Ç¤¢¤ì¤Ð¼Â¹Ô·×²è¤¬ÊѤï¤Ã¤Æ¤·¤Þ¤¦¤è¤¦¤Ê¾ì¹ç¤Ç¤â¡¢Êݸ¤µ¤ì¤¿¼Â¹Ô·×²è¤ò»È¤¤Â³¤±¤ë¡£¤³¤³¤Ç¸À¤¦¼Â¹Ô·×²è¤¬ÊѤï¤Ã¤Æ¤·¤Þ¤¦¤è¤¦¤Ê¾ì¹ç¤È¤Ï¡¢Åý·×¾ðÊó¤ÎºÆºîÀ®¡¢º÷°úÄɲᢥª¥×¥Æ¥£¥Þ¥¤¥¶¤ÎÊѹ¹¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¥Ñ¥é¥á¡¼¥¿(SORT_AREA_SIZE¤Ê¤É)¤ÎÊѹ¹¤Ê¤É¤¬¤¢¤ë¡£
¤³¤Îµ¡Ç½¤ò»È¤¨¤Ð¡¢Î㤨¤Ð¡¢¥ª¥ó¥é¥¤¥ó·Ï¤Ê¤É¤Î¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤¬ºÇ½ÅÍ׻뤵¤ì¤ë¤è¤¦¤Ê¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬È¯¹Ô¤¹¤ëSQL¤ËÂФ·°ìÅÙºîÀ®¤ò¹Ô¤Ã¤Æ¤ª¤±¤Ð¡¢¥Ç¡¼¥¿Î̤ÎÊѲ½¤Ê¤É¤¬¤¢¤Ã¤Æ¤â¡¢Åö½é¤Î¼Â¹Ô·×²è¤Î¤Þ¤ÞSQL¤ò¼Â¹Ô¤¹¤ë¤Î¤Ç¡¢ÆÍÁ³¤Î¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹°²½¤òËɤ°¤³¤È¤¬¤Ç¤¤ë¡£¤¢¤ëÆüÆÍÁ³¼Â¹Ô·×²è¤¬Á´É½Áöºº¤ØÊѹ¹¤·¤Æ¤·¤Þ¤¦¤³¤È¤Ï¡¢¤Þ¤Þ¤¢¤ë¡£
Stored Outline¤ÎºîÀ®
Stored Outline¤ÎºîÀ®¤Ë¤Ï2¤ÄÊýË¡¤¬¤¢¤ë¡£1¤Ä¤Ï¡¢CREATE OUTLINE ON ¡Á ¤ò»ÈÍѤ¹¤ëÊýË¡¤Ç¡¢Stored Outline¤òºîÀ®¤·¤¿¤¤SQL¤ò»ØÄꤷºîÀ®¤¹¤ë¡£¤Þ¤º¤Ï¤¸¤á¤Ë¡¢Stored Outline¤òºîÀ®¤·¤¿¤¤SQL¤ò½àÈ÷¤¹¤ë¡£¤³¤ÎSQL¤Ï¡¢¸å¡¹¼ÂºÝ¤Ëȯ¹Ô¤¹¤ëSQL¤È°ì¸À°ì¶ç°Û¤Ê¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¥¹¥Ú¡¼¥¹¤Î¿ô¤ä¡¢²þ¹Ô¤Ê¤É¤âÁ´¤¯Æ±¤¸¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£¤½¤·¤Æ¡¢CREATE OUTLINEʸ¤Ë¤ÆºîÀ®¤ò¹Ô¤¦¡£
CREATE OUTLINE outline̾ ON SQLʸ;
ºîÀ®¤µ¤ì¤¿Stored Outline¤Ï¡¢OUTLN.OL$¤ËÊݸ¤µ¤ì¤ë¡£outline̾¤ò¾Êά¤·¤¿¾ì¹ç¤Ï¡¢Oracle¤¬¾¡¼ê¤Ë̾Á°¤òÉÕ¤±¤ë¡£USER_OUTLINES¡¢ALL_OUTLINES¡¢DBA_OUTLINESÅù¤Ç³Îǧ¤Ç¤¤ë¡£
¤â¤¦1¤Ä¤ÎºîÀ®ÊýË¡¤Ï¡¢CREATE_STORED_OUTLINES¥Ñ¥é¥á¡¼¥¿¤òÊѹ¹¤¹¤ëÊýË¡¤Ç¡¢Êѹ¹¸å¤½¤Î¥»¥Ã¥·¥ç¥ó¤Ç¼Â¹Ô¤µ¤ì¤¿SQL¤Ë¤Ä¤¤¤Æ¡¢¼«Æ°¤ÇStored Outline¤ÎºîÀ®¤ò¹Ô¤¦¡£(¥·¥¹¥Æ¥à¥Ñ¥é¥á¡¼¥¿¤òÊѹ¹¤·¤¿¾ì¹ç¤Ï¡¢¥·¥¹¥Æ¥à¤Ç¼Â¹Ô¤µ¤ì¤ëÁ´¤Æ¤ÎSQL¤ÎStored Outline¤òºîÀ®¤¹¤ë¡£) ¤³¤ÎÊýË¡¤Ï¡¢PL/SQLÅù¤ËËä¤á¹þ¤Þ¤ì¤¿SQL¤ÎStored OutlineÅù¤òºîÀ®¤¹¤ëºÝÍÍø¤Ç¤¢¤ë¡£
ALTER [ SESSION / SYSTEM ] SET CREATE_STORED_OUTLINES = TRUE;
¼«Æ°ºîÀ®¤òÄä»ß¤¹¤ë¾ì¹ç¤Ï¡¢
ALTER [ SESSION / SYSTEM ] SET CREATE_STORED_OUTLINES = FALSE;
¤ò¼Â¹Ô¤¹¤ë¡£
Stored Outline¤Î»ÈÍÑ
ºîÀ®¤·¤¿Stored Outline¤ò¼ÂºÝ¤Ë»ÈÍѤ¹¤ë¤Ë¤Ï¡¢USE_STORED_OUTLINES¥Ñ¥é¥á¡¼¥¿¤ÎÊѹ¹¤¬É¬ÍפȤʤ롣»ÈÍѲÄÈݤϡ¢¥»¥Ã¥·¥ç¥óñ°Ì¤â¤·¤¯¤Ï¥·¥¹¥Æ¥àÁ´ÂΤÇÊѹ¹¤¬²Äǽ¤Ç¤¢¤ë¡£
ALTER [ SESSION / SYSTEM ] SET USE_STORED_OUTLINES = TRUE;
»ÈÍѤòÄä»ß¤¹¤ë¾ì¹ç¤Ï¡¢
ALTER [ SESSION / SYSTEM ] SET USE_STORED_OUTLINES = FALSE;
¤ò¼Â¹Ô¡£
ºîÀ®¤·¤¿Stored Outline¤¬¼ÂºÝ¤Ë»ÈÍѤµ¤ì¤¿¤«¤ò³Îǧ¤¹¤ë¤Ë¤Ï¡¢USER_OUTLINES (¤Þ¤¿¤ÏALL_OUTLINES¤«DBA_OUTLINES) ¤ÎUSED¹àÌܤò³Îǧ¡£°ìÅ٤Ǥâ»ÈÍѤµ¤ì¤¿¤Ê¤é¤Ð¡¢USED¤È¤Ê¤Ã¤Æ¤¤¤ë¡£°ìÅÙ¤â»ÈÍѤµ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢UNUSED¤È¤Ê¤ë¡£¤Þ¤¿¡¢¤½¤ÎSQL¤¬¼Â¹ÔÃæ¡¢¤Þ¤¿¤Ï¼Â¹Ô¸å´Ö¤â¤Ê¤¤¾ì¹ç(Shared Pool¤Ë³ºÅöSQL¤¬¤¢¤ë¾ì¹ç)¤Ï¡¢V$SQL¤òHASH_VALUE¤Ç¸¡º÷¤·¡¢OUTLINE_CATEGORY¹àÌܤˡ¢ºîÀ®¤·¤¿Stored Outline¤Î¥«¥Æ¥´¥ê(Ä̾ï¤ÏDEFAULT)¤¬Æþ¤Ã¤Æ¤¤¤ì¤Ð¡¢»ÈÍѤ·¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ë¡£SQL¤Î¥Ï¥Ã¥·¥åÃÍ(HASH_VALUE)¤Ï¡¢Stored Outline̾¤«¤éOUTLN.OL$¤ò¸¡º÷¤¹¤ì¤Ð¼èÆÀ²Äǽ(HASH_VALUE¹àÌܤò»²¾È)¡£
¤È¤³¤í¤Ç¡¢Stored Outline¤Î»ÈÍѤò³«»Ï¤¹¤ë¤È¡¢¤½¤Î¸åÁ´¤Æ¤Î¥Ï¡¼¥É²òÀÏ»þ¤Ë¡¢Oracle¤¬Stored Outline¤Î¸ºß¤ò³Îǧ¤¹¤ë¤¿¤á¡¢Â¿¾¯Recursive Call¤¬Áý¤¨¤ë¡£¥È¥ì¡¼¥¹¤ò¼è¤Ã¤Æ¤ß¤ì¤Ðʬ¤«¤ë¤¬¡¢SQL¥Ï¥Ã¥·¥åÃÍ·×»»¸å¡¢OUTLN.OL$¤ò¸¡º÷¤·¤Æ¤¤¤ë¡£OUTLN.OL$¤Ï¤Û¤È¤ó¤É¤Î¾ì¹ç¤Ë¤ª¤¤¤Æ¥¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤ËÍ¿¤¨¤ë±Æ¶Á¤ÏÈùÎ̤ʤâ¤Î¤À¤¬¡¢¥Ï¡¼¥É²òÀϤ¬Â¿¤¯¹Ô¤ï¤ì¤ë´Ä¶¤Ç¤ÏÃí°Õ¤¬É¬ÍפǤ¢¤ë(¤¿¤À¡¢¤½¤Î¾ì¹ç¤ÎÌäÂê¤ÏStored Outline¤Î»ÈÍѤǤϤʤ¯¡¢¥Ï¡¼¥É²òÀϤ蘆¤Ç¤¢¤ë¾ì¹ç¤¬°ìÈÌŪ)¡£É¬ÍפǤ¢¤ì¤ÐOUTLN.OL$¤ÈOUTLN.OL$HINTS (9i¤«¤é¤ÏOUTLN.OL$NODES¤â)¤òKEEP POOL¤ËÆþ¤ì¤Æ¤ª¤¤¤Æ¤âÎɤ¤¤À¤í¤¦¡£
Stored Outline¤Î¥«¥Æ¥´¥ê
Stored Outline¤Ë¤Ï¥«¥Æ¥´¥ê°À¤¬¤¢¤ë¡£¤³¤³¤Ç¤Î¥«¥Æ¥´¥ê¤Ï¡¢¤¤¤ï¤Ð¥°¥ë¡¼¥×¤Î¤è¤¦¤Ê¤â¤Î¡£Ä̾ﲿ¤â»ØÄꤷ¤Ê¤¤¾ì¹ç¤Ï¡¢¥«¥Æ¥´¥ê¤ÏDEFAULT¤È¤Ê¤ë¡£Î㤨¤Ð¡¢ÆÃÄê¤Î¥«¥Æ¥´¥ê¤ÇStored Outline¤òºîÀ®¤·¡¢ÆÃÄê¤Î¥æ¡¼¥¶¡¼¤ä¥»¥Ã¥·¥ç¥ó¤À¤±¤Ç»ÈÍѤ·¤¿¤êÅù¤¬²Äǽ¤Ç¤¢¤ë¡£
¥«¥Æ¥´¥ê¤ò»ØÄꤷ¤ÆStored Outline¤òºîÀ®¤¹¤ë¾ì¹ç¤Ï¡¢
CREATE OUTLINE outline̾ FOR CATEGORY ¥«¥Æ¥´¥ê̾ ON ¡Á
¤ä¡¢
ALTER [ SESSION / SYSTEM ] SET CREATE_STORED_OUTLINES = ¥«¥Æ¥´¥ê̾;
¤Ê¤É¤È¤¹¤ë¡£¤³¤ì¤é¤ÇºîÀ®¤·¤¿DEFAULT°Ê³°¤ÎStored Outline¤Ï¡¢
ALTER [ SESSION / SYSTEM ] SET USE_STORED_OUTLINES = ¥«¥Æ¥´¥ê̾;
¤Ç»ÈÍѤ¬²Äǽ¤È¤Ê¤ë¡£»ÈÍѤ·¤¿¾ì¹ç¤Ï¡¢V$SQL¤ÎOUTLINE_CATEGORY¤Ë¤Ï¤³¤Î¥«¥Æ¥´¥ê̾¤¬Æþ¤ë¡£
¤¢¤ëStored Outline¤Î¥«¥Æ¥´¥ê¤òÊѹ¹¤·¤¿¤¤¾ì¹ç¤Ï¡¢
ALTER OUTLINE outline̾ CHANGE CATEGORY TO ¿·¥«¥Æ¥´¥ê̾;
¤È¤¹¤ë¡£DEFAULT¤ØÌ᤹¾ì¹ç¤Ë¥¨¥é¡¼¤¬½Ð¤ë¾ì¹ç¤Ï¡¢"DEFAULT"¤È¥À¥Ö¥ë¥¯¥©¡¼¥È¤·¤Þ¤·¤ç¤¦¡£
»²¹Í: Oracle8i Designing and Tuning for Performance - Using Plan Stability