[4] Buffer Cache °ü·Ã Wait
ÀÛ¼ºÀÚ °ü¸®ÀÚ ÀÛ¼º½Ã°£ 2006-11-15 21:42:28
 

[3] Buffer Cache °ü·Ã Wait

¡á Buffer Cache ±¸Á¶

Buffer CacheÀÇ ±âº»ÀûÀÎ ±â´ÉÀº ¿©·¯ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ °øÅëÀ¸·Î ÀÚÁÖ ¾×¼¼½º µÇ´Â µ¥ÀÌÅͺ£À̽º ºí·ÏÀ» ¸Þ¸ð¸®¿¡ ij½¬ÇÏ¿© ¹°¸®ÀûÀÎ µð½ºÅ© IO¸¦ ÃÖ¼ÒÈ­ÇÔÀ¸·Î½á ´õ ºü¸¥ ¾×¼¼½º ¼Óµµ¸¦ Á¦°øÇϱâ À§ÇÑ °ÍÀÌ´Ù. º¹ÀâÇÑ ¼³¸íÀº »ý·«ÇÏ°í, Buffer Cache ÀÇ ±âº»±¸Á¶¸¦ ÀÌÇØÇϱâ À§ÇÑ ¸î °¡Áö ÇÙ½É ¿ë¾îµéÀ» °£´ÜÈ÷ Á¤¸®ÇØ º¸µµ·Ï ÇÏ°Ú´Ù.

¢¹ Buffer header

¸ðµç ¹öÆÛ ºí·ÏµéÀº °¢ÀÚÀÇ buffer header¸¦ ÅëÇØ ¾×¼¼½ºµÇ°í °ü¸®µÈ´Ù. Áï, ¸Þ¸ð¸®¿¡ ij½¬µÈ ƯÁ¤ µ¥ÀÌÅÍ ºí·Ï¿¡ ´ëÇÑ ¾×¼¼½º´Â ¸ÕÀú Çؽ¬ ¾Ë°í¸®ÁòÀ» ÅëÇØ cache chain »óÀÇ buffer header¸¦ ã°í ÇØ´ç buffer header¿¡ ±â·ÏµÈ µ¥ÀÌÅÍ ºí·ÏÀÇ ¸Þ¸ð¸®»ó ÁÖ¼Ò¸¦ ã¾Æ°¡ ¿øÇÏ´Â Á¤º¸¸¦ Àд ¹æ½ÄÀ¸·Î ÀÌ·ç¾îÁø´Ù. Buffer header¿¡ ±â·ÏµÇ´Â ÁÖ¿äÁ¤º¸´Â ´ÙÀ½°ú °°À¸¸ç Buffer headerÀÇ ³»¿ëÀº V$bh ºä¸¦ ÅëÇÏ¿© Á¶È¸Çغ¼ ¼ö ÀÖ´Ù.

    - ¸Þ¸ð¸®»ó¿¡¼­ÀÇ ÇØ´ç ¹öÆÛºí·ÏÀÇ ÁÖ¼Ò
    - ÇØ´ç ¹öÆÛ ºí·Ï(½ÇÁ¦·Î´Â ¹öÆÛÇì´õ)°¡ Æ÷ÇԵǾî ÀÖ´Â hash chain
    - LRU, LRUW, CKPTQ¿Í °°Àº ¸®½ºÆ®»ó¿¡¼­ÀÇ ÇØ´ç ¹öÆÛºí·ÏÀÇ À§Ä¡
    - ÇØ´ç ¹öÆÛºí·Ï¿¡ ´ëÇÑ User, Waiter¿Í »óŸ¦ ³ªÅ¸³»´Â °¢Á¾ Flag

¢¹ Hash Buckets/ Hash Chains

Buffer CacheÀÇ ¸ðµç ºí·ÏÀº Çؽ¬ ¾Ë°í¸®ÁòÀ» ÅëÇØ °ü¸®µÈ´Ù. °ð, µ¥ÀÌÅÍ ºí·ÏÀÇ DBA, Class °ªÀ¸·Î Hash FunctionÀ» Àû¿ëÇÏ¿© ÇØ´ç ºí·ÏÀÌ ¼ÓÇÏ´Â hash bucketsÀ» ÇÒ´çÇϸç, µ¿ÀÏÇÑ hash buckets¿¡ ÇÒ´çµÇ´Â µ¥ÀÌÅÍ ºí·ÏÀÇ ¹öÆÛÇì´õµéÀº linked listÇüÅ·Πhash chainÀ» ÀÌ·ç°Ô µÈ´Ù. Hash buckets/hash chains´Â ƯÁ¤ µ¥ÀÌÅÍ ºí·ÏÀ» ã¾Æ°¡±â À§ÇÑ ¼ö´ÜÀ» Á¦°øÇÑ´Ù. °¢°¢ÀÇ hash buckets¿¡´Â Àڽſ¡ ¼ÓÇÑ hash chainÀ» º¸È£Çϱâ À§ÇÑ latch(cache buffers chains)°¡ ÇÒ´çµÈ´Ù.

