13.4. µ¥ÀÌÅͺ£À̽º¿¡ÀÇ µ¥ÀÌÅÍ ÅõÀÔ

µ¥ÀÌÅͺ£À̽º¿¡ µ¥ÀÌÅ͸¦ Ãʱâ ÅõÀÔÇϱâ À§Çؼ­, ´ë·®ÀÇ Å×ÀÌºí »ðÀÔ Á¶ÀÛÀ» ½Ç½ÃÇÒ ÇÊ¿äÀÖ½À´Ï´Ù. º» Àý¿¡¼­´Â ÀÌ ÀÛ¾÷À» È¿À²ÀûÀ̵µ·Ï ¸î°¡Áö Á¦¾ÈÀ» Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù.

13.4.1. ÀÚµ¿ ó¸®À» ¿ÀÇÁ·Î ÇÑ´Ù

ÀÚµ¿ ó¸®À» ¹«È¿·Î Çϰí, ¸¶Áö¸·¿¡ 1ȸ¸¸ ó¸®ÇÕ´Ï´Ù (º¸Åë SQL¿¡¼­´Â À̰ÍÀºBEGIN¸¦ °³½Ã½Ã¿¡, COMMIT¸¦ ¸¶Áö¸·À¸·Î ¹ßÇàÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®¿ë ¶óÀ̺귯¸® ¾È¿¡´Â À̰ÍÀ» ¸¶Áö¸·¿¡ ½ÇÇàÇÏ´Â °Íµµ ÀÖ½À´Ï´Ù. ±× °æ¿ì´Â ¿øÇÏ´Â ´ë·Î ¶óÀ̺귯¸®°¡ °¡°í ÀÖ´ÂÁö¸¦ È®ÀÎÇØ¾ß ÇÕ´Ï´Ù). °¢ »ðÀÔ Á¶ÀÛÀ» ºÐ¸®Çؼ­ ó¸®Çϵµ·Ï Çã¶ôÇß´Ù¸é, PostgreSQLÀº Ãß°¡µÈ °¢ Çà¿¡ ´ëÇØ ¸¹Àº ÀÛ¾÷À» ÇØ¾ß ÇÕ´Ï´Ù. 1°³ÀÇ Æ®·£Àè¼ÇÀ¸·Î ¸ðµç »ðÀÔÀ» ½Ç½ÃÇÏ´Â °ÍÀÇ 1°³ÀÇ ÀÌÁ¡Àº 1°³ ÇàÀÇ »ðÀÔÀÌ ½ÇÆÐÇßÀ» °æ¿ì, ±× ½ÃÁ¡±îÁö »ðÀÔµÈ ¸ðµç ÇàÀÌ ·Ñ¹é(rollback) µÇ´Â °ÍÀÔ´Ï´Ù. ±× °á°ú, ÀϺθ¸ÀÌ ·ÎµåµÈ µ¥ÀÌÅÍÀÇ ´ëó°¡ ¹®Á¦µÇÁø ¾Ê½À´Ï´Ù.

13.4.2. COPYÀÇ »ç¿ë

´ÜÀÏ Ä¿¸Çµå·Î ¸ðµç ÇàÀ» ·ÎµåÇϱâ À§Çؼ­ ÀÏ·ÃÀÇINSERTÄ¿¸Çµå´Â ¾Æ´Ï°í, COPY ¸¦ »ç¿ëÇØ Áֽʽÿä. COPYÄ¿¸Çµå´Â ÇàÀ» ´ë·®À¸·Î ·ÎµåÇÏ´Â °Í¿¡ ÃÖÀûÈ­µÇ°í ÀÖ½À´Ï´Ù. ÀÌ Ä¿¸Çµå´Â INSERT¿¡ ºñÇØ À¯¿¬¼ºÀÌ ºÎÁ·Çϰí ÀÖÁö¸¸, ´ë·®ÀÇ µ¥ÀÌÅÍ ·Îµå¿¡ À־ÀÇ ¿À¹öÇìµå¸¦ ¸Å¿ì Àû½À´Ï´Ù. COPYÄ¿¸Çµå·Î Å×ÀÌºí¿¡ µ¥ÀÌÅ͸¦ ÅõÀÔÇÏ´Â °æ¿ì, Ä¿¸Çµå´Â 1°³À̹ǷÎ, ÀÚµ¿ 󸮸¦ ¹«È¿·Î ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.

