| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 12. µ¿½Ã¼º Á¦¾î | Fast Forward | Next |
PostgreSQLÀÇ reader´Â µ¥ÀÌÅ͸¦ Àá±×Áö ¾Ê±â ¶§¹®¿¡, Æ®·£Àè¼Ç °Ý¸® ·¹º§°ú »ó°ü¾øÀÌ ÇϳªÀÇ Æ®·£Àè¼Ç¿¡ ÀÇÇÑ µ¥ÀÌÅÍ read´Â ´Ù¸¥ µ¿½Ã Æ®·£Àè¼Ç¿¡ ÀÇÇØ °ãÃÄ ½áÁú ¼ö ÀÖ½À´Ï´Ù. ¹Ù²Ù¾î ¸»Çϸé, SELECTÀ¸·Î ¾òÀº ÇàÀº ±× ÇàÀÌ µ¹¾Æ ¿ÔÀ» ¶§(¶§·Î ÇöÀç Äõ¸®°¡ ½ÃÀÛµÈ ÈÄ), ¿©ÀüÈ÷ ÃÖ½ÅÀ̶ó´Â °ÍÀ» ÀǹÌÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ Æ®·£Àè¼ÇÀÌ ½ÃÀÛÇÑ ´ÙÀ½¿¡µµ ´Ù¸¥ Æ®·£Àè¼ÇÀÌ Ã³¸®ÇÑ °ÍÀ¸·Î º¸°í, ÇàÀÌ °»½Å, ȤÀº »èÁ¦ µÆÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. "Áö±Ý"±× ÇàÀÌ À¯È¿Çß´Ù°í ÇØµµ , ÇöÀç ½ÇÇà ÁßÀÎ Æ®·£Àè¼ÇÀÌ Ã³¸® ¶Ç´Â ·Ñ¹é(rollback)À¸·Î ¿Ï·áÇϱâ ÀüÀ¸·Î(´Ù¸¥ Æ®·£Àè¼Ç¿¡ ÀÇÇØ) º¯°æµÇ°Å³ª »èÁ¦µÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.
°¢°¢ÀÇ Æ®·£Àè¼ÇÀº ƯÁ¤ µ¥ÀÌÅͺ£À̽º ³»¿ëÀÇ snapshotÀ» ÂüÁ¶Çϰí ÀÖÀ¸¸ç, µ¿½Ã¿¡ ½ÇÇàµÇ°í ÀÖ´Â Æ®·£Àè¼ÇÀÌ ´Ù¸¥ snapshotÀ» ÂüÁ¶Çϰí ÀÖÀ» °¡´É¼ºµµ ÃæºÐÈ÷ ÀÖ½À´Ï´Ù. µû¶ó¼, ¾î´À ÂÊÀ̵ç "Áö±Ý"À̶ó°í ÇÏ´Â °³³äÀº Á¶±Ý ÀÌ»óÇÑ Á¤Àǰ¡ µË´Ï´Ù. ÀÌ´Â º¸Åë, °¢ Ŭ¶óÀÌ¾ðÆ® ¾îÇø®ÄÉÀ̼ÇÀÌ ¼·Î °Ý¸®µÇ°í ÀÖ´Â °æ¿ì¿¡´Â Å« ¹®Á¦°¡ ¾Æ´ÏÁö¸¸, Ŭ¶óÀÌ¾ðÆ®³¢¸® µ¥ÀÌÅͺ£À̽º ¹Û¿¡¼ ä³ÎÀ» ÅëÇØ Åë½ÅÇÒ ¼ö ÀÖ´Â °æ¿ì´Â Å« ¹®Á¦°¡ µÉ ¼ö ÀÖ½À´Ï´Ù.
ÇöÀç À¯È¿ÇÑ ÇàÀ» È®ÀÎÇÏ°í µ¿½Ã¿¡ °»½ÅÀ» ÇÇÇϱâ À§Çؼ´Â, SELECT FOR UPDATE¹®À̳ª SELECT FOR SHARE¹®, ÀûÀýÇÑ LOCK TABLE¹®À» »ç¿ëÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù (SELECT FOR UPDATE¹®À̳ª SELECT FOR SHARE¹®Àº ¹ÝȯµÈ ÇุÀ» µ¿½Ã ¾÷µ¥ÀÌÆ®·ÎºÎÅÍ Àá±×°í, LOCK TABLE´Â Å×À̺í Àüü¸¦ Àá±Þ´Ï´Ù). À̰ÍÀº PostgreSQL¿¡ ´Ù¸¥ ȯ°æÀÇ ¾îÇø®ÄÉÀ̼ÇÀ» À̽ÄÇÒ ¶§ °í·ÁµÇ¾î¾ß¸¸ ÇÕ´Ï´Ù.
MVCC¿¡ ´ëÇÑ ±Û·Î¹ú À¯È¿¼º °Ë»ç°¡ Ãß°¡ÀûÀ¸·Î °í·ÁµÇ¾îÁý´Ï´Ù. ¿¹¸¦ µé¸é ÀºÇàÀÇ ¾îÇø®ÄÉÀ̼ÇÀ¸·Î, Å×ÀÌºí¿¡ ÀÖ´Â ¸ðµç ´ëº¯ÀÇ ÇÕ°è°¡, ´Ù¸¥ Å×ÀÌºí¿¡ ÀÖ´Â Â÷º¯ÀÇ ÇÕ°è¿Í °°Àº °ÍÀ» üũÇÒ Çʿ䰡 ÀÖ´Ù°í ÇսôÙ. ±×¸®°í ÀÌ ¾çÂÊ ¸ðµÎÀÇ Å×À̺íÀº Ç×»ó °»½ÅµÇ°í ÀÖ½À´Ï´Ù. 2°³ÀÇ ¿¬¼ÓÇÏ´ÂSELECT SUM(...)Ä¿¸àµåÀÇ °á°ú¸¦ ºñ±³Çϸé, 2¹øÂ° Äõ¸®´Â, ¾Æ¸¶ ÃÖÃÊ Äõ¸®¿¡¼ Ä«¿îÆ®µÇÁö ¾Ê¾Ò´ø Æ®·£Àè¼Ç °á°ú¸¦ Æ÷ÇÔÇϱ⠶§¹®¿¡, Read Committed ¸ðµå¿¡¼´Â ½Å·ÚÇÒ ¼ö Àִ ó¸®¸¦ ½ÇÇàÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ¾Ð´Ï´Ù. 1°³ÀÇ serializable Æ®·£Àè¼ÇÀ¸·Î 2°³ÀÇ Çհ踦 Ãâ·ÂÇϸé, Æ®·£Àè¼ÇÀÌ °³½ÃµÇ±â Àü¿¡ ó¸®µÈ °á°úÀÇ Á¤È®ÇÑ »óȲÀ» ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ±× °á°ú°¡ ¿äûµÈ ½ÃÁ¡¿¡¼µµ °á°ú°¡ ÀûÀýÇÑÁö¿¡ °üÇØ ½ÇÁ¦·Î´Â Àǽɽº·¯¿ïÁöµµ ¸ð¸¨´Ï´Ù. Àϰü¼º üũ¸¦ ½Ç½ÃÇϱâ Àü¿¡ serializable Æ®·£Àè¼Ç ÀÚ½ÅÀÌ º¯°æÀ» ½Ç½ÃÇßÀ» °æ¿ì, ±× üũÀÇ À¯È¿¼ºÀº ÇÑÃþ ´õ Àǽɽº·¯¿öÁý´Ï´Ù. Æ®·£Àè¼Ç °³½Ã ÈÄ¿¡ ÇàÇØÁö´Â ¸ðµç º¯°æ »Ó ¾Æ´Ï¶ó, ¹«¾ùÀΰ¡ ´Ù¸¥ °ÍÀÌ Æ÷ÇԵǾú±â ¶§¹®¿¡ÀÔ´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, ÁÖÀÇ ±íÀº »ç¶÷À̶ó¸é, Çö»óÀ» È®½ÇÈ÷ ÆÄ¾ÇÇϱâ À§Çؼ üũ¿¡ ÇÊ¿äÇÑ ¸ðµç Å×À̺íÀ» Àá±Û °ÍÀÔ´Ï´Ù. SHARE¸ðµå(ȤÀº ±× ÀÌ»ó)ÀÇ ¶ô¿¡ ÀÇÇØ, ÇöÀç Æ®·£Àè¼Ç¿¡¼ÀÇ º¯°æÀ» Á¦¿ÜÇϰí, ¶ô µÈ Å×ÀÌºí¿¡ 󸮵ÇÁö ¾ÊÀº º¯°æÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù ¶ó´Â °ÍÀ» º¸ÁõÇÕ´Ï´Ù.
¶ÇÇÑ, ¸í½ÃÀû ¶ô 󸮸¦ »ç¿ëÇØ, µ¿½Ã¿¡ º¯°æÀÌ ½ÇÇàµÇ´Â °ÍÀ» ¸·À¸·Á°í ÇÏ´Â °æ¿ì, Read Committed ¸ðµå¸¦ »ç¿ëÇØ¾ß ÇÔÀ» ÁÖÀÇÇØ Áֽʽÿä. ȤÀº, serializable ¸ðµå¸¦ »ç¿ëÇÏ´Â °æ¿ì, Äõ¸®¸¦ ½ÇÇàÇϱâ Àü¿¡ ¶ôÀ» ȹµæÇϵµ·Ï À¯ÀÇÇØ Áֽʽÿä. serializable Æ®·£Àè¼Ç¿¡ ´ëÇØ ȹµæµÈ ¶ôÀº, Å×À̺íÀ» º¯°æ ÇÏ·Á´Â ´Ù¸¥ Æ®·£Àè¼ÇÀÌ ÇöÀç ½ÇÇàµÇÁö ¾Ê¾Ò´Ù´Â °ÍÀ» º¸ÁõÇÕ´Ï´Ù. ±×·¯³ª Æ®·£Àè¼ÇÀÌ ÂüÁ¶Çϰí ÀÖ´Â snapshotÀÌ, ¶ôÀÇ È¹µæº¸´Ù Àü¿¡ ÃëµæµÈ °ÍÀ̸é, ±× snapshotÀº Çö½ÃÁ¡¼ 󸮵Ǵ º¯°æº¸´Ù ÀüÀÇ Å×À̺íÀÇ °ÍÀÏ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. serializable Æ®·£Àè¼ÇÀÇ snapshotÀº ½ÇÁ¦·Î ±× ÃÖÃÊÀÇ Äõ¸® ȤÀº µ¥ÀÌÅÍ º¯°æ Ä¿¸àµå(SELECT, INSERT, UPDATE, ¶Ç´ÂDELETE)°¡ °³½ÃµÈ ½ÃÁ¡¿¡¼ ÃëµæµË´Ï´Ù. µû¶ó¼, snapshotÀ» ÃëµæÇϱâ Àü¿¡, ¸í½ÃÀûÀ¸·Î ¶ôÀ» ȹµæÇÏ´Â °ÍÀº °¡´ÉÇÕ´Ï´Ù.