¢¹ LRU

LRU´Â µÎ°³ÀÇ ¸®½ºÆ®, Áï LRUW¿Í LRU ¸®½ºÆ®ÀÇ ½ÖÀ¸·Î ±¸¼ºµÈ´Ù. LRUW(LRU Write list)´Â dirty list¿Í °°Àº ¸»À̸ç, ¼öÁ¤µÇ¾î µð½ºÅ©¿¡ ¹Ý¿µµÇ¾î¾ß ÇÒ ºí·ÏµéÀÇ ¸®½ºÆ®ÀÌ´Ù. LRU(Least recently used list)´Â LRUW¿¡ ¿Ã¶ó°¡Áö ¾ÊÀº ³ª¸ÓÁö ¹öÆÛ ºí·ÏµéÀÌ µî·ÏµÇ¾î ÀÖ´Ù. Buffer cache »óÀÇ ¹öÆÛºí·ÏÀº ¹Ýµå½Ã LRU³ª LRUW µÑ ÁßÀÇ Çϳª¿¡ µî·ÏµÇ¸ç, µÎ ¸®½ºÆ®¿¡ µ¿½Ã¿¡ Æ÷ÇԵǴ °æ¿ì´Â ¾ø´Ù. LRU´Â Free Buffer¸¦ ã±â À§ÇÑ ¼ö´ÜÀ» Á¦°øÇÑ´Ù. °æÇÕÀ» ÇÇÇϱâ À§ÇØ ¹öÆÛij½¬ ºí·ÏµéÀ» ¿©·¯ °³ÀÇ LRU½ÖÀ¸·Î ³ª´©¾î °ü¸®ÇÒ ¼ö ÀÖÀ¸¸ç, °¢ LRU¸®½ºÆ®¸¦ º¸È£Çϱâ À§ÇØ Latch(Cache buffers lru chain)°¡ Çϳª¾¿ ÇÒ´çµÈ´Ù.

¡á Buffer Cache ¿î¿µ±ÔÄ¢

¢¹ ¸Þ¸ð¸®»óÀÇ Æ¯Á¤ ¹öÆÛºí·ÏÀ» ã¾Æ°¡°Å³ª, ƯÁ¤ ºí·ÏÀÌ ¸Þ¸ð¸®¿¡ ij½¬ µÇ¾î ÀÖ´ÂÁö¸¦ È®ÀÎÇϱâ À§Çؼ­ ¿À¶óŬÀº hash bucket/hash chain ±¸Á¶¸¦ »ç¿ëÇÑ´Ù.

¢¹»õ·Î¿î µ¥ÀÌÅͺí·ÏÀ» µð½ºÅ©·ÎºÎÅÍ ¸Þ¸ð¸®·Î ÀÐ¾î µéÀ̱â À§ÇÑ free buffer¸¦ È®º¸Çϱâ À§ÇØ ¿À¶óŬÀº LRU ¸®½ºÆ®¸¦ »ç¿ëÇÑ´Ù.

¢¹ ¹öÆÛºí·ÏÀº LRU³ª LRUW µÑ °¡¿îµ¥ Çϳª¿¡ µî·ÏµÈ´Ù.

¢¹ ÇϳªÀÇ ºí·Ï¿¡ ´ëÇØ ½Ã°£´ë°¡ ´Ù¸¥ ¿©·¯ °³ÀÇ º¹»çº»ÀÌ Á¸ÀçÇÒ ¼ö ÀÖÀ¸¸ç, ±× °¡¿îµ¥ ¿ÀÁ÷ CURRENT ¹öÆÛ¸¸ÀÌ º¯°æµÉ ¼ö ÀÖ´Ù.

¢¹ÇϳªÀÇ ¹öÆÛºí·ÏÀº Çѹø¿¡ ¿ÀÁ÷ ÇϳªÀÇ ÇÁ·Î¼¼½º¿¡ ÀÇÇؼ­¸¸ º¯°æµÉ ¼ö ÀÖ´Ù.

¡á Buffer Cache °ü·Ã Waits

¹öÆÛij½¬¿Í °ü·ÃµÇ¾î ÈçÈ÷ ¹ß»ýÇÏ´Â ´ëÇ¥ÀûÀÎ Wait À̺¥Æ®´Â ´ÙÀ½°ú °°´Ù.

