InnoDB Performance tuning tips
InnoDB´Â MyISAM°ú °øÀ¯ÇÏ´Â ¸Þ¸ð¸®µµ ÀÖÁö¸¸ ´ë°³ º°µµÀÇ Buffer poolÀ» °¡Áö°í ÀÖ½À´Ï´Ù. Áï, MyISAMÀÇ °æ¿ì record_buffer³ª key_buffer¸¦ »ç¿ëÇÏÁö¸¸ InnoDB´Â innodb_additional_mem_pool_size³ª innodb_buffer_pool_size °°Àº º°µµÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÇÕ´Ï´Ù. µû¶ó¼ InnoDBÀü¿ë DB¸¦ ±¸¼ºÇÑ´Ù¸é key_buffer³ª record_buffer ¿¡ ³Ê¹« ¸¹Àº ¸Þ¸ð¸®¸¦ ÇÒ´çÇؼ´Â ¾ÈµÇ°Ú½À´Ï´Ù.
Áß¿äÇÑ ¸Þ¸ð¸® °ü·Ã ÆĶó¹ÌÅ͸¦ ¸î°¡Áö ¼³¸íÇÏ°Ú½À´Ï´Ù.
1. innodb_buffer_pool_size : MyISAMÀÇ °æ¿ì Buffer poolÀÌ ¾ø½À´Ï´Ù. µû¶ó¼ OSÀÚüÀÇ buffer cache¸¦ »ç¿ëÇϸç OSÀÇ flush ¸ÞÄ«´ÏÁò¿¡ µû¶ó¼ µð½ºÅ©¿¡ ¾²°Ô µË´Ï´Ù.
MyISAMÀÇ °æ¿ì Key_buffer ³ª record_buffer, sort_buffer¿Ü¿¡µµ OSÀÇ ¹öÆÛij½Ã¸¦ À§ÇØ ÃæºÐÇÑ ¸Þ¸ð¸®¸¦ ³²°Ü ³õ¾Æ¾ßÇÏ°Ú½À´Ï´Ù. OSÀÇ ¹öÆÛij½¬´Â OS°¡ ÀÚµ¿À¸·Î »çÀÌÁ µ¿ÀûÀ¸·Î ÇÒ´çÇϸç free ¸í·É¾î·Î »óŸ¦ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
±×·¯³ª InnoDB´Â ¿À¶óŬó·³ º°µµÀÇ µ¥ÀÌŸ¸¦ À§ÇÑ Àб⠾²±â ¹öÆÛ ¸Þ¸ð¸®¸¦ °¡Áö°í ÀÖÀ¸¸ç ±×°ÍÀÌ innodb_buffer_pool_sizeÀÔ´Ï´Ù. innodb_buffer_pool_size´Â »öÀΰú µ¥ÀÌŸ¿¡ ´ëÇÑ Cache µ¥ÀÌŸ¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ±×·¡¼ MyISAMó·³ Key_buffer°¡ ÇÊ¿ä ¾ø´Â°Ì´Ï´Ù.
º¸Åë ¿ì¸®°¡ SQLÄõ¸®·Î ÁúÀǸ¦ ¼öÇàÇϸé DBMS´Â ¸ÕÀú ÀÌ buffer_pool¿¡¼ µ¥ÀÌŸ¸¦ °Ë»öÇÏ°í ¾øÀ» °æ¿ì µð½ºÅ©¿¡¼ ÀÐ¾î¼ buffer_pool¿¡ ¿Ã·Á³õÀ¸¸ç ÀÌ°ÍÀ» \¹°¸®ÀûÀÎ Àбâ\ ¶ó°í ÇÕ´Ï´Ù. ¹Ý¸é¿¡ ÀÌ¹Ì buffer_pool¿¡ µ¥ÀÌŸ°¡ Á¸ÀçÇÏ¿© µð½ºÅ©¸¦ Á÷Á¢ ÀÐÁö ¾Ê¾Æµµ µÇ´Â °æ¿ì¸¦ \³í¸®Àû Àбâ\¶ó°í ÇÕ´Ï´Ù.
´ç¿¬È÷ ³í¸®Àû ÀбⰡ ´õ ºü¸£¹Ç·Î buffer_poolÀÇ »çÀÌÁ Å©°Ô ¼³Á¤ÇÒ ¼ö·Ï À¯¸®ÇÕ´Ï´Ù. ±×·¯³ª ¹«ÇÑÁ¤ Å©±â¸¦ ´Ã¸± °æ¿ì ½º¿ÍÇÎÀ» À¯¹ßÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÚ½ÅÀÇ ÇöÀç ¸Þ¸ð¸®¿¡¼ °è»êÇÏ¿©¾ß ÇÕ´Ï´Ù. Àû´çÇÑ »çÀÌÁî´Â ÀÚ½ÅÀÇ ¸Þ¸ð¸®ÀÇ 50%-80%ÀÔ´Ï´Ù.
Âü°í·Î x86¸Ó½Å¿¡¼´Â ÀÌ innodb_buffer_pool_size ¸¦ 2GÀÌ»ó ¼³Á¤ÇÒ ¼ö¾øÀ¸´Ï Âü°í ¹Ù¶ø´Ï´Ù.
2. innodb_additional_mem_pool_size: ÀÌ ¸Þ¸ð¸®´Â \µ¥ÀÌŸ µñ¼Å³Ê¸® Á¤º¸\³ª \³»ºÎÀÇ µ¥ÀÌŸ ±¸Á¶\ ¿¡ ´ëÇÑ Á¤º¸¸¦ ´ã´Â ¸Þ¸ð¸®ÀÔ´Ï´Ù.
º¸Åë 2MÁ¤µµ°¡ Àû´çÇÏÁö¸¸ ¾ÆÁÖ ¸¹Àº Å×À̺íÀ» »ç¿ëÇÑ´Ù¸é ´Ã·ÁÁÖ¾î¾ßÇÕ´Ï´Ù.
ÀÌ ¸Þ¸ð¸® °ø°£ÀÌ ºÎÁ·Çϸé InnoDB´Â OSÀÇ ¸Þ¸ð¸®¸¦ ÇÒ´çÇؼ »ç¿ëÇϱ⠽ÃÀÛÇϸç error log¿¡ warning ¸Þ½ÃÁö¸¦ ³²±â°Ô µË´Ï´Ù.
3. innodb_flush_log_at_trx_commit : ÀÌ ÆĶó¹ÌÅÍ´Â insert ³ª update µî µ¥ÀÌŸ »ðÀÔ°ú ¹ÐÁ¢ÇÑ °ü°è°¡ ÀÖ½À´Ï´Ù.
Áï, commit À» ÇÏ¿´À» °æ¿ì ±× Áï½Ã commitµÈ µ¥ÀÌŸ¸¦ log file ¿¡ ±â·ÏÇÒ °ÍÀÎÁö ¾Æ´ÑÁö¸¦ ¼³Á¤ÇÏ´Â ¿É¼ÇÀÔ´Ï´Ù. Áï½Ã ·Î±× ÆÄÀÏ¿¡ ±â·ÏÇÒ °æ¿ì ±ÞÀÛ½º·± Á¤Àü °°Àº °æ¿ì µ¥ÀÌŸ ¼Õ½ÇÀ» ¸·À» ¼ö ÀÖÁö¸¸ ¸Å¹ø ·Î±×¸¦ ±â·ÏÇØ¾ß ÇϹǷΠ¼Óµµ°¡ »ó´çÈ÷ ÀúÇϵ˴ϴÙ.
¸¸¾à ¾à°£ÀÇ µ¥ÀÌŸ ¼Õ½ÇÀ» °¨³»ÇÒ ¼ö ÀÖ´Ù¸é \0\À¸·Î ¼³Á¤ÇϽñ⠹ٶø´Ï´Ù.
\0\À¸·Î ¼³Á¤ÇÒ °æ¿ì ¸Å Æ®·£Àè¼Ç ¸¶´Ù µ¥ÀÌŸ¸¦ ·Î±×¿¡ ±â·ÏÇÏÁö ¾ÊÀ¸¹Ç·Î I/OºÎÇϸ¦ ÁÙÀÏ ¼ö ÀÖÀ¸¸ç ¿©·¯ Æ®·£Àè¼ÇÀ» ¸ð¾Æ¼ ÇѹøÀÇ µð½ºÅ© I/O·Î ±â·ÏÇϹǷΠI/OȽ¼ö ÀÚüµµ ÁÙ¾îµì´Ï´Ù.
½ÇÀç·Î Å×½ºÆ® °á°ú ÀÌ ¿É¼ÇÀÇ ¼³Á¤¿¡ µû¶ó ±ØÀûÀ¸·Î insert ¼º´ÉÀÌ ´Þ¶óÁö´Â °ÍÀ» ¸ñ°ÝÇÏ¿´½À´Ï´Ù.
µðÆúÆ® ¼³Á¤Àº \0\Áï off »óÅÂÀÔ´Ï´Ù. (commitÁï½Ã ·Î±×¿¡ ±â·ÏÇÏÁö ¾ÊÀ½)
4. innodb_log_file_size: ÀÌ ÆÄÀÏÀº Æ®·£Àè¼ÇÀ» ±â·ÏÇÏ´Â ·Î±× ÆÄÀÏÀÇ »çÀÌÁ °áÁ¤ÇÏ´Â ¿É¼ÇÀÔ´Ï´Ù. InnoDB´Â Æ®·£Àè¼ÇÀ» Áö¿øÇϹǷΠÀÌ·± Æ®·£Àè¼Ç ¾ÈÁ¤¼ºÀ» À§ÇÑ ·Î±× ÆÄÀÏÀÌ Á¸ÀçÇÏ¿©¾ß ÇÕ´Ï´Ù.
óÀ½¿¡ µ¥ÀÌŸ¿Í »öÀÎÀ» À§ÇÑ ¹öÆÛÇ® ¸Þ¸ð¸®(innodb_buffer_pool_size)¸¦ ¾ð±ÞÇÏ¿´½À´Ï´Ù. ÀÌ·¯ÇÑ ¹öÆÛÇ®Àº ¼º´ÉÀ» À§ÇÑ °ÍÀÓ¿¡ Ʋ¸²¾øÁö¸¸ ´ÜÁ¡Àº ±ÞÀÛ½º·± Á¤Àü °°Àº °æ¿ì¿¡ ¹öÆÛÇ®¿¡ ÀÖ´Â µ¥ÀÌŸ°¡ ¼Õ½ÇµÈ´Ù´Â °ÍÀÔ´Ï´Ù. (ÁÖ·Î ¾²±â ¹öÆÛ) ±×·¡¼ ÀÌ·¯ÇÑ ¼Õ½ÇÀ» ¹æÁöÇÏ°íÀÚ log fileÀ» µÎ°Ô µÇ¸ç, Æ®·£Àè¼Ç commitÀÌ µÉ ¶§¸¶´Ù ·Î±×¿¡ ²Ä²ÄÈ÷ ±â·ÏÇسõ°í ÃßÈÄ ½Ã½ºÅÛ ´Ù¿îÀ̳ª Á¤Àü °°Àº »óȲÀÌ ¹ß»ýÇÒ °æ¿ì ÀÌ ·Î±× ÆÄÀÏÀ» ±Ù°Å·Î ÀÚµ¿ º¹±¸¸¦ ÇÏ°Ô µË´Ï´Ù.
ÀÌ ÆÄÀÏÀÇ »çÀÌÁ ¾ó¸¶·Î ¼³Á¤ÇÏ´À³Äµµ ¾ÆÁÖ Áß¿äÇÑ ¹®Á¦ÀÔ´Ï´Ù. ÀÌ ÆÄÀÏÀº Æ®·£Àè¼ÇÀ» ±â·ÏÇÏ´Â ÆÄÀÏÀ̹ǷΠÀÌ ÆÄÀÏÀÌ °¡µæÂ÷°Ô µÇ¸é ¹öÆÛÇ®¿¡ ÀÖ´Â µ¥ÀÌŸ¸¦ µð½ºÅ©¿¡ ¾²µµ·Ï Áö½ÃÇÏ°í ·Î±×¸¦ ÃʱâÈÇÏ°í ´Ù½Ã ½á³ª°¡¾ß ÇÕ´Ï´Ù.
Áï ·Î±× ÆÄÀÏÀº ¹«ÇÑÁ¤ Ä¿Áö´Â °ÍÀÌ ¾Æ´Ï¶ó ÀÏÁ¤ÇÑ Å©±â¿Í °¹¼ö¸¦ °¡Áö°í ¼øȯ½ÄÀ¸·Î ó¸® µÇ¹Ç·Î ·Î±×°¡ ÃʱâȵǴ½ÃÁ¡¿¡´Â buffer_poolÀÇ µ¥ÀÌŸ¸¦ µð½ºÅ©¿¡ ±â·ÏÇÏ¿©¾ßÇÕ´Ï´Ù. µÚÁý¾î ¸»Çϸé ÀÌ ·Î±× »çÀÌÁî°¡ ÀÛÀ¸¸é ÀÛÀ»¼ö·Ï buffer_poolÀÇ ³»¿ëÀ» ÀÚÁÖ µð½ºÅ©¿¡ ±â·ÏÇÏ¿©¾ß ÇÑ´Ù´Â ÀǹÌÀÔ´Ï´Ù. (checkpoint)
µû¶ó¼ ÀÌ ·Î±× ÆÄÀÏÀÇ »çÀÌÁ buffer_poolÀÇ 15% Á¤µµ·Î ¼³Á¤ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ¸ç °æ¿ì¿¡ µû¶ó¼´Â buffer_pool »çÀÌÁî Á¤µµ·Î Ä¿Áú ¼öµµ ÀÖ½À´Ï´Ù.
ÀÌ ·Î±× ÆÄÀÏÀÇ ÃÖ´ë »çÀÌÁî´Â ¸ðµÎ ÇÕÃļ <4GBº¸´Ù ÀÛ¾Æ¾ß ÇÑ´Ù´Â Á¦ÇÑÀÌ ÀÖÀ¸¸ç, »çÀÌÁî°¡ Ŭ °æ¿ì ¹Ý´ë ±ÞºÎ·Î ½Ã½ºÅÛ ´Ù¿î ÈÄ À纹±¸¿¡ ¸¹Àº½Ã°£ÀÌ ¼Ò¿äµÈ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù.
5. innodb_log_buffer_size : ÀÌ°ÍÀº À§¿¡¼ ¸»ÇÑ ·Î±× ÆÄÀÏÀ» ±â·ÏÇϱâ À§ÇÑ ¹öÆÛ »çÀÌÁîÀÔ´Ï´Ù. Ä¿´Ù¶õ Æ®·£Àè¼ÇÀ» ó¸®ÇÒ °æ¿ì Å©°Ô Àâ¾ÆÁÖ´Â °ÍÀÌ ÁÁÁö¸¸ Æ®·£Àè¼ÇÀÌÀ۰ųª °ÅÀÇ ¾ø´Ù¸é Å©°Ô Àâ´Â °ÍÀº ³¶ºñÀÔ´Ï´Ù.
º¸Åë 1M-8M »çÀÌ·Î ¼³Á¤ÇϽñ⠹ٶø´Ï´Ù.
¸î°¡Áö ¿É¼ÇµéÀÌ ´õ ÀÖÁö¸¸ ¼º´É¿¡ °¡Àå ±ØÀûÀÎ ¿µÇâÀ» ÁÖ´Â °Íµé¸¸ ¾ð±ÞÇß½À´Ï´Ù.
¸ð´ÏÅ͸µ
MySQL 3.23.52 ±×¸®°í 4.0.3 ¹öÁ¯ ºÎÅÍ InnoDBÀÇ ³»ºÎ »óŸ¦ ¸ð´ÏÅ͸µ ÇÒ ¼ö ÀÖµµ·Ï "SHOW INNODB STATUS" ¸í·É¾î¸¦ Á¦°øÇÕ´Ï´Ù.
ÇöÀç ¹öÁ¯Àº À§ÀÇ ¸í·É¾î¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸¹Ç·Î
CREATE TABLE innodb_monitor(a int) type = innodb;
¶ó´Â ¸í·É¾î¸¦ ³»¸®¸é <hostname>.err ÆÄÀÏ¿¡ ÀÏÁ¤°£°ÝÀ¸·Î ³»ºÎ Á¤º¸¸¦ ±â·ÏÇÕ´Ï´Ù.
´Ù½Ã ²ô·Á¸é DROP TABLE innodb_monitor; ¸í·É¾î¸¦ ³»·ÁÁÖ¼Å¾ß ÇÕ´Ï´Ù.
create table innodb_monitor(a int) type=innodb; ¶ó´Â ¸í·É¾î´Â ±×³É MySQL¿£Áø¿¡°Ô »óÅÂÁ¤º¸¸¦ ·Î±×¿¡ ±â·ÏÇ϶ó´Â ÀǹÌÀÌÁö ½ÇÀç·Î Å×À̺íÀº Àǹ̰¡ ¾ø½À´Ï´Ù.
À§ÀÇ Å×À̺íÀ» »ý¼ºÇ϶ó´Â ¸í·É¾î¸¦ ÀÔ·ÂÇϸé MySQL ¿£ÁøÀº ±×³É ¸í·É¾î·Î ÀνÄÇÕ´Ï´Ù.
¸ð´ÏÅ͸µÀ» ¾ð±ÞÇÏ´Â ÀÌÀ¯´Â Æ©´×À» ÇѹøÇϴ°ÍÀ¸·Î ³¡³ª´Â°ÍÀÌ ¾Æ´Ï¶ó Áö¼ÓÀûÀ¸·Î ¸ð´ÏÅ͸µ ÇÏ¿© Á¶Á¤ÇÏ¿©¾ß ÇÑ´Ù´Â Á¡À» °Á¶Çϱâ À§Çؼ ÀÔ´Ï´Ù.
ºÐ¸íÈ÷ Æ©´×Àº Á¤´äÀÌ ¾ø½À´Ï´Ù. µû¶ó¼ ³»ºÎ ÀÛµ¿ ¿ø¸®¸¦ Á¤È®È÷ ÀÌÇØÇÏ°í Æ©´×À» ÇßÀ» ¶§ È¿°ú¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù.