°³¿ä: µ¥ÀÌŸº£À̽º ¼¹ö¸¦ ¼³Á¤Çϰųª Æ©´×ÇÔÀ¸·Î½á, ±×¸®°í MySQLÀ» À§ÇØ ¼Ö¶ó¸®½º ÀÚü¸¦ ÃÖÀûÈ ÇÔÀ¸·Î½á ¼Ö¶ó¸®½º Ç÷§Æû »ó¿¡¼ MySQLÀÇ ÆÛÆ÷¸Õ½º¸¦ ±Ø´ëÈ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¹®¼´Â Æ©´× ÆÄ¶ó¹ÌÅÍ µîÀ» ¼³Á¤ÇÏ°í ¿©·¯ºÐÀÇ È¯°æ¿¡¼ Æ©´×ÇÏ´Â °ÍÀ» µ½±â À§ÇØ ÀÛ¼ºµÇ¾ú½À´Ï´Ù.
¼Ò°³
MySQLÀº ¼¼°è¿¡¼ °¡Àå ¸¹ÀÌ ¾²ÀÌ´Â ¿ÀǼҽº µ¥ÀÌŸ º£À̽º Áß Çϳª ÀÔ´Ï´Ù. MySQLÀÇ °Á¡Àº ÈǸ¢ÇÑ ÆÛÆ÷¸Õ½º¿Í È®À强ÀÌ°í ±×·¯ÇÑ °Á¡À¸·Î ÀÎÇØ ¿£ÅÍÇÁ¶óÀÌÁî ȯ°æ¿¡¼ À¥»çÀÌÆ®³ª µ¥ÀÌŸ ¿þ¾î ÇϿ콺 ±×¸®°í °¢Á¾ µ¥ÀÌŸ À§ÁÖÀÇ ¾îÇø®ÄÉÀ̼ǿ¡ Àß ¸Â½À´Ï´Ù.
¼Ö¶ó¸®½º »óÀÇ MySQL¿¡¼ ÆÛÆ÷¸Õ½º¸¦ ±Ø´ëÈ Çϱâ À§Çؼ´Â µ¥ÀÌŸ º£À̽º ¼¹öÀÇ ¼³Á¤°ú Æ©´×µµ Áß¿äÇÏ°í ¶ÇÇÑ MySQLÀ» À§ÇÑ ¼Ö¶ó¸®½ºÀÇ ÃÖÀûȵµ Áß¿äÇÕ´Ï´Ù. ¸ðµç ¿öÅ©·Îµå¿¡ µ¿ÀÏÇÏ°Ô Àû¿ëµÇ´Â ¹ü¿ë MySQL ¼¹ö Æ©´× ÆÄ¶ó¹ÌÅÍ´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù;°¢°¢ÀÇ Æ¯¼öÇÑ ¿öÅ©·Îµå, Çϵå¿þ¾î, ¿î¿µÃ¼Á¦¿¡ µû¶ó¼ ÀûÇÕÇÑ ÆÄ¶ó¹ÌÅͰ¡ °áÁ¤ µË´Ï´Ù. ÀÌ ¹®¼´Â ÀÌ·¯ÇÑ ÆÄ¶ó¹ÌÅ͸¦ Á¤ÀÇÇÏ°í Æ©´×ÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ µµ¿òÀ» ÁÖ±â À§ÇØ ¾²¿©Á³½À´Ï´Ù.
MySQLÀº MyISAM, InnoDB, HEAP, ±×¸®°í Berkeley DB (BDB)¸¦ Æ÷ÇÔÇÑ ¸î°¡Áö ½ºÅ丮Áö ¿£ÁøµéÀ» Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. InnoDB¿Í BDB ½ºÅ丮Áö´Â ¿øÀÚÀû, ÀϰüÀû, µ¶¸³Àû, ±×¸®°í ¾ÈÁ¤ÀûÀÎ Æ®·£Á§¼ÇÀ» Ä¿¹Ô, ·Ñ¹é ±×¸®°í ¿À·ù º¹±¸¿Í ÇÔ²² Áö¿øÇÕ´Ï´Ù. ±×¸®°í ¿ÀÁ÷ InnoDB¸¸ÀÌ ¿´ÜÀ§ÀÇ ¶ôÀ» ³í-¶óÅ·(non-locking) Àбâ¿Í ÇÔ²² ±âº»À¸·Î Á¦°øÇÕ´Ï´Ù.
InnoDB ½ºÅ丮Áö ¿£ÁøÀº 4°¡ÁöÀÇ µ¶¸³µÈ ·¹º§À» Áö¿ø ÇÕ´Ï´Ù: read uncommitted, read committed, repeatable read, ±×¸®°í Á÷·ÄÈ. InnoDB ´Â ¶ÇÇÑ ¿Ü·¡ Ű ¹«°á¼ºÀ̶ó´Â ÂüÁ¶ ¹«°á¼ºÀ¸·Î ºÒ¸®´Â ±â´ÉÀ» Áö¿øÇϰí ÇÁ¶óÀ̸Ӹ® ۸¦ ÀÌ¿ëÇÑ ºü¸¥ ·¹ÄÚµå °Ë»öÀ» Áö¿øÇÕ´Ï´Ù. ÀÌ·¯ÇÑ °·ÂÇÑ ÇÔ¼ö¿Í ±â´É ¶§¹®¿¡ InnoDB´Â Á¾Á¾ ¾öû³ Å©±âÀÇ ·Îµå°¡ °É¸®´Â ½Ã½ºÅÛ¿¡ »ç¿ëµË´Ï´Ù. ÀÌ ¹®¼´Â ¼Ö¶ó¸®½º10¿¡¼ CPU »ç¿ëÀ², ¸Þ¸ð¸®, µð½ºÅ© µå¶óÀÌºê ¸®¼Ò½ºµîÀ» È¿°ú ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ´Ù¾çÇÑ ¹æ¹ýÀ» ´Ù·ì´Ï´Ù. ¶ÇÇÑ ÁÖÁ¦µé¿¡¼´Â ÃÖÀûÈµÈ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ°í ½ã ½ºÆ©µð¿À 11 ¼ÒÇÁÆ®¿þ¾î ¸¦ »ç¿ëÇÏ¿© 64ºñÆ® MySQLÀ» ÄÄÆÄÀÏ ÇÏ¸ç ¼Ö¶ó¸®½ºÀÇ UFS ÆÄÀÏ ½Ã½ºÅÛÀ» Æ©´×Çϰí MySQL ¼¹ö¸¦ ¼³Á¤Çϰí InnoDB ½ºÅ丮Áö ¿£ÁøÀ» Æ©´× ÇÏ´Â °ÍÀ» ´Ù·ì´Ï´Ù.
InnoDB À¯Àú ¾²·¹µå
MySQLÀº ´ÜÀÏ ÇÁ·Î¼¼½ºÀÌ°í ¸ÖÆ¼ ¾²·¹µå ¾îÇø®ÄÉÀÌ¼Ç ÀÔ´Ï´Ù. ÇϳªÀÇ ¸ÞÀÎ ¾²·¹µå´Â ¼¹ö¸¦ ÄÁÆ®·ÑÇϱâ À§ÇÑ ¾²·¹µå·Î ¸ðµç ´Ù¸¥ MySQL ¾²·¹µå¿¡ ºñÇØ °¡Àå ¿ì¼±¼øÀ§°¡ ³ô½À´Ï´Ù. ¸ÞÀÎ ¾²·¹µå´Â ´ëºÎºÐÀÇ ½Ã°£¿¡ idleÇÑ »óÅÂÀÌ°í ¸Å 300ms(millisecond)¸¶´Ù ±ú¾î³ª¼ ¹öÆÛ Ç®¿¡¼ ´õ·¯¿î ºí·°À» ³»º¸³»´Â ·ùÀÇ Æ¯¼öÇÑ ÀÛ¾÷ÀÌ ÇÊ¿äÇÑÁö üũÇÏ°Ô µË´Ï´Ù.
¸ÞÀξ²·¹µå¿¡ µ¡ºÙ¿©¼ À¯Àú¾²·¹µå ¼ÂÀº º¸ÅëÀÇ ¿ì¼±¼øÀ§¸¦ °¡Áö°í ¾²·¹µå Ç® ¾È¿¡¼ ½ÇÇàµÇ¸ç Ŭ¶óÀ̾ðÆ®ÀÇ ¿ä±¸¸¦ µ¿½Ã¿¡ ó¸®ÇÏ°Ô µË´Ï´Ù. °¢ Ŭ¶óÀÌ¾ðÆ® ¿ä±¸¿¡ ´ëÇØ ÇϳªÀÇ ¾²·¹µå°¡ Ŭ¶óÀ̾ðÆ®ÀÇ ¿ä±¸¸¦ ó¸®ÇÏ°í °á°ú°¡ ÁغñµÇ´Â ´ë·Î ¹Ù·Î °¢ Ŭ¶óÀÌ¾ðÆ®¿¡ µ¹·Á ÁÝ´Ï´Ù. ±×¸®°í ÇϳªÀÇ À¯Àú ¾²·¹µå´Â Äֿܼ¡¼ÀÇ ÀÔ·ÂÀ» ±â´Ù¸®°í ÇϳªÀÇ À¯Æ¿¸®Æ¼ ¾²·¹µå ±×·ìÀº °¡Àå ³·Àº ¿ì¼±¼øÀ§¸¦ °¡Áö°í ¼öÇàµÇ¸é¼ ¹é±×¶ó¿îµå ÀÛ¾÷À» ó¸®ÇÏ°Ô µË´Ï´Ù.
ÇöÀç MySQLÀº Ŭ¶óÀÌ¾ðÆ® ¿ä±¸¸¦ ó¸®ÇÏ´Â À¯Àú ¾²·¹µåÀÇ °¹¼ö¸é¿¡¼ È®À强ÀÌ ÁÁÁö ¾Ê½À´Ï´Ù. ÆÛÆ÷¸Õ½º´Â ¾î´À Á¤µµÀÇ ÆÛÆ÷¸Õ½º ÇѰèÁ¡±îÁö¸¸ È¿À²ÀûÀ¸·Î È®ÀåµË´Ï´Ù. ±× ÈÄ¿¡´Â À¯Àú ¿¬°áÀÇ ¼ö°¡ Áõ°¡Çϸé ÇÒ¼ö·Ï MySQLÀÇ ÆÛÆ÷¸Õ½º´Â ¶³¾îÁö°Ô µË´Ï´Ù. ¿Ö³ÄÇÏ¸é ¾²·¹µåÀÇ µ¿½Ã½ÇÇ༺¿¡ Ãæµ¹ÀÌ »ý±â±â ¶§¹®ÀÔ´Ï´Ù. À¯ÀúÀÇ ¿¬°á¼ö°¡ Æ©´×ÀÌ °¡´ÉÇÑ ¾îÇø®ÄÉÀ̼ǿ¡¼ °³¹ßÀÚ´Â °¢ ´Ù¾çÇÑ ¿öÅ©·Îµå¿¡ ´ëÇÏ¿© °¡Àå ÃÖÀûÀÇ À¯Àú Á¢¼Ó¼ö¸¦ °áÁ¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
¿ì¸®´Â SysBench CPU-¹Ù¿îµåÀÇ º¥Ä¡ ¸¶Å© Å×½ºÆ®¸¦ 4-way ¿ïÆ®¶óSPARC IV ÇÁ·Î¼¼¼ ±â¹Ý¿¡¼ ¼öÇàÇÏ¿´½À´Ï´Ù. (1M-¿ µ¥ÀÌŸ´Â InnoDB µ¥ÀÌŸ¿Í À妽º ij½¬ ¹öÆÛ¿¡ ä¿öÁú ¼ö ÀÖ½À´Ï´Ù) MySQL ÆÛÆ÷¸Õ½º´Â 16 À¯Àú ¿¬°á¿¡¼ °¡Àå ³ô¾Ò°í 32 À¯Àú ¿¬°á¿¡¼ ºÎÅÍ ¼¼È÷ ¶³¾îÁö±â ½ÃÀÛÇÕ´Ï´Ù. ±×·¡ÇÁ¸¦ ÂüÁ¶ ¹Ù¶ø´Ï´Ù. (ÁÖÀÇ: °á°ú´Â ´Ù¾çÇØ Áú ¼ö ÀÖÀ½.)
 |