¢¹ buffer busy waits

¿©·¯ ¼¼¼ÇÀÌ µ¿½Ã¿¡ °°Àº ºí·ÏÀ» ÀÐÀ¸·Á°í Çϰųª ¿©·¯ ¼¼¼ÇÀÌ °°Àº ºí·Ï¿¡ ´ëÇÑ º¯°æÀÛ¾÷ÀÌ ¿Ï·áµÇ±â¸¦ ±â´Ù¸®°í ÀÖ´Â °æ¿ì¿¡ ¹ß»ýÇϸç, ƯÁ¤ ºí·Ï¿¡ ´ëÇÑ °æÇÕÀ» ÇؼÒÇϱâ À§ÇÑ Á¶Ä¡´Â ºí·ÏÀÇ À¯Çü¿¡ µû¶ó ´Þ¶óÁø´Ù. Data block¿¡ ´ëÇÑ °æÇÕÀÌ ¸¹Àº °æ¿ì´Â Pct free³ª Pct used °ªÀ» »ç¿ëÇÏ¿© ºí·Ï ´ç ·Î¿ì¼ö¸¦ ÁÙÀ̰ųª, ƯÁ¤ ºí·Ï¿¡ ·Î¿ì ÀÔ·ÂÀÌ ¸ô¸®´Â ±¸Á¶ÀÇ À妽º(right-hand-index)ÀÏ °æ¿ì´Â reverse key indexÀÇ »ç¿ëÀ» °ËÅäÇÏ´Â µîÀÇ ¹æ¹ýÀÌ ÀÖÀ¸¸ç, segment headerÀÇ °æÇÕÀÌ ¸¹Àº °æ¿ì´Â freelist ¼ö¸¦ ´Ã¸®°Å³ª ExtentÀÇ Å©±â¸¦ Áõ°¡½ÃÅ°´Â µîÀÇ ¹æ¹ýÀÌ ÀÖ°í, undo header³ª undo block¿¡ ´ëÇÑ °æÇÕÀº ·Ñ¹é¼¼±×¸ÕÆ®ÀÇ °³¼ö³ª Å©±â¸¦ Áõ°¡½ÃÅ°´Â °ÍÀÌ ÀüÇüÀûÀÎ Á¶Ä¡ ¹æ¹ýÀÌ´Ù. v$waitstat°ú x$kcbfwaitÀ» ÀÌ¿ëÇϸç Class ¶Ç´Â fileº°·Î wait ¹ß»ý»óȲÀ» ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù.



¢¹ free buffer waits/write complete waits

DBWR°¡ dirty buffer¸¦ writeÇÏ´Â µ¿¾È ¼­¹ö ÇÁ·Î¼¼½º°¡ ´ë±âÇÏ°í ÀÖ´Â °æ¿ì ¹ß»ýÇÑ´Ù. °ð, ³Ê¹«³ª ¸¹Àº dirty buffer°¡ »ý°Ü³ª°Å³ª DBWRÀÇ ¾²±â ¼Óµµ°¡ ÃæºÐÈ÷ Æ©´× µÇÁö ¸øÇÑ °æ¿ì¿¡ ¹ß»ýÇÑ´Ù. Á¡°Ë Æ÷ÀÎÆ®´Â ¹°¸®Àû µð½ºÅ©ÀÇ ¼Ó¼º(stripe size, layour, cache size) ÃÖÀûÈ­, Raw deviceÀÇ È°¿ë, Async IO³ª multi-DBWR(db_writer_processes) È°¿ë¿©ºÎ µîÀÌ´Ù.