COPY¸¦ »ç¿ëÇÒ ¼ö ¾ø´Â °æ¿ì, ÁغñµÈINSERT¹®À» PREPARE À» »ç¿ëÇØ ÀÛ¼ºÇϰí, ÇÊ¿ä ¸î Â÷·Ê¸¸EXECUTE¸¦ ½ÇÇàÇÏ´Â ÆíÀÌ ÁÁÀ» °ÍÀÔ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ¹Ýº¹Çؼ­ ÇàÇØÁö´Â INSERTÀÇ ÇØ¼®°ú °èȹ ÀÛ¼ºÀÇ ¿À¹öÇìµå¸¦ ÇÇÇÏ°Ô µË´Ï´Ù.

COPY¸¦ »ç¿ëÇÑ ´ë·® ÇàÀÇ ·Îµå´Â °ÅÀÇ ¸ðµç °æ¿ì¿¡ ´ëÇØ, INSERT¸¦ »ç¿ëÇÏ´Â ·Îµåº¸´Ù ºü¸¨´Ï´Ù. ºñ·Ï º¹¼öÀÇINSERTÄ¿¸Çµå¸¦ ´ÜÀÏ Æ®·£Àè¼Ç¿¡ Á¤¸®Çß´Ù°í ÇØµµ, ¶Ç ±× ¶§PREPARE¸¦ »ç¿ëÇß´Ù°í ÇØµµ ¸»ÀÔ´Ï´Ù.

13.4.3. À妽º¸¦ »èÁ¦ÇÑ´Ù

»õ·Ó°Ô ÀÛ¼ºÇÑ Å×À̺íÀ» ·ÎµåÇÒ ¶§, °¡Àå ºü¸¥ ¹æ¹ýÀº Å×À̺íÀ» ÀÛ¼ºÇϰí, COPY¸¦ »ç¿ëÇÑ Àϰý ·Îµå¸¦ ½Ç½ÃÇØ, ±× Å×ÀÌºí¿¡ ÇÊ¿äÇÑ À妽º¸¦ ÀÛ¼ºÇÏ´Â °ÍÀÔ´Ï´Ù. ±âÁ¸ÀÇ µ¥ÀÌÅÍ¿¡ ´ëÇÑ À妽º¸¦ ÀÛ¼ºÇÏ´Â ÆíÀÌ, °¢ ÇàÀÌ ·Îµå µÉ ¶§ ´Ü°èÀûÀ¸·Î °»½ÅÇÏ´Â °Íº¸´Ù ´õ ºü¸¨´Ï´Ù.

±âÁ¸ÀÇ Å×ÀÌºí¿¡ ´ë·®ÀÇ µ¥ÀÌÅ͸¦ Ãß°¡Çϰí ÀÖ´Ù¸é, À妽º¸¦ »èÁ¦ÇØ Å×À̺íÀ» ·ÎµåÇϰí, ±× ÈÄ¿¡ À妽º¸¦ ÀçÀÛ¼ºÇÏ´Â ÆíÀÌ ÁÁÀ»Áöµµ ¸ð¸¨´Ï´Ù. ¹°·Ð, ´Ù¸¥ À¯Àú·ÎºÎÅÍ º¸¸é, À妽º°¡ Á¸ÀçÇÏÁö ¾Ê´Â µ¿¾È µ¥ÀÌÅͺ£À̽ºÀÇ ¼º´ÉÀº ¾ÇÈ­µË´Ï´Ù. ¶ÇÇÑ, À¯ÀÏÇÑ À妽º¸¦ »èÁ¦Çϱâ Àü¿¡´Â ¼÷°íÇØ¾ß ÇÕ´Ï´Ù. Àϰü¼º Á¦¾à¿¡ ÀÇÇÑ ¿¡·¯ °Ë»ç°¡ ±× ±â°£ ÇàÇØÁöÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.