Ç¥ 1: MySQL 5.0.7 SysBench ¿¬°á È®À强 Å×½ºÆ® |
ÀÌ Å×½ºÆ®´Â SysBench ¿öÅ©·Îµå¿¡¼ÀÇ °á°ú¸¦ º¸¿©ÁÖ°í ¿ïÆ®¶óSPARC IV ±â¹ÝÀÇ ¼¹ö¿¡¼ÀÇ ÃÖ´ë ÆÛÆ÷¸Õ½º´Â À¯ÀúÀÇ Á¢¼Ó¼ö¸¦ 4*CPU¼ö·Î ¼³Á¤ÇÔÀ¸·Î½á ¾ò¾îÁú ¼ö ÀÖÀ½À» º¸¿©ÁÝ´Ï´Ù. ÃÖ´ë MySQL ÆÛÆ÷¸Õ½º È®À强Àº 4°³ÀÇ CPU¿¡¼ °ÅÀÇ ¼±ÇüÀ¸·Î È®ÀåµÇ°í È®À强ÀÇ ºñÀ²Àº 8°³ÀÇ CPU¿¡¼ ºÎÅÍ ¶³¾îÁüÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ Ç¥´Â 1-24 ¿ïÆ®¶óSPARC IV ÇÁ·Î¼¼¼¿¡¼ÀÇ È®À强À» º¸¿©ÁÝ´Ï´Ù. (ÁÖÀÇ: °á°ú´Â ´Ù¾çÇØ Áú ¼ö ÀÖÀ½.)
 |