À§¿Í °°Àº ¹öÆÛ ºí·Ï¿¡ ´ëÇÑ °æÇÕ ¿ª½Ã ºñÈ¿À²ÀûÀÎ ½ÇÇà°èȹÀ» ÅëÇØ ¼öÇàµÇ´Â ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀÇÇÏ¿© ºÒÇÊ¿äÇÏ°Ô ¸¹Àº ºí·ÏÀÌ ¸Þ¸ð¸®·Î ¿Ã¶ó¿À´Â °ÍÀÌ ¿øÀÎÀÏ °æ¿ì°¡ ¸¹À¸¹Ç·Î °æÇÕÀÌ ºó¹øÇÑ ºí·ÏÀÌ ¼ÓÇÏ´Â Å×À̺í/À妽º ¸íÀ» ã¾Æ³¾ ¼ö ÀÖ´Ù¸é °ü·Ã SQLÀ» ã¾Æ³»¾î º¸´Ù È¿°úÀûÀÎ Æ©´×ÀÛ¾÷ÀÌ ÀÌ·ç¾îÁú ¼ö ÀÖÀ» °ÍÀÌ´Ù. v$session_waitÀÇ p1,p2 Ä÷³¿¡ °¢°¢ file#, block#°ªÀ» Ç¥½ÃÇÏ¿© ÁֹǷΠÀÌ °ªÀ» ÀÌ¿ëÇÏ¿© ¾Æ·¡ÀÇ SQL¹®À¸·Î ÇöÀç ¾î¶² ¿ÀºêÁ§Æ®¿¡ ´ëÇÏ¿© ÇØ´ç wait°¡ ¹ß»ýÇÏ°í ÀÖ´ÂÁö¸¦ ÃßÀûÇÒ ¼ö ÀÖ´Ù. ( 1ȸ¿¡ ¼Ò°³ÇÑ SQL¹®¿¡¼­´Â Additional Info °ªÀ» ÂüÁ¶. )

    select segment_name, segment_type
    from dba_extents
    where file_id = :file#
    and :block# between block_id and block_id + blocks -1




¢¹ cache buffers chains latch

SGA³»¿¡ ij½¬µÈ µ¥ÀÌÅͺí·ÏÀ» °Ë»öÇÒ ¶§ »ç¿ëµÈ´Ù. ¹öÆÛij½¬´Â ºí·ÏµéÀÇ chainÀ» ÀÌ·ç°í ÀÖÀ¸¹Ç·Î °¢°¢ÀÇ chainÀº ÀÌ LatchÀÇ childµé¿¡ ÀÇÇØ º¸È£µÈ´Ù. ÀÌ Latch¿¡ ´ëÇÑ °æÇÕÀº ƯÁ¤ ºí·Ï¿¡ ´ëÇÑ ´ë·®ÀÇ µ¿½Ã ¾×¼¼½º°¡ ¹ß»ýÇÒ ¶§ À¯¹ßµÈ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀ» °ËÅäÇØ º¸¾Æ¾ß ÇÑ´Ù.
¨ª cache buffers lru chain latch
¹öÆÛij½¬ÀÇ ¹öÆÛ¸¦ LRU Á¤Ã¥¿¡ µû¶ó À̵¿½ÃÄÑ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Â °æ¿ì ÇÁ·Î¼¼½º´Â ÀÌ Latch ȹµæÇÏ°Ô µÈ´Ù. ÀÌ Latch¿¡ ´ëÇÑ °æÇÕÀº Multiple buffer poolÀ» »ç¿ëÇϰųª DB_BLOCK_LRU_LATCHES ¸¦ Áõ°¡½ÃÄÑ LRU LatchÀÇ °³¼ö¸¦ ´Ã·Á¼­ ÇؼÒÇÒ ¼ö ÀÖ´Ù. SQL¹®À» Æ©´×Çϸé ÇØ´ç ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¾×¼¼½º µÉ ºí·ÏÀÇ ¼ö°¡ ÁÙ¾îµé °ÍÀ̹ǷΠ´ç¿¬È÷ È¿°ú¸¦ °ÅµÑ ¼ö ÀÖ´Ù.

À§¿Í °°ÀÌ ¹öÆÛij½¬¸¦ °ü¸®ÇÏ´Â Latch¿¡ ´ëÇÑ °æÇÕÀº °æÇÕÀÌ ÁýÁߵǴ ƯÁ¤ Child Latch¿¡ ÀÇÇØ °ü¸®µÇ´Â ¹öÆÛºí·ÏÀ» ã¾Æ ÇØ´ç ºí·ÏÀÌ ¼ÓÇÑ ¼¼±×¸ÕÆ® Á¤º¸¸¦ ¾Ë¾Æ³½´Ù¸é º¸´Ù È¿°úÀûÀÎ Á¶Ä¡°¡ °¡´ÉÇÒ °ÍÀε¥, latch free waitÀÏ °æ¿ì v$session_waitÀÇ p1raw °ªÀÌ ÇØ´ç Latch address¸¦ ÀǹÌÇÑ´Ù. ÀÌ °ªÀ» x$bhÀÇ hladdr °ª°ú Á¶ÀÎÇÏ¸é °ü·Ã ¿ÀºêÁ§Æ® À̸§À» ÃßÀûÇغ¼ ¼ö ÀÖ´Ù.

    select file#, dbarfil, dbablk, obj, o.name
    from x$bh bh, obj$ o
    where bh.hladdr = :latch_address
    and bh.obj = o.obj#;


¸ñ·Ï | ÀÔ·Â | ¼öÁ¤ | ´äº¯ | »èÁ¦