13.4.4. ¿ÜºÎ Ű Á¦¾àÀÇ »èÁ¦

À妽ºÀÇ °æ¿ì¿Í °°ÀÌ, ¿ÜºÎ Ű Á¦¾àÀº Çึ´Ù °Ë»çÇÏ´Â °Íº¸´Ù È¿À²ÀûÀ¸·Î "Á¤¸®ÇØ"°Ë»çÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼­, ¿ÜºÎ Ű Á¦¾àÀ» »èÁ¦ÇØ, µ¥ÀÌÅ͸¦ ·Îµå, ±×¸®°í Á¦¾àÀ» ÀçÀÛ¼ºÇÏ´Â ¹æ¹ýÀº À¯¿ëÇÒ °ÍÀÔ´Ï´Ù. ¹Ýº¹ÇÏÁö¸¸, µ¥ÀÌÅÍ ·ÎµåÀÇ ¼Óµµ¿Í Á¦¾àÀÌ Á¸ÀçÇÏÁö ¾Ê´Â µ¿¾ÈÀÇ ¿¡·¯ °Ë»ç°¡ ¾øÀ¸¸ç, trade off°¡ ÇÊ¿äÇÕ´Ï´Ù.

13.4.5. maintenance_work_mem¸¦ ´Ã¸°´Ù

´ë±Ô¸ð µ¥ÀÌÅ͸¦ ·ÎµåÇÒ ¶§maintenance_work_mem¼³Á¤ º¯¼ö¸¦ ÀϽÃÀûÀ¸·Î ´Ã¸®´Â °ÍÀ¸·Î ¼º´ÉÀ» Çâ»ó½Ãų ¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â CREATE INDEXÄ¿¸Çµå¿ÍALTER TABLE ADD FOREIGN KEYÀÇ ¼Óµµ Çâ»ó¿¡ µµ¿òÀÌ µË´Ï´Ù. COPYÀÚü¿¡´Â ±×´ÙÁö µµ¿òÀÌ µÇÁö ¾ÊÀ¸¹Ç·Î, ÀÌ Á¶¾ðÀº À§ÀÇ ±â¹ýÀÇ ´Ù¸¥ ÇÑÂÊ ¶Ç´Â ¾çÂÊ ¸ðµÎ¸¦ »ç¿ëÇϰí ÀÖÀ» ¶§¿¡¸¸ À¯¿ëÇÕ´Ï´Ù.

13.4.6. checkpoint_segments¸¦ ´Ã¸°´Ù

´ë±Ô¸ð µ¥ÀÌÅ͸¦ ·ÎµåÇÒ ¶§checkpoint_segments¼³Á¤ º¯¼ö¸¦ ÀϽÃÀûÀ¸·Î ´Ã¸®´Â °ÍÀ¸·Î °í¼ÓÈ­ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ë·®ÀÇ µ¥ÀÌÅ͸¦PostgreSQL¿¡ ·ÎµåÇÏ´Â °ÍÀ¸·Î, º¸ÅëÀÇ Ã¼Å© Æ÷ÀÎÆ®ÀÇ ºóµµ(checkpoint_timeout¼³Á¤ º¯¼ö¿¡ ÀÇÇØ ÁöÁ¤µË´Ï´Ù)º¸´Ù ºó¹øÇÏ°Ô Ã¼Å© Æ÷ÀÎÆ®°¡ ¹ß»ýÇϱ⠶§¹®¿¡ÀÔ´Ï´Ù. üũ Æ÷ÀÎÆ®°¡ ¹ß»ýÇϸé, ¸ðµç ´õƼ ÆäÀÌÁö(µð½ºÅ©¿¡ ¹Ì±âÀÔÀÇ º¯°æÀÌ ³¡³­ ¸Þ¸ð¸®ÆäÀÌÁö)´Â µð½ºÅ©¿¡ µ¹¾Æ°¡¾ß ÇÕ´Ï´Ù. ´ë·®ÀÇ µ¥ÀÌÅÍ ·Îµå ½Ã¿¡ ÀϽÃÀûÀ¸·Îcheckpoint_segments¸¦ Áõ°¡½ÃŰ´Â °ÍÀ¸·Î, ÇÊ¿äÇÑ Ã¼Å© Æ÷ÀÎÆ® ¼ö¸¦ ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.