Ç¥ 2: MySQL 5.0.7 SysBench CPU È®À强 Å×½ºÆ® |
À¯Àú Á¢¼Ó¼ö°¡ Æ©´×ÀÌ ºÒ°¡´ÉÇÑ ¾îÇø®ÄÉÀ̼ǿ¡¼ innodb_thread_concurrency
ÆÄ¶ó¹ÌÅÍ´Â InnoDB°¡ ÃÖ´ë·Î °¡Áú ¼ö ÀÖ´Â µ¿½Ã ¾²·¹µåÀÇ °¹¼ö¸¦ ¼³Á¤ÀÌ °¡´ÉÇÕ´Ï´Ù. show innodb
»óÅ¿¡ Àִ ť¿¡ ¸¹Àº Äõ¸®µéÀÌ °É·Á ÀÖ´Ù¸é ÀÌ °ªÀ» Áõ°¡½Ãų Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌ °ªÀ» 1000À¸·Î ¼ÂÆÃÇÑ´Ù¸é µ¿½Ã¼º üũ¸¦ ºñȰ¼ºÈ ÇÏ°Ô µË´Ï´Ù. ±×·¯¹Ç·Î µ¿½Ã¿¡ ¼¹ö ³»¿¡ Á¸ÀçÇÏ´Â ´Ù¾çÇÑ Á¾·ùÀÇ Å½ºÅ©¸¦ ó¸®ÇÒ ¸¹Àº ¾²·¹µå°¡ Á¸ÀçÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù. ¼Ö¶ó¸®½º Ç÷§Æû»óÀÇ ¸î¸î ¿öÅ©·Îµå¿¡¼ °Å´ëÇÑ À¯Àú ·¹º§ ¶ôÀ» º»´Ù¸é (prstat
-mL
À» ÀÌ¿ëÇØ LCK
°ª Ãâ·Â), ÀÌ °ªÀ» °¨¼Ò½ÃÅ´À¸·Î½á CPU »ç¿ëÀ²ÀÇ È¿À²À» ³ôÀÏ ¼ö ÀÖ½À´Ï´Ù. ¼öÇàÁßÀÎ ½Ã½ºÅÛÀÇ µ¿ÀÛ¿¡ µû¶ó ÀÌ ÆÄ¶ó¹ÌÅ͸¦ Æ©´×ÇÔÀ¸·Î½á ÆÛÆ÷¸Õ½º¿¡ Å« ¿µÇâÀ» ÁÙ ¼ö ÀÖ½À´Ï´Ù.
time
(2) ½Ã½ºÅÛ ÄÝÀ» ÃÖ¼ÒÈ Çϱâ À§ÇÑ ÃÖÀûÈµÈ Time ¶óÀ̺귯¸® »ç¿ë¹ý
¼Ö¶ó¸®½º Ç÷§Æû¿¡¼ time
(2) ½Ã½ºÅÛ ÄÝÀº Ä¿³Î¿¡ Æ®·¦À» ¼öÇà½ÃÄѼ gethrestime
()À» È£ÃâÇÕ´Ï´Ù. »ç½Ç ÀÌ ÀÛ¾÷Àº ¸¹Àº ÀÚ¿øÀ» ¼Òºñ ÇÏ´Â ÀÛ¾÷ÀÔ´Ï´Ù. MySQLÀÌ °¢ Äõ¸®¸¦ ¼öÇàÇÒ¶§ time
(2) ½Ã½ºÅÛÄÝÀ» ½ÃÀÛ, Á¾·á½Ã¿¡ ¼öÇàÇÔÀ¸·Î½á Äõ¸®°¡ ¾ó¸¶¸¸ÅÀÇ ½Ã°£ÀÌ °É·È´ÂÁö ÃøÁ¤ÇÕ´Ï´Ù. ¸î¸î ¿öÅ©·Îµå»ó¿¡¼ MySQLÀº ½Ã½ºÅÛ Å¸ÀÓÀÇ 30% ÀÌ»óÀ» ÀÌ time
(2) ½Ã½ºÅÛ ÄÝ¿¡ ³¶ºñÇÕ´Ï´Ù. ´ÙÀ½ÀÇ °á°ú¸¦ Âü°í ¹Ù¶ø´Ï´Ù:
# truss -c -p 385
syscall seconds calls errors
read 28.286 450958 3248
write 19.516 231648
open .000 2
close .000 2
time 45.247 848307
lseek .329 6878 6800
alarm .140 2218
fdsync 1.140 5520
fcntl .364 6510
lwp_park 12.288 187383
lwp_unpark 11.134 187381
poll 4.535 67263
sigprocmask 2.072 36030
sigtimedwait .381 2506
yield .741 9829
lwp_kill .201 2512
pread .000 2
pwrite 1.040 5527
-------- ------ ----
sys totals: 127.447 2051007 10048
usr time: 101.288
elapsed: 123.750
|
¼Ö¶ó¸®½º Ç÷§Æû¿¡¼´Â time
(2) ½Ã½ºÅÛ ÄÝÀ» ÃÖÀûÈ ÇØ¼ Ä¿³Î¿¡ gethrestime
() À» È£ÃâÇÏ´Â ´ë½Å Á» ´õ ºü¸¥ gethrtime
(3C) ½Ã½ºÅÛÄÝÀ» ±¸Çö ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸¸¾à »ç¿ëÀÚÀÇ ¿öÅ©·Îµå°¡ time
(2) ½Ã½ºÅÛ ÄÝ¿¡ ½Ã½ºÅÛ CPU ÀÚ¿øÀÇ ¸¹Àº ºÎºÐÀ» ¼ÒºñÇÑ´Ù¸é (truss
Ãâ·ÂÀ» ÅëÇØ È®ÀÎ ÇÒ ¼ö ÀÖÀ½), MySQL DB¸¦ A Performance Optimization for C/C++ Systems That Employ Time-Stamping ¿¡ ±â¼úµÈ ÃÖÀûÈ µÈ ½Ã°£ ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇØ ¸µÅ© Çϴ°ÍÀÌ ÈξÀ ÁÁÀº ¼±ÅÃÀÔ´Ï´Ù. Ãß°¡ÀûÀ¸·Î gethrtime
(3C) À» ±¸ÇöÇϱâ À§ÇØ MySQL ¼Ò½ºÆ®¸® Ȩ¿¡ ÀÖ´Â configure
ÆÄÀÏ¿¡ -lfasttime
¸¦ Ãß°¡½ÃÄÑ ÁÝ´Ï´Ù. ¿ì¸®´Â OSDL Database Test 2 (DBT2) ¿öÅ©·Îµå Å×½ºÆ®¸¦ ¼öÇà ½ÃÄ×°í ÃÖÀûÈµÈ time
(2) ¸¦ ÅëÇØ¼ 8-way ¿ïÆ®¶óSPARC ½Ã½ºÅÛ¿¡¼ ¾à 7% Á¤µµÀÇ ¼º´É Çâ»óÀ» ¾òÀ» ¼ö ÀÖ¾ú½À´Ï´Ù.
MySQL¿¡¼ ¼Ö¶ó¸®½º mtmalloc
¸Þ¸ð¸® ÇÒ´çÀÚ »ç¿ëÇϱâ
¼Ö¶ó¸®½º malloc
·çƾÀº ¸Þ¸ð¸® Dz ÇÁ¸°Æ® Ãø¸é¿¡¼ ¸Å¿ì Àß µ¿ÀÛÇÕ´Ï´Ù; ¾î·µç libc
¿¡ ÀÖ´Â ½Ì±Û-¾²·¹µå malloc
Àº Å¥¿¡ ÀÖ´Â ¸Þ¸ð¸® ÇÒ´ç ¿ä±¸¸¦ Çϳª¾¿ ´Ü°èÀûÀ¸·Î ó¸® ÇÔÀ¸·Î½á ¸ÖƼ¾²·¹µå ¾îÇø®ÄÉÀ̼ǿ¡¼ ¼º´ÉÀÇ ÀúÇϸ¦ °¡Á® ¿É´Ï´Ù. ¼Ö¶ó¸®½º´Â ¸ÖƼ¾²·¹µå ¾îÇø®ÄÉÀ̼ǿ¡¼ ¸Þ¸ð¸® ÇÒ´çÀ» Çâ»ó ½Ãų ¼ö ÀÖµµ·Ï mtmalloc
, libumem
, ±×¸®°í hoard
°°Àº malloc
¹æ¹ýÀ» ±¸ÇöÇϰí ÀÖ½À´Ï´Ù. ¸Þ¸ð¸® ÇÒ´ç ÆÐÅÏÀÌ °¢°¢ ´Ù¸¥ ¾îÇø®ÄÉÀ̼ǿ¡¼´Â ¾î¶² malloc
±¸ÇöÀÌ °¡Àå ÃÖÀûÀÇ °ÍÀÎÁö ¾Ë¾Æ³»±â Èûµì´Ï´Ù.
MySQL Àº °©ÀÛ½º·± ´ë¿ë·®ÀÇ ½ºÆ®¸µÀ» ´Éµ¿ÀûÀ¸·Î ó¸®Çϱâ À§ÇØ malloc
() °ú free
() ¸¦ »ç¿ëÇÕ´Ï´Ù. malloc
È£ÃâÀº HEAP °æÀïÀ» ¹æÁö Çϱâ À§ÇØ mysqld
À» ºí·° ½Ãŵ´Ï´Ù. ´Ù¸¥ ¸Þ¸ð¸® ÇÒ´çÀÚÀÇ ¼º´ÉÀ» °Ë»ç ÇßÀ»¶§ Áï malloc
À» mtmalloc
À¸·Î ¹Ù²ÞÀ¸·Î½á Å« MySQL DB ÆÛÆ÷¸Õ½º¸¦ ¾òÀ» ¼ö ÀÖ¾ú½À´Ï´Ù. ¿ì¸®´Â SysBecnh CPU º¥Ä¡¸¶Å© Å×½ºÆ®¸¦ ¼öÇàÇßÀ»¶§ ¾à 65%ÀÇ ¼º´ÉÇâ»óÀ» ¾ò¾úÀ½À» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¿ì¸®´Â 8-way µà¾ó-ÄÚ¾î ¿ïÆ®¶óSPARC IV ÇÁ·Î¼¼¼ ±â¹ÝÀÇ ½Ã½ºÅÛ¿¡¼ MySQL 5.0.7À» ÀÌ¿ëÇÏ¿© ÀÌ·¯ÇÑ °á°ú¸¦ µµÃâÇØ ³Â½À´Ï´Ù.
mtmalloc
À» »ç¿ëÇϱâ À§ÇØ ¼Ö¶ó¸®½º Ç÷§Æû¿¡ MySQL ½ÃÀÛ ½ºÅ©¸³Æ®¿¡ LD_PRELOAD
¶Ç´Â LD_PRELOAD_64
ȯ°æ º¯¼ö¸¦ ¼³Á¤ÇÔÀ¸·Î½á mtmalloc
¶óÀ̺귯¸®¸¦ ¹Ì¸® ·Îµù ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·³À¸·Î½á MySQL DB¸¦ Àçºôµå ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù.
¸¸¾à 32ºñÆ® MySQLÀ̶ó¸é, LD_PRELOAD
¸¦ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ¼¼ÆÃÇÏ¿© mtmalloc
À» ¹Ì¸® ·Îµå ½Ãŵ´Ï´Ù:
LD_PRELOAD=/usr/lib/libmtmalloc.so (x86)
LD_PRELOAD=/usr/lib/libmtmalloc.so(sparc)
|
¸¸¾à 64ºñÆ® MySQLÀ̶ó¸é, LD_PRELOAD_64
¸¦ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ¼ÂÆÃÇÕ´Ï´Ù:
LD_PRELOAD_64=/usr/lib/amd64/libmtmalloc.so(x64)
LD_PRELOAD_64=/usr/lib/sparcv9/libmtmalloc.so(64-bit sparc)
|
¼Ö¶ó¸®½º¿¡¼ 64ºñÆ® MySQL »ç¿ëÇϱâ
¼Ö¶ó¸®½º´Â 32ºñÆ® ¾îÇø®ÄÉÀ̼ǰú ¿Ïº® ȣȯµÇ´Â 64ºñÆ® ÄÄÇ»ÆÃ ȯ°æÀ» Á¦°øÇÕ´Ï´Ù. ±×·¯¹Ç·Î 32ºñÆ®, 64ºñÆ®ÀÇ MySQL ¸ðµÎ ¼Ö¶ó¸®½º »ó¿¡¼ Àß µ¿ÀÛÇÕ´Ï´Ù. 32ºñÆ® MySQL°ú ºñ±³ÇÏ¿© 64ºñÆ® MySQLÀº µ¥ÀÌŸ ij½¬, ÄÚµå ij½¬, ¸ÞŸ µ¥ÀÌŸ ij½¬¸¦ À§ÇØ Á» ´õ ¸¹Àº ¸Þ¸ð¸®¸¦ »ç¿ëÇÔÀ¸·Î½á µð½ºÅ© I/O ÀÛ¾÷À» ÁÙ¿© ÁÝ´Ï´Ù. Ãß°¡ÀûÀ¸·Î 64ºñÆ® ÄÄÇ»ÆÃ ȯ°æÀÇ È®ÀåµÈ CPU µ¿ÀÛÀ» ÅëÇØ¼ 64ºñÆ® MySQLÀº 32ºñÆ®ÀÇ MySQLº¸´Ù ºü¸£°Ô µ¿ÀÛÇÕ´Ï´Ù. ´ÙÀ½ÀÇ Ç¥´Â 8-way ¿ïÆ®¶óSPARC IV ±â¹Ý ¼¹ö¿¡¼ SysBench ÀÇ CPU-¹Ù¿îµå Å×½ºÆ® °á°ú¸¦ º¸¿©ÁÝ´Ï´Ù.
 |
