Badooã¯ã1å9åäžäººã®ãŠãŒã¶ãŒãæ±ãããæ°ãã人ãšåºäŒãäžçæ倧ã®ãœãŒã·ã£ã«ãããã¯ãŒã¯ã§ãã
ãã¹ãŠã®ããŒã¿ã¯ããšãŒããããšã¢ã¡ãªã«ã®2ã€ã®ããŒã¿ã»ã³ã¿ãŒã«ä¿åãããŸãã å°ãåã«ãã¢ãžã¢ã®ãŠãŒã¶ãŒããã®ã€ã³ã¿ãŒãããæ¥ç¶ã®å質ã調æ»ãã700äžäººã®ãŠãŒã¶ãŒã®å ŽåããšãŒãããã®ããŒã¿ã»ã³ã¿ãŒããã¢ã¡ãªã«ã®ããŒã¿ã»ã³ã¿ãŒã«ç§»åãããšããµã€ãã®èªã¿èŸŒã¿ã2åéããªãããšãããããŸããã åããŠãããŒã¿ã»ã³ã¿ãŒéã§ã®ãŠãŒã¶ãŒããŒã¿ã®å€§èŠæš¡ãªç§»è¡ãšãã課é¡ã«çŽé¢ããŸãããããããããŸã管çããŸããã1å¶æ¥æ¥ã§150äžäººã®ãŠãŒã¶ãŒã移åããæ¹æ³ãåŠã³ãŸããã åœå
šäœãåããããšãã§ããŸããïŒ æåã®éšåã§ã¯ãç§ãã¡ã®åã«èšå®ãããã¿ã¹ã¯ãšãéæããçµæã«ã€ããŠè©³ãã説æããŸãã
ã¢ãŒããã¯ãã£Badoo
Badooã®ã¢ãŒããã¯ãã£ã¯ãããŸããŸãªäŒè°ãHabréèªäœã§ãã話é¡ã«ãªã£ãŠããŸãããããã§ãã¿ã¹ã¯ãç解ããããã«éèŠãªäž»èŠãªãã€ã³ããç¹°ãè¿ããŸãã Badooã¯ãLinuxãnginxãPHP-FPMïŒBadooãéçºïŒãmemcachedãMySQLãªã©ã®æšæºæè¡ã¹ã¿ãã¯ã䜿çšããŠWebããŒãžãã¬ã³ããªã³ã°ããŸãã
ã»ãšãã©ãã¹ãŠã®ãŠãŒã¶ãŒããŒã¿ã¯ãæ°çŸã®MySQLãµãŒããŒã«é
眮ããããªãŒãœã©ã€ã¶ãŒãšåŒã°ãããèªå·±äœæããµãŒãã¹ã䜿çšããŠãããã«åæ£ïŒãå
±æãïŒãããŸãã ãŠãŒã¶ãŒIDãšãŠãŒã¶ãŒãé
眮ãããŠãããµãŒããŒã®IDã®å€§ããªå¯Ÿå¿è¡šãæ ŒçŽããŸãã ãŠãŒã¶ãŒããµãŒããŒéã§åæ£ããããã«ãåå²ã®æ®ãããªã©ã®æ¹æ³ã䜿çšããªããããããŒã¿ããŒã¹ãµãŒããŒéã§ãŠãŒã¶ãŒãç°¡åã«ç§»åã§ããŸããããã¯å
ã
Badooã¢ãŒããã¯ãã£ã«çµã¿èŸŒãŸããŠããŸããã
MySQLã«å ããŠãã»ãã·ã§ã³ããµã€ããžã®æåŸã®èšªåæ¥ãæ祚ãããŠãŒã¶ãŒã®åçãæ€çŽ¢ãããã¹ãŠã®ãŠãŒã¶ãŒã®åºæ¬ããŒã¿ãªã©ãããŸããŸãªããŒã¿ãä¿åããå€ãã®C / C ++ãµãŒãã¹ããããŸãã
ãããŒããã»ã¯ã·ã§ã³ã«å¯Ÿå¿ãããµãŒãã¹ããããŸãã ä»ã®åœãšã¯ç°ãªããåœããšã«1ã€ã®ã³ããŒãååšããŸãã RAMã倧éã«æ¶è²»ããããã384 GBãé
眮ããŠãããã¹ãŠã®ããŒã¿ã1ã€ã®ãµãŒããŒã«ç©ççã«åããããšãã§ããŸããã ããã«ã圌ã¯ãèªåã®ãããŒã¿ã»ã³ã¿ãŒã«ã®ã¿ãäœãã§ãããŸãã
ããã«ããã¹ãŠã®ãŠãŒã¶ãŒã«é¢ããäžè¬æ
å ±ãä¿åãããäžå€®ãã®MySQLããŒã¿ããŒã¹ãšããã¹ãŠã®BadooãŠãŒã¶ãŒã®æ
å ±ãäžåºŠã«ä¿åããåå¥ã®èª²éããŒã¿ããŒã¹ããããŸãã ããã«ãã¢ããããŒããããåçãšãããªçšã«åå¥ã®ãªããžããªãããããããã¯åå¥ã®èšäºã«ãªããŸãã ãã®ããŒã¿ã移åããå¿
èŠããããŸãã
åé¡ã®å£°æ
ã¿ã¹ã¯ã¯éåžžã«ç°¡åã«å®åŒåãããŸãã1å¶æ¥æ¥ã§å
šåœãããŠãŒã¶ãŒããŒã¿ã転éãã移è¡äžã«ãããã®ãŠãŒã¶ãŒããµã€ãã䜿çšã§ããããã«ããŸãã ã移è¡ãããåœã®äžã§æ倧ã®åœã¯ã¿ã€ã§ãçŽ150äžäººã®ç»é²ãŠãŒã¶ãŒãããŸãã ãã®æ°ã8åŽåæéïŒããã³æŒé£ïŒã«åå²ãããšãå¿
èŠãªç§»è¡çãåŸãããŸããããã¯1æéãããçŽ17äžãŠãŒã¶ãŒã§ãã
1å¶æ¥æ¥ã§åœã移åããããã®èŠä»¶ã¯ããã®æç¹ã§äœãèµ·ããããšããäºå®ã«ãã£ãŠæ±ºãŸããŸãã ããšãã°ãäžéšã®ãµãŒããŒãŸãã¯ãµãŒãã¹ãã暪ã«ãªã£ãããé
ããããããå¯èœæ§ããããŸãããã®åŸãäœæãããè² è·ãæžããããã«ã³ãŒãããã©ã€ããç·šéããå¿
èŠããããŸãã ãŸãã移è¡ã³ãŒãã«ãšã©ãŒãããããŠãŒã¶ãŒã®åé¡ã«ã€ãªããå¯èœæ§ããããŸãããããããã«ç¢ºèªããããã»ã¹ãäžæåæ¢ïŒãŸãã¯ããŒã«ããã¯ïŒããæ©äŒãããã¯ãã§ãã èŠããã«ããŠãŒã¶ãŒã転éããããã®ãã®ãããªå€§èŠæš¡ãªæäœã®å®è£
ã«ã¯ãäœãèµ·ãã£ãŠããããç£èŠããæäœäžã«å¿
èŠãªèª¿æŽãè¡ãããªãã¬ãŒã¿ãŒãã®ååšãå¿
ç¶çã«å¿
èŠã§ãã
æè¡çã«ã¯ããŠãŒã¶ãŒããšã«ããã®ãŠãŒã¶ãŒã«é¢ããããŒã¿ãé
眮ã§ãããã¹ãŠã®MySQLã€ã³ã¹ã¿ã³ã¹ã®ãã¹ãŠã®ããŒãã«ããéžæãè¡ããC / C ++ãµãŒãã¹ã«ä¿åãããŠããããŒã¿ã転éããå¿
èŠããããŸãã ããã«ããµãŒãã¹ã®1ã€ã«ã€ããŠã¯ãããŒã¢ã³èªäœã転éããå¿
èŠããããäž¡æ¹ã®ããŒã¿ã»ã³ã¿ãŒã§å®è¡äžã®ããŒã¢ã³ã€ã³ã¹ã¿ã³ã¹éã§ããŒã¿ã転éããå¿
èŠã¯ãããŸããã
ããŒã¿ã»ã³ã¿ãŒéã®ããŒã¿è»¢éã®é
延ã¯çŽ100ããªç§ãªã®ã§ãå€æ°ã®å°ããªãªã¯ãšã¹ãã§ã¯ãªãã¹ããªãŒã ã«ãã£ãŠããŒã¿ãããŠã³ããŒããããããã«æäœãæé©åããå¿
èŠããããŸãã 移è¡äžãåãŠãŒã¶ãŒã®ãµã€ããžã®ã¢ã¯ã»ã¹äžèœæéã¯æå°éã§ããå¿
èŠããããããããã»ã¹ã¯å€§ããªãã³ãã«ã§ã¯ãªããåãŠãŒã¶ãŒã«å¯ŸããŠåå¥ã«å®è¡ããå¿
èŠããããŸãã ç§ãã¡ã泚ç®ããæéã¯ãç¹å®ã®ãŠãŒã¶ãŒããµã€ãã«ã¢ã¯ã»ã¹ã§ããªãç¶æ
ã5å以å
ïŒ1ã2åãæãŸããïŒã§ããã
äœæ¥èšç»
1æéããã170,000人ã®ãŠãŒã¶ãŒã移è¡ããå¿
èŠããããåãŠãŒã¶ãŒã®ç§»è¡æéã¯çŽ2ã3åã§ãããšããäºå®ã«åºã¥ããŠããããã®æ¡ä»¶ãæºããããã«å¿
èŠãªäžŠåå®è¡ã¹ã¬ããæ°ãèšç®ããŸããã åã¹ã¬ããã¯1æéãããå¹³å25ãŠãŒã¶ãŒã転éã§ãããããã¹ã¬ããã®åèšæ°ã¯6,800ïŒã€ãŸã170,000 / 25ïŒã«ãªããŸããã å®éã2,000ã¹ã¬ããã®ã¿ã«éå®ããããšãã§ããŸããã ã»ãšãã©ã®å ŽåããŠãŒã¶ãŒã¯ããŸããŸãªã€ãã³ãïŒããšãã°ãããŒã¿ã»ã³ã¿ãŒéã®MySQLã¬ããªã±ãŒã·ã§ã³ïŒã®çºçãåã«ãæåŸ
ãããŸãã ãããã£ãŠãåã¹ã¬ããã¯3人ã®ãŠãŒã¶ãŒãåæã«åŠçãããã®ãã¡ã®1人ãäœãã®åŸ
æ©ç¶æ
ã«ãªã£ããšãã«åãæ¿ããŸããã
åãŠãŒã¶ãŒã®ç§»è¡ã¯ãå€ãã®é£ç¶ããã¹ãããã§æ§æãããŠããŸããã åã¹ãããã®å®è¡ã¯ãåã®ã¹ãããã®çµäºåŸã«å³å¯ã«éå§ãããæåŸã®ã¹ããããæ£åžžã«å®äºããããšãæ¡ä»¶ãšããŸããã
ãŸããåã¹ãããã¯å埩å¯èœã§ããããããã·ã¢èªã§è©±ããã¹ãçã§ããå¿
èŠããããŸãã ã€ãŸã åã¹ãããã®å®è¡ã¯ããŸããŸãªçç±ã§ãã€ã§ãäžæãããå¯èœæ§ãããã圌ã¯ã©ã®æäœãå®äºããå¿
èŠãããããå€æãããããã®æäœãæ£ããå®è¡ã§ããå¿
èŠããããŸãã
ããã¯ã移è¡ã®ã¯ã©ãã·ã¥ããå
éšãµãŒãã¹ãŸãã¯ããŒã¿ããŒã¹ãµãŒããŒã®äžæçãªé害ã®éã«ãŠãŒã¶ãŒæ
å ±ã倱ããªãããã«å¿
èŠã§ãã
ã¢ã¯ã·ã§ã³ã®æ§é ãšã·ãŒã±ã³ã¹
æºåæé çŸæç¹ã§ã¯ããŠãŒã¶ãŒãã移è¡äžããšããŠããŒã¯ããããã¯ã°ã©ãŠã³ãã¹ã¯ãªããïŒååšããå ŽåïŒã«ããåŠçã®çµäºãåŸ
ã¡ãŸãã ãã®æé ã«ã¯çŽ1åãããããã®éãå¥ã®ãŠãŒã¶ãŒãåãã¹ããªãŒã ã§ç§»è¡ã§ããŸãã
è«æ±ããŒã¿ã®ç§»è¡åœã®ç§»è¡äžã¯ã課éãå®å
šã«ãªãã«ããŸããããã®ãããç¹å¥ãªã¢ã¯ã·ã§ã³ãããã¯ã¯å¿
èŠãããŸããã§ãããããŒã¿ã¯äžå€®ã®MySQLããŒã¿ããŒã¹ããå¥ã®ããŒã¿ããŒã¹ã«åçŽã«è»¢éãããŸããã åã¹ã¬ãããããã®ããŒã¿ããŒã¹ãžã®MySQLæ¥ç¶ã確ç«ããããããè«æ±ããŒã¿ããŒã¹ãžã®æ¥ç¶ã®ç·æ°ã¯2,000ãè¶
ããŸããã
åçã®ç§»è¡ããã§ã¯ãåçãäºåã«å¥ã
ã«æ¯èŒçç°¡åã«è»¢éããæ¹æ³ãèŠã€ãããããå°ããã«ãŠã³ããããŸããã ãã®ãããã»ãšãã©ã®ãŠãŒã¶ãŒã«ãšã£ãŠããã®æé ã§ã¯ã転éã®ç¬éããæ°ããåçããªãããšã確èªããã ãã§ãã
ãŠãŒã¶ãŒãã¹ã¿ããŒã¿ãå
¥åãããã®ã¹ãããã§ã¯ãåãŠãŒã¶ãŒã®ããŒã¿ã®SQLãã³ããçæããããããªã¢ãŒãåŽã«é©çšããŸããã åæã«ããã®ã¹ãããã§ã¯å€ãããŒã¿ã¯åé€ãããŸããã§ããã
èªèšŒãµãŒãã¹ã®ããŒã¿ãæŽæ°ãããªãŒãœã©ã€ã¶ãŒãµãŒãã¹ã¯ããŠãŒã¶ãŒIDãšãµãŒããŒIDã®éã®éä¿¡ãä¿åããŸãããã®ãµãŒãã¹ã®ããŒã¿ãæŽæ°ãããŸã§ãã¹ã¯ãªããã¯ãŠãŒã¶ãŒããŒã¿ãå€ãå Žæã«ç§»åããŸãã
å€ãå ŽæãããŠãŒã¶ãŒããŒã¿ãåé€ããDELETE FROMã¯ãšãªã䜿çšããŠããœãŒã¹MySQLãµãŒããŒã®ãŠãŒã¶ãŒããŒã¿ãæ¶å»ããŸãã
äžå€®ããŒã¿ããŒã¹ããããŒã¿ã転éããæé éåŒãªååMiscïŒè±èªãšã¯ç°ãªã-ç°ãªãïŒã®äžã«ããäžå€®ããŒã¿ããŒã¹ã®1ã€ã«ã¯å€ãã®ç°ãªãããŒãã«ãå«ãŸããŠãããåããŒãã«ã«å¯ŸããŠãŠãŒã¶ãŒããšã«1ã€ã®SELECTãšDELETEãå®è¡ããŸããã 貧匱ãªããŒã¿ããŒã¹ããæ¯ç§40,000ã®SQLã¯ãšãªãå§çž®ãã2,000以äžã®æ¥ç¶ãéãããŸãŸã«ããŸããã
ãµãŒãã¹ããããŒã¿ã転éããæé ååãšããŠããã¹ãŠã®ããŒã¿ã¯ããŒã¿ããŒã¹ã«å«ãŸããŠããããµãŒãã¹ã¯ãããã«è¿
éã«ã¢ã¯ã»ã¹ããããšã®ã¿ãèš±å¯ããŸãã ãã®ãããã»ãšãã©ã®ãµãŒãã¹ã§ã¯ãããå ŽæããããŒã¿ãåé€ããæ¢ã«æ°ããå Žæã«ããããŒã¿ããŒã¹ããã®æ
å ±ã§ããŒã¿ãåå
¥åããŸããã ãã ãããŠãŒã¶ãŒããšã§ã¯ãªãã1ã€ã®ãµãŒãã¹å
šäœãåçŽã«è»¢éããŸããããµãŒãã¹å
ã®ããŒã¿ã¯åäžã®ã³ããŒã«æ ŒçŽãããŠããããã§ãã
ä¿çäžã®ã¬ããªã±ãŒã·ã§ã³ããŒã¿ããŒã¹ã¯ããŒã¿ã»ã³ã¿ãŒéã§è€è£œãããè€è£œããå°éããããŸã§ããŠãŒã¶ãŒããŒã¿ã¯ç°ãªãããŒã¿ã»ã³ã¿ãŒã§äžè²«æ§ã®ãªãç¶æ
ã«ãªããŸãã ãããã£ãŠããã¹ãŠãæ£ããæ©èœããããŒã¿ãäºãã«æŽåããããã«ãåãŠãŒã¶ãŒã®ã¬ããªã±ãŒã·ã§ã³ã®çµäºãåŸ
ã€å¿
èŠããããŸããã ãŸãããã®ã¹ãããã§æéã倱ããªãããã«ããããïŒ20ç§ãã1åïŒããã®æç¹ã§ä»ã®ãŠãŒã¶ãŒã移è¡ããããã«äœ¿çšãããŸããã
æçµã¹ããããŠãŒã¶ãŒã«ç§»è¡ãå®äºããããšã瀺ãããŒã¯ãä»ããæ¢ã«æ°ããããŒã¿ã»ã³ã¿ãŒã«ãããµã€ãã«ãã°ã€ã³ã§ããããã«ããŸãã
MySQLããŒã¿è»¢é
åè¿°ã®ããã«ããŠãŒã¶ãŒããŒã¿ãMySQLãµãŒããŒã«ä¿åããŸããããã¯ãåããŒã¿ã»ã³ã¿ãŒã§çŽ150åã§ãã åãµãŒããŒã«ã¯è€æ°ã®ããŒã¿ããŒã¹ããããåããŒã¿ããŒã¹ã«ã¯æ°åã®ããŒãã«ããããŸãïŒå¹³åããŠã1000ãŠãŒã¶ãŒããšã«1ã€ã®ããŒãã«ãäœæããããšããŸãïŒã ããŒã¿ã¯ãèªåã€ã³ã¯ãªã¡ã³ããã£ãŒã«ãããŸã£ãã䜿çšããªãããå°ãªããšãä»ã®ããŒãã«ã§ããããåç
§ããªãããã«èšèšãããŠããŸãã 代ããã«ãuser_idãšsequence_idã®çµã¿åãããäž»ããŒãšããŠäœ¿çšãããŸããuser_idã¯ãŠãŒã¶ãŒèå¥åã§ãããsequence_idã¯åããµãŒããŒå
ã§èªåçã«ã€ã³ã¯ãªã¡ã³ããããäžæã®ã«ãŠã³ã¿ãŒã§ãã ãããã£ãŠãåç
§æŽåæ§ã倱ããã«ãåãŠãŒã¶ãŒã«é¢ããã¬ã³ãŒããå¥ã®ãµãŒããŒã«èªç±ã«ç§»åã§ããå€ãèªåã€ã³ã¯ãªã¡ã³ããã£ãŒã«ããšæ°ããèªåã€ã³ã¯ãªã¡ã³ããã£ãŒã«ãã®å€ã®å¯Ÿå¿ãæ§ç¯ããå¿
èŠããããŸããã
ããŒã¿ã®ç§»åã¯ãã»ãšãã©ã®MySQLãµãŒããŒã§åãã¹ããŒã ã«åŸã£ãŠè¡ãããŸããïŒãšã©ãŒãçºçããå ŽåãçãæéééåŸã«ã¹ãããå
šäœãã¯ã©ãã·ã¥ããŠåèµ·åããããšã«æ³šæããŠãã ããïŒã
- ãåä¿¡åŽãã«é²ã¿ãããã«ãã§ã«ãŠãŒã¶ãŒããŒã¿ããããã©ããã確èªããŸãã ããå ŽåãããŒã¿ã®ã¢ããããŒãã¯æåããŸããããã¹ãããã¯æ£ããå®äºããŠããŸããã
- ãªã¢ãŒãåŽã«ããŒã¿ããªãå Žåã¯ããŠãŒã¶ãŒã«ãããã£ã«ã¿ãªã³ã°ã䜿çšããŠå¿
èŠãªãã¹ãŠã®ããŒãã«ããSELECTãäœæããå
é ã«BEGINãæ«å°Ÿã«COMMITãå«ãSQLãã³ããäœæããŸãã
- SSHçµç±ã§ãã³ãããªã¢ãŒãåŽã®ããããã·ãã«å
¥åããmysqlã³ã³ãœãŒã«ãŠãŒãã£ãªãã£ã䜿çšããŠäœ¿çšããŸãã COMMITãªã¯ãšã¹ãããã¹ããããšããããŸããããããã¯ãŒã¯ã®åé¡ãªã©ã«ãããåçãåŸãããšãã§ããŸããã ãããè¡ãã«ã¯ãæåã«ååã®è©Šè¡ã§ãã³ããããµããŠãããã©ããã確èªããŸãã ããã«ãäžéšã®ããŒã¿ããŒã¹ã§ã¯ããŠãŒã¶ãŒã®ããŒã¿ã®äžè¶³ã¯éåžžã®ç¶æ³ã§ãããããŒã¿è»¢éãå®è¡ããããã©ããã確èªã§ããããã«ããããã«ããã®ãããªå Žåã«å¿
èŠã«å¿ããŠç¢ºèªããç¹å¥ãªããŒãã«ã«INSERTãè¿œå ããŸããã
- SELECTã¯ãšãªã«ãã£ãåãWHEREã§DELETE FROMã䜿çšããŠå
ã®ããŒã¿ãåé€ããŸãã ååãšããŠãWHEREæ¡ä»¶ã«ã¯user_idãå«ãŸããããã€ãã®ããŒãã«ã§ã¯ããã®ãã£ãŒã«ãã¯ããŸããŸãªçç±ã§äž»ããŒã®äžéšã§ã¯ãããŸããã§ããã å¯èœã§ããã°ãã€ã³ããã¯ã¹ãè¿œå ãããŸããã ãããå°é£ãŸãã¯éå®çšçã§ããããšãå€æããå ŽåãããŒã¿ãåé€ãããšãã«user_idãæåã«éžæããã次ã«äž»ããŒãåé€ããããããããã¯ã®èªã¿åããåé¿ãããããã»ã¹ã倧å¹
ã«å éããŸããã
察å¿ããæé ãå®è¡ããããšããªãããšã確å®ã«ããã£ãŠããå Žåã¯ããªã¢ãŒãåŽã®ããŒã¿ã®å¯çšæ§ã®ãã§ãã¯ãã¹ãããããŸãã ããã«ãããããŒã¿ã転éãããµãŒããŒããšã«çŽ1ç§éåã€ããšãã§ããŸãïŒããã¯ãéä¿¡ããããã±ããããšã«100ããªç§ã®é
延ãããããã§ãïŒã
移è¡äžã«ãã話ããããå€ãã®åé¡ã«ééããŸããã
èªåã€ã³ã¯ãªã¡ã³ããã£ãŒã«ãïŒauto_incrementïŒ
èªåã€ã³ã¯ãªã¡ã³ããã£ãŒã«ãã¯è«æ±ããŒã¿ããŒã¹ã§ã¢ã¯ãã£ãã«äœ¿çšããããããå€ãIDãæ°ããIDã«ããããã³ã°ãããè€éãªããžãã¯ãèšè¿°ããå¿
èŠããããŸããã
å°é£ãªã®ã¯ãsequence_idã¯ãµãŒããŒå
ã§ã®ã¿äžæã§ãããããäžèšã®sequence_idã®ã¿ãäž»ããŒã«å«ãŸããããŒãã«ã®ããŒã¿ãåçŽã«è»¢éã§ããªãããšã§ããã sequence_idãNULLã«çœ®ãæããŠæ°ããèªåã€ã³ã¯ãªã¡ã³ãå€ãçæããããšãã§ããŸãããããã¯ããŸãã1ã€ã®ããŒãã«ã«ããŒã¿ãæ¿å
¥ããŠsequence_idã®çæãå®è¡ããçµæã®å€ãå¥ã®ããŒãã«ã§äœ¿çšããããã§ãã 次ã«ãä»ã®ããŒãã«ã¯ãsequence_idã䜿çšããŠããŒãã«ãåç
§ããŸãã ã€ãŸããããŒã¿ã転éããããµãŒããŒäžã§é©åãªéã®èªåã€ã³ã¯ãªã¡ã³ããã£ãŒã«ãå€ãååŸãããŠãŒã¶ãŒããŒã¿å
ã®å€ãsequence_idãæ°ãããã®ã«çœ®ãæããå®æããINSERTãmysqlã³ã³ãœãŒã«ãŠãŒãã£ãªãã£ãåŸã§äœ¿çšãããã¡ã€ã«ã«æžã蟌ãå¿
èŠããããŸãã
ãããè¡ãããã«ãåä¿¡ãµãŒããŒã§ãã©ã³ã¶ã¯ã·ã§ã³ãéããmysql_insert_idïŒïŒãšåŒã°ããå¿
èŠãªæ°ã®æ¿å
¥ãè¡ããŸããã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«è€æ°ã®è¡ãæ¿å
¥ãããå Žåãæåã®è¡ã®èªåã€ã³ã¯ãªã¡ã³ãå€ãè¿ãããã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ããŸãã ãã®å Žåããã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ãããåŸãããŒã¿ããŒã¹ãµãŒããŒãåèµ·åããªãéããèªåå¢åã¯æ¿å
¥ãããè¡æ°ã ãå¢å ãããŸãŸã«ãªããŸãã å¿
èŠãªèªåã€ã³ã¯ãªã¡ã³ãå€ãåãåã£ãåŸãé©åãªæ¿å
¥ãªã¯ãšã¹ããäœæããŸãããããã«ã¯ãèªåã€ã³ã¯ãªã¡ã³ãã®çæãæ
åœããããŒãã«ãå«ãŸããŸãã ãã ãããããã®ãªã¯ãšã¹ãã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ãããåŸã«åœ¢æãããç©Žãåããããã«ãèªåã€ã³ã¯ãªã¡ã³ãã®å€ããã§ã«æ瀺çã«ç€ºãããŠããŸããã
Max_connectionsãšMySQLã®è² è·åã¹ã¬ããã¯ãåŠçããå¿
èŠããããµãŒããŒãžã®MySQLæ¥ç¶ã1ã€äœæããŸããã ãããã£ãŠããã¹ãŠã®äžå€®MySQLãµãŒããŒã§2,000ã®æ¥ç¶ãç¶æããŸããã æ¥ç¶ãå¢ãããšãMySQLã¯ç§ãŸã§äžé©åã«åäœãå§ããŸããïŒããŒãžã§ã³5.1ããã³5.5ã䜿çšããŸãïŒã
äžåºŠã移è¡äžã«ãäžå€®ã®MySQLãµãŒããŒã®1ã€ïŒéåžžã«éãè² è·ãããã£ããµãŒããŒã®1ã€ïŒãã¯ã©ãã·ã¥ããŸããã 移è¡ã¯ããã«äžæ¢ããã転åã®åå ãçªãæ¢ããŸããã RAIDã³ã³ãããŒã©ãŒãåã«ãé£ã³åºãããããšãå€æããŸããã 管çè
ã¯ãããã¯ãã®ãµãŒããŒã«äžããè² è·ã«ãããã®ã§ã¯ãªãããå ç©ç©ãæ®ã£ãããšèšã£ãŠããŸãããã
InnoDBãMVCCãããã³DELETE FROMïŒèœãšãç©Žãã¹ãŠã®ããŒã¿ãInnoDBã«ä¿åãã転éããããã¹ãŠã®ããŒã¿ãããã«åé€ããããããäžéšã®ãµãŒããŒã®ããŒãã«ã«ãããã¥ãŒãã¬ãŒããããã¹ãŠã®ã¹ã¯ãªããã®é床ãäœäžãå§ããŸããã 空ã®ããŒãã«ããã®SELECTãæ°åããã£ãã®ãèŠãŠé©ããã MySQLããŒãžã¹ã¬ããã«ã¯ãåé€ãããã¬ã³ãŒããã¯ãªã¢ããæéããããŸããã§ããããã¥ãŒãæã€ããŒãã«ã空ã§ãããšããäºå®ã«ããããããããŸã ç©ççã«åé€ãããããã§ããæã«MySQLã«ãã£ãŠåã«ã¹ããããããå€ãã®åé€ãããã¬ã³ãŒãããããŸããã ã¬ã³ãŒããã¯ãªãŒãã³ã°ããããã®ãã¥ãŒã®é·ãã®å®éçãªèª¬æã¯ãSHOW ENGINE INNODB STATUSãšå
¥åããŠãè¡å±¥æŽãªã¹ãã®é·ãã調ã¹ãããšã§ååŸã§ããŸãã ç§ãã¡ã芳å¯ããæ倧ã®å€ã¯ãæ°çŸäžä»¶ã®ã¬ã³ãŒãã§ãã DELETE FROMã䜿çšããŠInnoDBããŒãã«ããå€ãã®ã¬ã³ãŒããæ
éã«åé€ããããšããå§ãããŸãã ãããåé¿ããå¯èœã§ããã°ãããšãã°TRUNCATE TABLEã䜿çšããããšããå§ãããŸãã TRUNCATE TABLE圢åŒã®ã¯ãšãªã¯ããŒãã«ãå®å
šã«ã¯ãªã¢ãããããã®æäœã¯DDLã§ãããããåé€ãããã¬ã³ãŒãã¯å
ã«æ»ã/ããçŽããã°ã«è¿œå ãããŸããïŒInnoDBã¯DDLæäœã®ãã©ã³ã¶ã¯ã·ã§ã³ããµããŒãããŸããïŒã
DELETE FROMã䜿çšããŠãã¹ãŠã®ããŒã¿ãåé€ããåŸãããŒãã«ããéžæãè¡ãå¿
èŠãããå Žåã¯ãäž»ããŒã«BETWEENæ¡ä»¶ã課ãããšããŸãã ããšãã°ãauto_incrementã䜿çšããå ŽåãããŒãã«ããMINïŒidïŒããã³MAXïŒidïŒãéžæããŠããããããã®éã®ãã¹ãŠã®ã¬ã³ãŒããéžæããŸããããã¯ãäœããã®å¶éãŸãã¯
id> Nã®åœ¢åŒã®æ¡ä»¶ã®ããããã®ã¿ãæã€ã¬ã³ãŒããéžæãããããã¯ããã«é«éã§ããŸãã¯
id <N ã InnoDBã¯åé€ãããã¬ã³ãŒããã¹ããããããããMINïŒidïŒããã³MAXïŒidïŒãåãåããªã¯ãšã¹ãã«ã¯éåžžã«é·ãæéãããããŸãã ãã ããäžæ¹ã§ãããŒç¯å²ã®ã¯ãšãªã¯éåžžãšåãé床ã§å®è¡ãããŸããåé€ãããã¬ã³ãŒãã¯ããã®ãããªã¯ãšãªäžã«éžæã«å«ãŸããŸããã
ãŸãããã¹ãŠã®ã¯ãšãªãåãã¯ãšãªãæã¡ããã®ããŒãã«ã«user_idã€ã³ããã¯ã¹ãååšããªããDELETE FROM WHERE user_id =ãšãã圢åŒã®ããã³ã°ãã¯ãšãªãå€æ°ããããšã«é©ããŸããã å€æããããã«ãã¬ã³ãŒãã®åé€æã«FULL SCANããŒãã«ãäœæãããåé¢ã¬ãã«ãREPEATABLE READïŒããã©ã«ãïŒã§ããå ŽåãMySQLããŒãžã§ã³5.1ïŒããã³ãããããçšåºŠã¯äœãã5.5ïŒã¯ãã®ãããªã¯ãšãªã®ã¹ã±ãŒã©ããªãã£ãéåžžã«äœããªããŸãã åãã¬ã³ãŒãã«å¯ŸããŠããã¯ã®ç«¶åãéåžžã«æ¿ãããããã¯ãšãªã®åŠçæéãéªåŽ©ã®ããã«å¢å ããŸãã
åé¡ã®å¯èœãªè§£æ±ºçã®1ã€ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ã¬ãã«READ COMMITEDãèšå®ããããšã§ããããã«ãããããŒã¿ãåé€ãããInnoDBã¯WHEREå¥ã«åãŸããªãè¡ã«ããã¯ããããŸããã ãããã©ã®ããã«æ·±å»ãªåé¡ã§ãã£ããã説æããããã«ã移è¡äžã«æ®åœ±ããã¹ã¯ãªãŒã³ã·ã§ããã次ã«ç€ºããŸãã ã¹ã¯ãªãŒã³ã·ã§ããã®tmp.tiw_fixããŒãã«ã«ã¯ãçŽ60ã®ãšã³ããªã®ã¿ãå«ãŸããŠããŸãïŒïŒïŒãuser_idã®ã€ã³ããã¯ã¹ã¯å«ãŸããŠããŸããã
ãŠãŒã¶ãŒã¹ããªãŒã ã®å²ãåœãŠ
æåã¯ãç¹å®ã®ãŠãŒã¶ãŒãã©ã®ãµãŒããŒã«ãããã«é¢ä¿ãªãããŠãŒã¶ãŒããããŒããšã«åçã«åæ£ããŸããã ãŸããåã¹ã¬ããã§ã¯ã察å¿ããã¹ã¬ããã«å²ãåœãŠããããŠãŒã¶ãŒã移è¡ããããã«æºããå¿
èŠããã£ããã¹ãŠã®MySQLãµãŒããŒãžã®æ¥ç¶ãéãããŸãŸã«ããŸãã ãã®çµæãããã«2ã€ã®åé¡ãçºçããŸããã
- MySQLãµãŒããŒã®é床ãäœäžãå§ãããšããã®ãµãŒããŒã«äœãã§ãããŠãŒã¶ãŒã®ç§»è¡ãé
ããªããŸããã ä»ã®ãã¹ãŠã®ã¹ã¬ãããå®è¡ãç¶ãããšãåé¡ã®ãµãŒããŒã«ãããŠãŒã¶ãŒã«ãåŸã
ã«å°éããŸãã åŸã
ã«ããã®ãµãŒããŒã«èç©ãããã¹ã¬ããã®æ°ãå¢å ããããã«é
ããªãå§ããŸããã ãµãŒããŒã®ã¯ã©ãã·ã¥ãé²ããããæäœäžã«ã³ãŒãã«äžæçãªããããå°å
¥ããããŸããŸãªãã¯ã©ã³ããã䜿çšããŠãã®ãµãŒããŒã®è² è·ãå¶éããŸããã
- å¿
èŠãªãã¹ãŠã®MySQLãµãŒããŒãžã®åãããŒã§MySQLæ¥ç¶ãéãããŸãŸã«ããŠãããããåã¹ã¬ããã¯ãã¹ãŠã®MySQLãµãŒããŒãžã®å€æ°ã®éããæ¥ç¶ãæã¡ãmax_connectionsã«äŸåãå§ãããšããçµè«ã«åŸã
ã«éããŸããã
æçµçã«ãã¹ã¬ããããšã«ãŠãŒã¶ãŒãé
åžããããã®ã¢ã«ãŽãªãºã ãå€æŽããåãŠãŒã¶ãŒã«1ã€ã®MySQLãµãŒããŒã®ã¿ã«äœãã§ãããŠãŒã¶ãŒãå²ãåœãŠãŸããã ãããã£ãŠããã®ãµãŒããŒã®ããã¬ãŒããã®å Žåã®éªåŽ©ã®ãããªè² è·å¢å ã®åé¡ãããã³äžéšã®åŒ±ããã¹ãã§ã®åææ¥ç¶ãå€ãããåé¡ãããã«è§£æ±ºããŸããã
ç¶è¡ããã«ã¯...
次ã®ããŒãã§ã¯ããŠãŒã¶ãŒã®åçãäºåã«ç§»è¡ããæ¹æ³ãšãåçã䜿çšããŠãµãŒããŒã®è² è·ãå¶éããããã«äœ¿çšããããŒã¿æ§é ã«ã€ããŠèª¬æããŸãã ãã®åŸã2ã€ã®ããŒã¿ã»ã³ã¿ãŒã®16å°ã®ãµãŒããŒã§2,000ã®åæå®è¡ç§»è¡ãããŒã調æŽããæ¹æ³ãšãããããã¹ãŠæ©èœãããããã«äœ¿çšãããæè¡ãœãªã¥ãŒã·ã§ã³ã«ã€ããŠãããã«è©³ãã説æããŸãã
Yuri
youROCK NasretdinovãPHPéçºè
Anton
antonstepanenko StepanenkoãããŒã ãªãŒããŒãPHPéçºè