13.4.7. ¸¶Áö¸·¿¡ANALYZE¸¦ ½ÇÇà

Å×ÀÌºí ³»ÀÇ µ¥ÀÌÅÍ ºÐÆ÷¸¦ Å©°Ô º¯°æÇßÀ» ¶§´Â ¸Åȸ, ANALYZE ¸¦ ½ÇÇàÇÏ´Â °ÍÀ» °­ÇÏ°Ô ±ÇÇÕ´Ï´Ù. ÀÌ´Â Å×ÀÌºí¿¡ ´ë·®ÀÇ µ¥ÀÌÅ͸¦ Á¤¸®ÇØ ·ÎµåÇÏ´Â °æ¿ìµµ Æ÷ÇԵ˴ϴÙ. ANALYZE(¶Ç´Â VACUUM ANALYZE)¸¦ ½ÇÇàÇÏ´Â °ÍÀ¸·Î, È®½ÇÈ÷ planner°¡ Å×ÀÌºí¿¡ °üÇÑ ÃÖ½ÅÀÇ Åë°è Á¤º¸¸¦ °¡Áú ¼ö ÀÖ½À´Ï´Ù. Åë°è Á¤º¸°¡ Á¸ÀçÇÏÁö ¾Ê´Â ¶Ç´Â ¿À·¡µÈ °æ¿ì, planner´Â ±× Å×ÀÌºí¿¡ ´ëÇÑ Äõ¸®ÀÇ ¼º´ÉÀ» ÇØÄ¡°Ô ÇÏ´Â Çã¼úÇÑ Äõ¸® °èȹÀ» ¼±ÅÃÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

13.4.8. pg_dump¿¡ °üÇÑ ¸î °³ÀÇ ÁÖÀÇ

pg_dump·Î »ý¼ºµÇ´Â ´ýÇÁ ½ºÅ©¸³Æ®´Â ÀÚµ¿À¸·Î À§ÀÇ °¡ÀÌµå ¶óÀÎÀÇ ÀüºÎ°¡ ¾Æ´Ñ, ÀϺθ¦ Àû¿ëÇÕ´Ï´Ù. pg_dump´ýÇÁ¸¦ ÇÒ ¼ö ÀÖ´Â ÇÑ ºü¸£°Ô ¸®·Îµå ÇÏ·Á¸é, ´õ¿í ¼öµ¿À¸·Î ÇÒ °ÍÀÌ ¿ä±¸¿á´Ï´Ù. (À̰͵éÀº ÀÛ¼º ½Ã¿¡ Àû¿ëÇÏ´Â °ÍÀº ¾Æ´Ï°í, ´ýÇÁ¸¦ º¹¿ø ÇÒ ¶§ Àû¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. pg_dumpÀÇ ¾îÄÉÀÌºê ÆÄÀϷκÎÅÍpg_restore¸¦ »ç¿ëÇØ ·ÎµåÇÒ ¶§µµ °°Àº °ÍÀ» Àû¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. )

µðÆúÆ®¿¡¼­´Â pg_dump´Â COPY¸¦ »ç¿ëÇÕ´Ï´Ù. ½ºÅ°¸¶¿Í µ¥ÀÌÅÍÀÇ ´ýÇÁ Àüü¸¦ »ý¼ºÇÏ´Â °æ¿ì, À妽º¿Í ¿ÜºÎ Ű Á¦¾àÀ» ÀÛ¼ºÇϱâ Àü¿¡ µ¥ÀÌÅ͸¦ ·ÎµåÇÏ´Â °Í¿¡ ÁÖÀÇÇØ Áֽʽÿä. ±×·¯¹Ç·Î, ÀÌ °æ¿ì, °¡ÀÌµå ¶óÀÎÀÇ ¸î °³´Â ÀÚµ¿À¸·Î ÇàÇØÁý´Ï´Ù. ³²°ÜÁø ÀÛ¾÷Àº ´ýÇÁ ½ºÅ©¸³Æ®¸¦ ·ÎµùÇϱâ Àü¿¡ maintenance_work_mem ¹× checkpoint_segments¸¦ ÀûÀýÇÑ(Áï º¸Å뺸´Ù Å«) °ªÀ¸·Î ¼³Á¤ÇÏ°í ³­ ÈÄ¿¡ ANALYZE ÀÌ ÀÛµ¿µË´Ï´Ù.

µ¥ÀÌÅ͸¸ÀÇ ´ýÇÁµµCOPYÄ¿¸Çµå¸¦ »ç¿ëÇÏÁö¸¸, À妽ºÀÇ »èÁ¦¿Í ÀçÀÛ¼ºÀ» ½Ç½ÃÇÏÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ, º¸ÅëÀº ¿ÜºÎ Ű Á¦¾àÀ» º¯°æÇÏÁö ¾Ê½À´Ï´Ù. [1] µû¶ó¼­, µ¥ÀÌÅ͸¸ÀÇ ´ýÇÁ¸¦ ·ÎµåÇÒ ¶§, À§ÀÇ ±â¹ýÀ» »ç¿ëÇÏ°í ½ÍÀ¸¸é ½º½º·Î À妽º¿Í ¿ÜºÎ ۸¦ »èÁ¦, ÀçÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù. µ¥ÀÌÅ͸¦ ·ÎµåÇÒ ¶§checkpoint_segments¸¦ ´Ã¸®´Â Àϵµ À¯¿ëÇÕ´Ï´Ù. ±×·¯³ª maintenance_work_mem¸¦ ´Ã¸®´Â °ÍÀº »ý°¢ÇÏÁö ¸»¾Æ Áֽʽÿä. ÀÌ´Â ´ÙÀ½¿¡ À妽º¿Í ¿ÜºÎ ۸¦ ¼öµ¿À¸·Î ÀçÀÛ¼ºÇÒ ¶§ ½Ç½ÃÇÏ´Â ÆíÀÌ ÁÁÀ» °ÍÀÔ´Ï´Ù. ¶ÇÇÑ, ½ÇÇàÇÑ ´ÙÀ½¿¡ANALYZE¸¦ ½Ç½ÃÇÏ´Â °ÍÀ» ÀØÁö ¸»¾Æ Áֽʽÿä.

Notes

[1]

--disable-triggers¿É¼ÇÀ» »ç¿ëÇØ, ¿ÜºÎ ۸¦ ¹«È¿È­ ½Ãų ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª À̰ÍÀº ¿ÜºÎ Ű Á¦¾àÀ» ´ÊÃß´Â °ÍÀÌ ¾Æ´Ï¶ó, Á¦°ÅÇÑ´Ù´Â °ÍÀ» ÁÖÀÇÇØ Áֽʽÿä. ±×¸®°í À̰ÍÀ» »ç¿ëÇÒ °æ¿ì, ºÎÁ¤ÇÑ µ¥ÀÌÅ͸¦ »ðÀÔÇÒ ¼ö ÀÖ½À´Ï´Ù.