Ç¥ 3: MySQL 4.1.11 CPU-¹Ù¿îµå SysBench Å×½ºÆ® |
½ã ½ºÆ©µð¿À 11À» ÀÌ¿ëÇÏ¿© MySQL ºôµùÇϱâ
½ã ½ºÆ©µð¿À 11À» ÀÌ¿ëÇÏ¿© ¼Ö¶ó¸®½º Ç÷§Æû »óÀÇ 64ºñÆ® MySQLÀ» ºôµåÇϱâ À§ÇØ ´ÙÀ½°ú °°Àº ÄÄÆÄÀÏ·¯ Ç÷¡±×¿Í ¿É¼ÇÀ» »ç¿ëÇÕ´Ï´Ù:
¼Ö¶ó¸®½º x64 Ç÷§Æû¿¡¼:
CC=cc CFLAGS="-xO3 -mt -fsimple=1 -ftrap=%none -nofstore
-xbuiltin=%all -xlibmil -xlibmopt -xtarget=opteron
-xarch=amd64 -xregs=no%frameptr"
CXX=CC CXXFLAGS="-xO3 -mt -fsimple=1 -ftrap=%none -nofstore
-xbuiltin=%all -xlibmil -xlibmopt -xtarget=opteron
-xarch=amd64 -xregs=no%frameptr"
LDFLAGS="-xtarget=opteron -xarch=amd64"
./configure --prefix=/usr/local/mysql
--localstatedir=/usr/local/mysql/data
--libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex
--with-server-suffix=-standard --enable-thread-safe-client
--enable-local-infile --with-named-curses=-lcurses
--with-big-tables --disable-shared --with-readline
--with-archive-storage-engine --with-innodb
|
SPARC Ç÷§Æû¿ë ¼Ö¶ó¸®½º¿¡¼:
CC=cc CFLAGS="-mt -fsimple=1 -ftrap=%none
-xbuiltin=%all -xlibmil -xlibmopt -xstrconst -xarch=v9"
CXX=CC CXXFLAGS="-noex -mt -fsimple=1
-ftrap=%none -xbuiltin=%all -xlibmil -xlibmopt
-xarch=v9"
./configure --prefix=/usr/local/mysql
--localstatedir=/usr/local/mysql/data
--libexecdir=/usr/local/mysql/bin
--with-extra-charsets=complex
--with-server-suffix=-standard
--enable-thread-safe-client --enable-local-infile
--with-named-z-libs=no --with-big-tables
--disable-shared --with-readline
--with-archive-storage-engine --with-innodb
|
¼·Î ´Ù¸¥ ÄÄÆÄÀÏ·¯ ¹öÁ¯(½ã ½ºÆ©µð¿À 10 °ú 11)¿¡¼ ºôµå µÈ MySQLÀÇ ¼º´ÉÀ» ºñ±³Çϱâ À§Çؼ ¿ì¸®´Â DBT2 Å×½ºÆ® ½ºÀ§Æ®¸¦ »ç¿ëÇß½À´Ï´Ù. ÀÌ ¿öÅ©·Îµå´Â µµ¸Å»óÀÌ ¼·Î ´Ù¸¥ ¼Ò¸Å»óµé°ú ±×¿¡ °ü·ÃµÈ »óÁ¡¿¡¼ÀÇ ÁÖ¹®À» ó¸®Çϴ°ÍÀ» ³ªÅ¸ ³À´Ï´Ù. ÀÌ Å½ºÅ©´Â Àбâ-Àü¿ë, ¾÷µ¥ÀÌÆ® À§ÁÖÀÇ Æ®·£Á§¼ÇÀÌ È¥ÇÕµÇÀÖ´Â ¹è´Þ ÁÖ¹®, °áÁ¦»çÇ× ±â·Ï, ÁÖ¹®»óÅ üũ, ±×¸®°í ¼Ò¸Å»óÀÇ Àç°í·®µîÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù. 9°¡Áö Å×ÀÌºí¿¡ °¢°¢ ¼Ò¸Å»ó, À§Ä¡, ¾ÆÀÌÅÛ, Àç°í·®, °í°´, ÁÖ¹®, »õ·Î¿î ÁÖ¹®, ÁÖ¹®-¶óÀΰú °ú°Å ±â·ÏµéÀÌ Æ÷ÇԵǾî ÀÖ°í ¼Ò¸Å»óÀÇ ¼ýÀÚ¿¡ µû¶ó È®ÀåµÇµµ·Ï µÇ¾î ÀÖ½À´Ï´Ù. (¾ÆÀÌÅÛ Å×À̺í Á¦¿Ü).
¿ì¸®´Â 10°³ÀÇ ¼Ò¸Å»ó µ¥ÀÌŸ º£À̽º¸¦ ¼Ö¶ó¸®½º10¿¡ 4°³ÀÇ µà¾óÄÚ¾î 2200-MHZ AMD ¿ÉÅ×·Ð ±â¹ÝÀÇ ½ã Fire 40z ¼¹ö¸¦ ÀÌ¿ëÇÏ¿© DBT2 Å×½ºÆ®¸¦ ¼öÇàÇÏ¿´½À´Ï´Ù. ÀÌ Å×½ºÆ®¿¡¼ ´ëºÎºÐÀÇ µ¥ÀÌŸ º£À̽º Äõ¸®µéÀºinnodb
¹öÆÛ¿¡ ij½¬ µË´Ï´Ù. ´ëºÎºÐÀÇ CPU ŸÀÓÀº Äõ¸®¸¦ ó¸®Çϴµ¥ »ç¿ë µÇ¾úÀ½À¸·Î ÀÌ Å×½ºÆ®¿¡¼ ½Ã½ºÅÛÀº CPU ¹Ù¿îµå ÀÛ¾÷À» Çß´Ù°í º¼ ¼ö ÀÖ½À´Ï´Ù. Å×½ºÆ® Ç׸ñÀº 󸮷®À¸·Î½á ºÐ´ç »õ·Î¿î ÁÖ¹® Æ®·£Á§¼ÇÀ» ÀÇ¹Ì ÇÕ´Ï´Ù. ´ÙÀ½ Ç¥ÀÇ °á°ú µ¥ÀÌŸ ´ë·Î MySQLÀº ½ã ½ºÆ©µð¿À 11À» ÀÌ¿ëÇÏ¿© ºôµå µÊÀ¸·Î½á ½ã ½ºÆ©µð¿À 10À¸·Î ºôµåµÈ MySQL¿¡ ºñÇØ 13%ÀÇ ¼º´É Çâ»óÀÌ ÀÖ¾ú½À´Ï´Ù. (ÁÖÀÇ: °á°ú´Â ´Ù¾çÇØ Áú ¼ö ÀÖÀ½.)
 |
Ç¥ 4: ¼Ö¶ó¸®½º 10¿¡¼ MySQL 5.0.15 DBT2 Å×½ºÆ® |
½ã ½ºÆ©µð¿À 10 ´ë½Å ½ã ½ºÆ©µð¿À 11·Î ºôµåÇÑ MySQL µ¥ÀÌŸº£À̽ºÀÇ ¼º´ÉÇâ»ó¿¡ µ¡ºÙ¿©¼ ½ã ½ºÆ©µð¿À 11Àº ¿ïÆ®¶óSPARC ±â¹Ý ½Ã½ºÅÛ¿¡¼ ¸ÖƼÄÚ¾î ±×¸®°í Ĩ ¸ÖƼ¾²·¹µù(CMT) ÃÖÀûȸ¦ Á¦°øÇÕ´Ï´Ù. ½ã ½ºÆ©µð¿À 11Àº ¶ÇÇÑ Çâ»óµÈ ±×·¡ÇÈ ±â¹Ý µð¹ö°Å ÅøÀ» Á¦°øÇÔÀ¸·Î½á ¼Õ½±°Ô ºê·¹ÀÌÅ© Æ÷ÀÎÆ®¸¦ ÁöÁ¤ÇÏ°í º¯¼ö °ªÀ» °Ë»çÇϰí ÄÝ ½ºÅÃÀ» Á¶È¸Çϰí MySQL ³»ÀÇ ¸ÖƼ¾²·¹µå ÄÚµåµéÀ» µð¹ö±× ÇÒ ¼ö ÀÖ½À´Ï´Ù. ½ã ½ºÆ©µð¿À 11ÀÇ Çâ»óµÈ ÆÛÆ÷¸Õ½º ºÐ¼® ÅøÀº ¿ïÆ®¶óSPARC ±â¹Ý ½Ã½ºÅÛ¿¡¼ ¾îÇø®ÄÉÀ̼ÇÀÇ ¸Þ¸ð¸® ÂüÁ¶¿Í °ü·ÃµÈ ÆÛÆ÷¸Õ½º ºñ¿ëÀ» ÇÁ·ÎÆÄÀϸµ ÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. ½ã ½ºÆ©µð¿À 11¿¡ Ãß°¡µÈ »õ·Î¿î µð¹ö°Å, ÆÛÆ÷¸Õ½º ºÐ¼®±â¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »çÇ×Àº ´ÙÀ½ÀÇ À¯Àú °¡À̵带 ÅëÇØ ¾òÀ¸ ½Ç ¼ö ÀÖ½À´Ï´Ù.
ÆÄÀÏ ½Ã½ºÅÛ ÆÛÆ÷¸Õ½º ÃÖÀûÈ Çϱâ
ÆÄÀÏ ½Ã½ºÅÛ Å¬·¯½ºÅÍ »çÀÌÁî´Â ½Ã½ºÅÛ ÆÛÆ÷¸Õ½º¿¡ Å« ÀÓÆÑÆ®°¡ µÉ ¼ö ÀÖ½À´Ï´Ù. -- Ưº°È÷ MySQLÀÌ ½Ã½ºÅÛÀÇ ¸Þ¸ð¸®º¸´Ù Å« ¿öÅ©·Îµå¸¦ µ¥ÀÌŸ º£À̽º»ó¿¡¼ ¼öÇàÇϰí ÀÖÀ»¶§. ¼Ö¶ó¸®½º Ç÷§Æû¿¡¼ UFS ÆÄÀÏ ½Ã½ºÅÛ Å¬·¯½ºÅÍ »çÀÌÁî (the maxcontig
ÆÄ¶ó¹ÌÅÍ) ´Â ±âº»ÀûÀ¸·Î 128·Î ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. SPARC Ç÷§Æû»ó¿¡¼ ÆÄÀÏ ½Ã½ºÅÛÀÇ ºí·°»çÀÌÁî´Â 8 Kbytes À̰í x86/x64 Ç÷§ÆûÀÇ ¼Ö¶ó¸®½ºÀÇ ºí·° »çÀÌÁî´Â 4 KbytesÀÔ´Ï´Ù. À̰ÍÀº Àüü ÆÄÀÏ ½Ã½ºÅÛÀ» Ŭ·¯½ºÅÍÀÇ ±æÀÌ ¸¸Å ¹Ì¸® ÀÐ¾î µéÀ̰í (128*8 Kbytes ¶Ç´Â 128*4 Kbytes), ·£´ý I/OÀÇ °æ¿ì¿¡¼µµ ¶È°°ÀÌ µ¿ÀÛÇÔÀ¸·Î½á µð½ºÅ©ÀÇ ÆÛÆ÷¸Õ½º¸¦ Çö°ÝÇÏ°Ô ÀúÇϽÃŵ´Ï´Ù.
ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¹æ¹ýÀº maxcontig
ÆÄ¶ó¹ÌÅÍÀÇ °ªÀ» ÁÙÀÓÀ¸·Î½á µð½ºÅ© I/O Àü¼Û »çÀÌÁ DBÀÇ ºí·° »çÀÌÁî¿Í ÀÏÄ¡ ½ÃŰ´Â °ÍÀÔ´Ï´Ù. maxcontig
°ªÀº tunefs -a
maxcontig#
Ä¿¸Çµå¸¦ ÀÌ¿ëÇØ¼ Á¶Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¹æ¹ýÀÇ ´ÜÁ¡Àº Ŭ¶óÀÌ¾ðÆ®·Î ºÎÅÍÀÇ ´ë¿ë·® ¼øÂ÷Àû I/O ¿öÅ©·ÎµåÀÇ ¼º´É¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù.
¶Ç ´Ù¸¥ ¼Ö·ç¼ÇÀ¸·Î´Â ÆÄÀϽýºÅÛÀ» --forcedirectio
¿É¼ÇÀ¸·Î ¸¶¿îÆ® ÇÔÀ¸·Î½á ÆÄÀϽýºÅÛ Direct I/O¸¦ Ȱ¼ºÈ ½ÃŰ´Â °ÍÀÔ´Ï´Ù. ±×·³À¸·Î½á Direct I/O´Â ÀÚµ¿ÀûÀ¸·Î ¹Ì¸® Àб⸦ ºñȰ¼ºÈ ½Ãŵ´Ï´Ù. Ãß°¡ÀûÀ¸·Î MySQLÀº °íÀ¯ÀÇ µ¥ÀÌŸ¿Í ij½¬ ¹öÆÛ¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î Direct I/O¸¦ »ç¿ëÇÔÀ¸·Î½á ÀÌÁßÀ¸·Î ¹öÆÛ¸µÀ» Çϴµ¥ »ç¿ëµÇ´Â CPU »çÀÌŬÀ» ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ÀÇ Ç¥´Â ½ã Fire V65x ¼¹ö¿¡¼ÀÇ SysBench I/O ¹Ù¿îµå Å×½ºÆ® °á°ú ÀÔ´Ï´Ù. (100M-¿ µ¥ÀÌŸ´Â InnoDB µ¥ÀÌŸ¿Í À妽º ij½¬¿¡ µé¾î °¥ ¼ö ¾ø½À´Ï´Ù). ÀÌ Å×½ºÆ®´Â ±âº» maxcontig
ÆÄ¶ó¹ÌÅÍ °ªÀ» »ç¿ëÇßÀ»¶§¿Í maxcontig
¸¦ 5·Î ¼ÂÆÃÇßÀ»¶§(µð½ºÅ© Æ®·£½ºÆÛ »çÀÌÁî´Â 5*4 Kbytes), ±×¸®°í Direct I/O¸¦ »ç¿ëÇßÀ»¶§ÀÇ ÆÛÆ÷¸Õ½º Â÷À̸¦ º¸¿©ÁÝ´Ï´Ù. (ÁÖÀÇ: °á°ú´Â ´Ù¾çÇØ Áú ¼ö ÀÖÀ½.)
 |
Ç¥ 5: MySQL 4.1.11 I/O-¹Ù¿îµå SysBench Å×½ºÆ® |
InnoDB µ¥ÀÌŸ ±×¸®°í À妽º Äɽ¬ »çÀÌÁî
MySQL Àº µð½ºÅ©¸¦ Á÷Á¢ÀûÀ¸·Î ¿¢¼¼½º ÇÏÁö ¾Ê½À´Ï´Ù; ´ë½Å µ¥ÀÌŸ¸¦ ³»ºÎ ¹öÆÛ ij½¬·Î ÀÐ¾î µéÀÌ°í ºí·°À» ÀÐ°í ¾²°í º¯°æ »çÇ×À» µð½ºÅ©¿¡ ±â·ÏÇÕ´Ï´Ù. ¸¸¾à ¼¹ö°¡ ij½¬³»ÀÇ µ¥ÀÌŸ¸¦ ¿ä±¸ ÇÑ´Ù¸é µ¥ÀÌŸ´Â ¹Ù·Î ó¸® µÉ °ÍÀÔ´Ï´Ù. ±×·¸Áö ¾Ê´Ù¸é ¿î¿µÃ¼Á¦´Â µ¥ÀÌŸ¸¦ µð½ºÅ©¿¡¼ ÀÐ¾î µéÀ̵µ·Ï ¿ä±¸ÇÒ °ÍÀÔ´Ï´Ù. Å« »çÀÌÁîÀÇ Ä³½¬ »çÀÌÁî´Â µð½ºÅ© ¾×¼¼½º Ƚ¼ö¸¦ ÁÙ¿© ÁÙ °ÍÀÔ´Ï´Ù. ±âº» °ªÀÎ 8 Mbytes ´Â ´ëºÎºÐÀÇ ¿öÅ©·Îµå¿¡¼ ³Ê¹« ÀÛ½À´Ï´Ù. °³¹ßÀÚ´Â iostat -xnt 5
ÀÇ Ãâ·Â¿¡¼ %b
(µð½ºÅ©ÀÇ È°¿ëÀ²)ÀÌ 60 ÆÛ¼¾Æ®°¡ ³Ñ¾î °¥¶§ ȤÀº, svc_t
(ÀÀ´ä ½Ã°£) ÀÌ 35msecÀÌ ³Ñ¾î °¥¶§ °ªÀ» Áõ°¡½Ãų°ÍÀ» ±ÇÀåÇÕ´Ï´Ù. ±×¸®°í show innodb status
Ãâ·ÂÀÇ FILE IO
ÆÄÆ®¿¡¼ ¸¹Àº ¾çÀÇ Àбâ ÀÛ¾÷ÀÌ ³ªÅ¸³²À» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Áß¿äÇÑ Á¡Àº ÃæºÐÇÑ RAM ¿ë·®ÀÌ ¾øÀÌ ¼öÇàµÇ´Â ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ºñ¿ëÀÌ ¸¹ÀÌ µå´Â ÆäÀÌ¡À» ¼öÇà ÇÏÁö ¾Êµµ·Ï innodb_buffer_pool_size
ÆÄ¶ó¹ÌÅÍ °ªÀ» ³Ê¹« ³ô°Ô ÀâÁö ¾Ê´Â °ÍÀÔ´Ï´Ù. ´ÜÀÏ MySQL ÇÁ·Î¼¼½º ȯ°æ¿¡¼´Â MySQL ÇÁ·Î·¹½º°¡ 2~3MbytesÀÇ ¿ë·®¸¸ Â÷ÁöÇÑ´Ù°í ÇßÀ»¶§ innodb_buffer_pool_size
ÆÄ¶ó¹ÌÅ͸¦ ¸Þ¸ð¸®ÀÇ 70~80%Á¤µµ·Î ³ô¿© ÁÖ´Â °Íµµ °¡´ÉÇÕ´Ï´Ù.
Æ®·£Á§¼Ç ·Î±× Flush ¸ðµå
InnoDB ´Â ¹é±×¶ó¿îµå¿¡¼ ¾à 1ÃÊ¿¡ Çѹø¾¿ ·Î±×¸¦ µð½ºÅ©·Î ±â·ÏÇÕ´Ï´Ù. ±âº»ÀûÀ¸·Î ·Î±×´Â °¢°¢ÀÇ Æ®·£Àè¼ÇÀÌ Ä¿¹Ô µÉ¶§ ¸¶´Ù ÀÏ¾î ³³´Ï´Ù. °©ÀÛ ½º·± MySQL, OS, ȤÀº Çϵå¿þ¾îÀÇ ¿À·ù »óȲ¿¡¼ Æ®·£Á§¼ÇÀ» ¾ÈÀüÇÏ°Ô ¼öÇà ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº innodb_flush_log_at_trx_commit = 1
¸ðµå¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.
¸¹Àº ÀÛÀº ¿ë·®ÀÇ Æ®·£Á§¼ÇÀ¸·Î ÀÌ·ç¾îÁø ¿öÅ©·Îµå¿¡¼ innodb_flush_log_at_trx_commit
ÆÄ¶ó¹ÌÅ͸¦ ´Ù¸¥ °ªÀ¸·Î ¼³Á¤ÇÔÀ¸·Î½á µð½ºÅ© ¾²±â ÀÛ¾÷À» ÁÙ¿©ÁÙ ¼ö ÀÖ½À´Ï´Ù.
¸¸¾à ÀÌ °ªÀ» 0À¸·Î ¼³Á¤ÇÑ´Ù¸é °¢°¢ÀÇ Æ®·»Àè¼Çº¸´Ù ·Î±×¸¦ ±â·ÏÇÏÁö ¾ÊÀ» °ÍÀÌ°í µð½ºÅ© I/OÀÇ ÆÛÆ÷¸Õ½º¸¦ Çâ»ó½ÃÄÑ ÁÙ °ÍÀÔ´Ï´Ù. ±×·¯³ª ¸¸¾à MySQL¿¡ °©ÀÛ½º·´°Ô ¿À·ù°¡ »ý±ä´Ù¸é ¸ðµç Æ®·£Àè¼ÇÀº ³¯¾Æ°¡ ¹ö¸± °ÍÀÔ´Ï´Ù.
¸¸¾à ÀÌ °ªÀ» 2À¸·Î ¼³Á¤ÇÑ´Ù¸é ·Î±×¸¦ µð½ºÅ©¿¡ ±â·ÏÇÏ´Â ´ë½Å OS ij½¬(ÆÄÀÏ ½Ã½ºÅÛ Ä³½¬)¿¡ ±â·ÏÇÕ´Ï´Ù. ÀÌ ¹æ¹ýÀ» ÅëÇØ µð½ºÅ© I/O¸¦ ÁÙ¿© ÁÖÁö¸¸ 0À¸·Î ¼³Á¤ÇßÀ» ¶§º¸´Ù ¾à°£ÀÇ ÆÛÆ÷¸Õ½º ÀúÇϰ¡ ÀÖ½À´Ï´Ù;´ë½Å Æ®·»Á§¼ÇÀÇ ¼Õ½ÇÀÌ ÀÌ·ç¾îÁöÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. (ºñ·Ï OS³ª Çϵå¿þ¾îÀÇ ¹®Á¦·Î ¼Õ½ÇÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´õ¶óµµ).
·Î±× ¹öÆÛ »çÀÌÁî
´ë¿ë·®ÀÇ Æ®·£Á§¼Ç¿¡¼ ·Î±× ¹öÆÛ°¡ °¢°¢ÀÇ Æ®·£Á§¼Ç Ä¿¹Ô¸¶´Ù ±â·Ï µÇ±â Àü¿¡ innodb_flush_log_at_trx_commit
À» 1·Î ¼³Á¤Çß´Ù¸é ·Î±×´Â µð½ºÅ©ÀÇ I/O¸¦ ÁÙ¿© ÁÖ±â À§ÇØ µð½ºÅ©¿¡ ·Î±×¸¦ ±â·Ï ÇÏ´Â ´ë½Å ·Î±× ¹öÆÛ¿¡ ±â·Ï µÇ°Ô µË´Ï´Ù. ¸¸¾à ¼öÇàÁßÀÎ »óÅ¿¡¼ show innodb status
Ãâ·Â¿¡¼ ´ë¿ë·®ÀÇ I/O ÀÛ¾÷À» È®ÀÎ Çß´Ù¸é innodb_log_buffer_size
ÆÄ¶ó¹ÌÅ͸¦ Á» ´õ Å« °ªÀ¸·Î ¼³Á¤ÇÒ °ÍÀ» ¿ä±¸ÇÕ´Ï´Ù. ´ë¿ë·®ÀÇ Æ®·£Àè¼ÇÀÌ ¾ø´Â ´ëºÎºÐÀÇ ¿öÅ©·Îµå¿¡¼´Â ·Î±× ¹öÆÛÀÇ ¿ë·®À» ´Ã¸²À¸·Î½á ¾µ¶§ ¾ø´Â ¸Þ¸ð¸® ³¶ºñ¸¦ ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. º¸Åë 8~64 MbytesÀÇ ¿ë·®ÀÌ Àû´çÇÕ´Ï´Ù.
üũÆ÷ÀÎÆ® ÀÛ¾÷
InnoDB ¿¡ ÀÖ´Â º¹±¸ °ü¸® ¼ºê½Ã½ºÅÛÀº ¹é¾÷°ú º¹±¸¸¦ À§ÇØ µ¥ÀÌŸ º£À̽º ÆäÀÌÁö¿Í Æ®·£Àè¼ÇÀ» ·Î±× ÆÄÀÏ·Î ±â·ÏÇÕ´Ï´Ù. ÀÌ ½Ã½ºÅÛÀº Á¶±Ý º¹ÀâÇÑ ¹æ¹ýÀ¸·Î ±¸Çö µÇ¾î ÀÖ½À´Ï´Ù. °è¼ÓÀûÀ¸·Î ¼öÁ¤µÈ µ¥ÀÌŸ º£À̽º ÆäÀÌÁöµéÀ» ÀÛÀº ÀϰýÀÛ¾÷À» ÅëÇØ¼ ¹öÆÛ Ç®¿¡¼ ºÎÅÍ ²¨³»¿Í¼ ±â·ÏÇÕ´Ï´Ù. InnoDB´Â ¼øÈ¯ÀûÀ¸·Î ·Î±×ÆÄÀÏÀ» ±â·ÏÇϰí ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î ·Î±× ÆÄÀÏÀÌ innodb_log_file_size
ÆÄ¶ó¹ÌÅÍ¿¡ ±â·ÏµÈ Á¦ÇÑ Å©±â¿¡ µµ´ÞÇß´Ù¸é üũÆ÷ÀÎÆ® ÀÛ¾÷ÀÌ ¼öÇàµÇ¾î¼ Çѹø¿¡ ¼öÁ¤µÈ ¸ðµç µ¥ÀÌŸº£À̽º ÆäÀÌÁöµéÀ» ±â·ÏÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷À» ÅëÇØ¼ º¹±¸ ÀÛ¾÷½Ã¿¡ ¼öÁ¤µÈ ¸ðµç ÆäÀÌÁöµéÀÌ ·Î±×ÆÄÀÏ¿¡ ±â·ÏµÊÀ¸·Î½á ¿Ïº®ÇÏ°Ô º¹±¸ ÀÛ¾÷À» ÇÒ ¼ö ÀÖµµ·Ï º¸ÀåÇØ ÁÝ´Ï´Ù.
·Î±× ÆÄÀÏÀÇ »çÀÌÁî´Â ³Ê¹« ÀæÀº üũÆ÷ÀÎÆ® ÀÛ¾÷ÀÌ ÀÏ¾î ³ªÁö ¾Êµµ·Ï Àß °áÁ¤ µÇ¾î¾ß ÇÕ´Ï´Ù. Å« ·Î±× ÆÄÀÏ »çÀÌÁî´Â üũ Æ÷ÀÎÆ®½Ã¿¡ µð½ºÅ© I/O ÀÛ¾÷À» ÁÙ¿©ÁÙ °ÍÀÔ´Ï´Ù. show innodb status
Ãâ·ÂÀÇ BUFFER POOL AND MEMORY
ÆÄÆ®¿¡¼ ´ë¿ë·®ÀÇ ÆäÀÌÁö ¾²±â°¡ ÀÖÀ½À» È®ÀÎ Çß´Ù¸é Á» ´õ Å« °ªÀ¸·Î ¼³Á¤Çϱ⸦ ±ÇÀåÇÕ´Ï´Ù. ÀÌ °æ¿ì Å« ¿ë·®ÀÇ ·Î±× ÆÄÀÏÀº ½Ã½ºÅÛ º¹±¸½Ã ½Ã°£ÀÌ Á» ´õ °É¸³´Ï´Ù.
Äõ¸® ij½¬ »çÀÌÁî
µ¥ÀÌŸ, À妽º ¹öÆÛ ij½¬ ¿¡ µ¡ºÙ¿©¼ MySQL 4.0.1 ȤÀº ÀÌÈÄ ¹öÁ¯Àº Äõ¸® ij½¬¶ó°í ºÒ¸®´Â ¸ÚÁø ±â´ÉÀ» °¡Áö°í ÀÖ½À´Ï´Ù. Äõ¸® ij½¬¶õ Ŭ¶óÀÌ¾ðÆ®°¡ ¼¹ö¿¡°Ô ¿äûÇÑ SELECT Äõ¸® ¿Í µ¿ÀÏÇÑ Äõ¸®¸¦ ÀúÀåÇÏ´Â °ÍÀ» ÀÇ¹Ì ÇÕ´Ï´Ù. À̰ÍÀº ¹Ýº¹ÀûÀÌ°í ÆÄ½ÌÇϱâ Èûµç ÀϵéÀ» ¹Ýº¹ÇÏ´Â ÀÏÀÌ ¾øÀÌ ´Ù½Ã ¶È°°Àº Äõ¸®¸¦ ó¸® Çϴµ¥ Å©°Ô µµ¿òÀ» ÁÝ´Ï´Ù. MySQL Àº ¶ÇÇÑ Äõ¸® ij½¬¿¡ Äõ¸®ÀÇ °á°ú ¼ÂµéÀ» ÀúÀåÇÔÀ¸·Î½á µð½ºÅ© ȤÀº ¸Þ¸ð¸® ij½¬¿¡ ÀÇÇØ ¹ß»ýµÇ´Â º¹ÀâÇÑ Äõ¸®ÀÇ °á°ú ¼ÂÀ» ¸¸µå´Â ¿À¹öÇìµå¸¦ ÁÙ¿© ÁÝ´Ï´Ù. ¸î¸î ¾îÇø®ÄÉÀ̼ǵéÀº µ¿ÀÏÇÑ Äõ¸®¸¦ ¼öÇàÇÔÀ¸·Î Äõ¸® ij½Ã´Â ÀÀ´ä½Ã°£À» Å©°Ô ÁÙ¿© ÁÝ´Ï´Ù.
query_cache_size
ÆÄ¶ó¹ÌÅÍ´Â ÀÚÁÖ ¼öÇàµÇ´Â Äõ¸®µéÀÇ Ä³½¬¸¦ ¼öÇàÇÏ´Â ¸Þ¸ð¸®ÀÇ ¿ë·®À» °áÁ¤Çϴµ¥ »ç¿ëÇÕ´Ï´Ù. ±×·³À¸·Î½á ½ÇÁ¦ Äõ¸®¸¦ ¼öÇà ÇÏ´Â ´ë½Å °á°ú¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ Àü´ÞÇÕ´Ï´Ù. query_cache_type
ÆÄ¶ó¹ÌÅÍ´Â Äõ¸® ij½Ã¸¦ Ȱ¼ºÈ ȤÀº ºñȰ¼ºÈ Çϴµ¥ ÀÌ¿ë µË´Ï´Ù. ÀÌ µÎ°³ÀÇ ÆÄ¶ó¹ÌÅ͸¦ ¼³Á¤ÇÏ´Â °ÍÀ» °áÁ¤ÇÒ¶§¿¡´Â qcache_inserts
, qcache_hits
, ±×¸®°í qcache_free_memory
¸¦ ½ÇÇà½Ã¿¡ È®ÀÎ ÇÏ´Â °ÍÀÌ ÇÊ¿ä ÇÕ´Ï´Ù. qcache_inserts
´Â Äõ¸® Äɽ¬¿¡ ¸î°³ÀÇ Äõ¸®°¡ Ãß°¡ µÆ´ÂÁö ¾Ë·ÁÁÖ°í, qcache_hits
´Â ¸î°³ÀÇ Äõ¸®°¡ ½ÇÁ¦ Äõ¸® ¼öÇà ¾øÀÌ Äõ¸® ij½¬¿¡¼ °¡Á®¿Í Á³´ÂÁö ¾Ë·ÁÁÖ°í, qcache_free_memory
´Â Äõ¸® ij½¬°¡ »ç¿ëÇÏÁö ¾ÊÀº »ç¿ë °¡´ÉÇÑ ¿ë·®ÀÌ ¾ó¸¶Á¤µµÀÎÁö º¸¿©ÁÝ´Ï´Ù.
¸¸¾à ½ÇÇà½Ã ÃÑ Äõ¸®¼ö¿¡ ºñ±³Çؼ qcache_hits
ÀÇ °ªÀÌ ³ô´Ù¸é ȤÀº qcache_free_memory
ÀÇ °ªÀÌ ³·´Ù¸é query_cache_size
ÆÄ¶ó¹ÌÅÍ °ªÀ» ±×¿¡ ¸ÂÃç¼ Áõ°¡½ÃŰ´Â °ÍÀÌ ±ÇÀåµË´Ï´Ù. ±×·¸Áö ¾Ê´Ù¸é query_cache_size
ÆÄ¶ó¹ÌÅÍ °ªÀ» °¨¼Ò ½ÃÄѼ ´Ù¸¥ MySQL ij½¬ ¹öÆÛ¸¦ À§ÇØ ¸Þ¸ð¸®¸¦ Àý¾àÇÒ °ÍÀ» ±ÇÀåÇÕ´Ï´Ù. ¸¸¾à qcache_hit
°¡ ½ÇÇà½Ã¿¡ 0À̶ó¸é query_cache_type
À» 0À¸·Î ¼³Á¤ÇÏ°í µ¿½Ã¿¡ setting query_cache_size
¸¦ 0À¸·Î ¼³Á¤ÇÔÀ¸·Î½á Äõ¸® ij½¬¸¦ ºñȰ¼ºÈ ½ÃÄ×À» °ÍÀÔ´Ï´Ù.
query_cache_limit
ÆÄ¶ó¹ÌÅÍ´Â Äõ¸® ij½¬¿¡ ÀúÀåµÇ´Â ÃÖ´ë °á°ú ¼ÂÀÇ ¼ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ½ÇÇà½Ã¿¡ qcache_insert
¿¡ ºñÇØ ³·Àº ºñÀ²ÀÇ qcache_hits
´Â query_cache_limit
ÆÄ¶ó¹ÌÅͰªÀ» ³Ê¹« ³·°Ô ÀâÀ½À¸·Î½á ¹ß»ýÇÏ¿´À» °ÍÀÔ´Ï´Ù. ÀÌ °æ¿ì¿¡´Â query_cache_limit
ÆÄ¶ó¹ÌÅÍ °ªÀ» Áõ°¡ ½ÃÅ´À¸·Î½á Äõ¸® ij½¬¿¡ Á»´õ ¸¹Àº °á°ú ¼ÂÀ» ÀúÀåÇÒ °ÍÀ» ±ÇÀåÇÕ´Ï´Ù.
°á°ú
Ãß°¡ÀûÀÎ ÆÛÆ÷¸Õ½º Çâ»ó°ú È®À强Àº MySQL³»ÀÇ ½ºÅ丮Áö ¿£ÁøÀ» Æ©´×ÇÔÀ¸·Î½á ½ã ½Ã½ºÅÛ¿¡¼ µ¹¾Æ°¡´Â ƯÁ¤ÇÑ ¿öÅ©·Îµå¿¡ ´ëÇÑ Çâ»óÀ» À̲ø¾î ³¾ ¼ö ÀÖ½À´Ï´Ù. ÆÛÆ÷¸Õ½º¿¡ ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Â ¸¹Àº º¯¼öµé°ú °¢ ¿öÅ©·Îµåº°·Î ¸¹Àº Æ©´×ÀÌ °¡´ÉÇÑ ÆÄ¶ó¹ÌÅ͵éÀÌ Àֱ⠶§¹®¿¡ ÀÌ ¹®¼¿¡¼´Â °¡Àå ÀϹÝÀûÀÎ °¡ÀÌµå ¶óÀΰú ½Ç¿ëÀûÀÎ Á¶¾ðÀ» ÁÙ ¼ö ÀÖµµ·Ï ¾²¿© Á³½À´Ï´Ù. ÀÌ ¹®¼¿¡ ´ëÇÑ ¾î¶°ÇÑ Çǵå¹éÀ̳ª ½ã ½Ã½ºÅÛ¿¡¼ÀÇ MySQL ¼º´É Çâ»ó¿¡ °üÇÑ Àǰߵµ ȯ¿µÇÕ´Ï´Ù.
°ü·Ã ÀÚ·á
ÀúÀÚ¿¡ °üÇÏ¿©
Luojia Chen Àº ½ãÀÇ Market Development Engineering Á¶Á÷¿¡¼ ÀÏÇϰí ÀÖ°í ¿ÀÇ ¼Ò½º ÆÀ¿¡ ¼ÓÇØ ÀÖ½À´Ï´Ù. ±×³à´Â ÇöÀç ½ãÀÇ ÃÖ±Ù ±â¼ú¿¡ MySQLÀ» Á¢¸ñ½ÃŰ´Â ÀÏÀ» Çϰí ÀÖ½À´Ï´Ù. ±×³à´Â
luojia.chen@sun.com ·Î ¿¬¶ôÀÌ °¡´ÉÇÕ´Ï´Ù.