
note ã® Aurora MySQL ã v2 ãã v3 ãžã¢ããã°ã¬ãŒãããŸãã
note ã§ã¯ã¡ã€ã³ããŒã¿ããŒã¹ãšã㊠Aurora MySQL ãæ¡çšããæ¥ã
çºçããèšå€§ãªãã©ãã£ãã¯ãåŠçããŠããŸããAurora MySQL v2 (MySQL 5.7 äºæ) ã®æšæºãµããŒãã¯2024/10/31 ã«çµäºããããããããæ©ã« v3 (MySQL 8.0 äºæ) ãžã®ã¢ããã°ã¬ãŒããè¡ããŸããã
ã¢ããã°ã¬ãŒãã¯ç¡äºã«å®äºããŸããããããã€ãã®åé¡ã«ãçŽé¢ããŸãããããããå
±æããããšã§ãããããã¢ããã°ã¬ãŒããæ€èšããŠããæ¹ãžåèã«ãªãã°ãšæããŸãã
äºåã«æ€èšãã課é¡
ã¢ããã°ã¬ãŒãåŸã«èŽåœçãªåé¡ãèµ·ãããã©ãããã
v3 ãžã®ã¢ããã°ã¬ãŒãåŸã« v2 ãžåãæ»ãããšã¯å®¹æã§ã¯ãªããã¹ãããã·ã§ãããªã©ããã®åŸ©å
ãå¿
èŠã«ãªããŸããããŒã¿ãããŒã«ããã¯ããããšã«ãªãããããŠãŒã¶åœ±é¿ã極ããŠå€§ããé¿ãããäºæ
ã§ãã
ãã®ãããåºæ¬çã«åãæ»ãã¯ã§ããªããšããåæã§ã¢ããã°ã¬ãŒãèšç»ãé²ããŸããã
SELECT ã COUNT ã¯ãšãªçºè¡æã®é床å£å
ãããåŠçã§çºè¡ãããéã SELECT ã¯ãšãª(æ°åå以äžèŠãããã®)ã 15 ã 30 % çšåºŠã®é床å£åããããšãæ€èšŒç°å¢ã§ç¢ºèªã§ããŸãããããã¯ç¹å®ã®æ§æãå«ãã¯ãšãªãšããããã§ã¯ãªããéã SELECT ã¯ãšãªãè»äžŠã¿é床å£åãããšããæ€èšŒçµæã§ããã
ãŸããã°ã¬ããŒãã«æãã£ãŠããããã«ãCOUNT ã¯ãšãªã®é床å£åãåçŸããŸããã
ãã©ã¡ãŒã¿ãã¥ãŒãã³ã°ããAWS ãµããŒããžã®åãåããã詊ã¿ãŸããã解決ã«ã¯è³ããªãã£ãããããããã¯å¯èœãªéãã¯ãšãªãæé©åããããã«ããŸããã
幞ã API çµç±ã§ãªã¢ã«ã¿ã€ã çºè¡ãããã¯ãšãª(ãæ°çŸ ms çšåºŠ)ã¯æ€èšŒç°å¢ã§æç¢ºãªé床差ã¯ãããŸããã§ããããªã¢ã«ã¿ã€ã æ§ãæ±ããããã¯ãšãªãå£åããã®ã§ããã°ã¢ããã°ã¬ãŒããå»¶æãããããªããšèããŠããã®ã§ãããã«é¢ããŠã¯è¯ãã£ãã§ãã
äžéšã¯ãšãªã®ããã©ãŒãã³ã¹å£åãããã£ãŠããäžã§ã¢ããã°ã¬ãŒãããã®ã¯èŠæžã®å€æãšèšããŸãããä»å該åœããã¯ãšãªã®é床å£åã«ãããŠãŒã¶åœ±é¿ã¯å°ããã£ãããã蚱容ç¯å²å
ã§ããããšã®åæãåŸãŠé²ããããšã«ããŸããã
ã¢ããã°ã¬ãŒãåŸã«çŽé¢ãã課é¡
IN å¥ãå«ãã¯ãšãªããã«ã¹ãã£ã³ã«ãªã£ãŠããŸã
IN å¥ãå«ãã¯ãšãªããã€ã³ããã¯ã¹ã䜿ããã«ãã«ã¹ãã£ã³ãšãªãã¹ããŒã¯ãšãªãé »çºããããã«ãªããŸããã以äžã®ãããªããçŽ æŽãªã¯ãšãªã§ãçºçããŠããŸããã
SELECT * FROM items WHERE user_id IN ( ? )
IN å¥ã«å€§éã®ä»¶æ°ãæå®ããå Žåãç¯å²ã¢ã¯ã»ã¹ã§äœ¿ãã¡ã¢ãªã ãrange_optimizer_max_mem_sizeãã®å€ãè¶ ãããšãã«ã¹ãã£ã³ã«ãªãããšããããŸãã
ãã®æå㯠v2 ã®é ãããã£ããã察åŠã¯ããŠããã®ã§ãããã¢ããã°ã¬ãŒãã«ãã£ãŠãrange_optimizer_max_mem_size ãã®ã¡ã¢ãªãè¶ããã±ãŒã¹ãåºãããã«ãªã£ãŠããŸã£ãããã§ãã
ãrange_optimizer_max_mem_sizeã ã®å€ãåå倧ããããããšã§è§£æ¶ããŸãããèšå®å€ã®èŠç©ããã¯ãäžèšãªã³ã¯ã®ããã¥ã¡ã³ãå
ã«èšèŒãããã®ã§åèã«ããŸãããIN å¥ãå«ãã¯ãšãªãçºè¡ããéã¯ãä»¶æ°ã®éŸå€ãè¶
ãããé©åãªåäœã«åå²ããããšã倧äºã§ãã
ç¹å®ã®ã¯ãšãªã§ ICP(ã€ã³ããã¯ã¹ã³ã³ãã£ã·ã§ã³ããã·ã¥ããŠã³)ã«ããæé©åãè¡ãããªããªã£ã
äžéšã®ã¯ãšãªã«ãããŠãICP ã«ããæé©åãè¡ãããã«å®è¡éåºŠãæ¥µç«¯ã«é ããªã£ãŠãããã®ããããŸããã
ã©ãããããšãå°ã ãããã«ããã®ã§ãå ·äœäŸãæç²ããŸãã
ããŒãã«ã«äººãšãã®ã¢ãã¬ã¹ã«é¢ããæ å ±ãå«ãŸããŠãããããŒãã«ã« INDEX (zipcode, lastname, firstname) ãšããŠå®çŸ©ãããã€ã³ããã¯ã¹ããããšããŸãã å人㮠zipcode å€ãããã£ãŠããããå§ãããããªãå Žåã¯ã次ã®ããã«æ€çŽ¢ã§ããŸã:
SELECT * FROM people WHERE zipcode='95054' AND lastname LIKE '%etrunia%' AND address LIKE '%Main Street%';
MySQL ã¯ã€ã³ããã¯ã¹ã䜿çšããŠãzipcode='95054' ãæã€äººãã¹ãã£ã³ããŸãã 2 çªç®ã®éšå (lastname LIKE '%etrunia%') ã䜿çšããŠã¹ãã£ã³ããå¿ èŠãããè¡æ°ãå¶éããããšã¯ã§ããªããããã€ã³ããã¯ã¹æ¡ä»¶ããã·ã¥ããŠã³ã䜿çšããªãå Žåããã®ã¯ãšãªãŒã§ã¯ãzipcode='95054'ãæã€ãã¹ãŠã®ãŠãŒã¶ãŒã®å®å šãªããŒãã«ã®è¡ãååŸããå¿ èŠããããŸãã
ã€ã³ããã¯ã¹æ¡ä»¶ããã·ã¥ããŠã³ã§ã¯ãMySQL ã¯ããŒãã«ã®è¡å šäœãèªã¿åãåã« lastname LIKE '%etrunia%'éšåããã§ãã¯ããŸãã ããã«ãããzipcode æ¡ä»¶ã«äžèŽããã lastname æ¡ä»¶ã«äžèŽããªãã€ã³ããã¯ã¹ã¿ãã«ã«å¯Ÿå¿ããå®å šãªè¡ã®èªåããåé¿ãããŸãã
ICP ã«ããæé©åããªãå Žåã«å¯Ÿè±¡è¡æ°ãèšå€§ã«ãªãã¯ãšãªããããããã倧å¹
ã«é床å£åãããŠããŸããã
æé©åãè¡ãããŠãããã©ããã¯å®è¡èšç»ã® Extra ã«ã©ã ã« ãUsing index conditionãã衚瀺ãããŠãããã©ããã§ç¢ºèªãã§ããŸããv2 ãš v3 ã§ã¯ãšãªãããŒã¿ãåãç¶æ³ã§ãã£ãã«ããããããå®è¡èšç»ã«å·®ãåºãã®ã¯ãªããã£ãã€ã¶ã®æåãå€ãã£ã圱é¿ããšæããŸãã解決ãšã㊠ICP ã«é Œããã«é©åãªã€ã³ããã¯ã¹ã远å ããããšã§å¯Ÿå¿ãè¡ããŸããã
Timeout exceeded in regular expression match ãšã©ãŒãåºãããã«ãªã£ã
ãã¿ãŒã³ããããå«ãã¯ãšãªã§ãTimeout exceeded in regular expression matchããšã©ãŒãçºçããŸããã
ãã®ãšã©ãŒã¯ MySQL 8.0 ã§å°å
¥ããã ãregexp_time_limitã ã®åœ±é¿ã§ããã¿ãŒã³ãããã®è©äŸ¡ã ãregexp_time_limitã ã«æå®ããæéãè¶ãããšãšã©ãŒã«ãªããŸãã0 ãæå®ããŠç¡å¹åãã(ãŸãã¯å€ãåå倧ãããã) ããšã§è§£æ¶ããŸããã
GROUP BY ãå«ãã¯ãšãªçµæã®é åºãå€ãã£ãŠããŸã£ã
GROUP BY ã«ã©ã ã«å¯Ÿããæé»ãœãŒãã廿¢ããããããçµæã®é åºãä¿èšŒãããªããªããŸãããé åºä¿èšŒãå¿ èŠãªåŠçã«ãããŠå¯Ÿå¿ãå¿ èŠã§ãããã¯ãšãªèªäœã¯ãšã©ãŒã«ãªããªãããæ°ã¥ãã«ããå¯Ÿå¿æŒãããããŸãããé åºä¿èšŒãå¿ èŠãªåŠçã«ã¯ããããæ€èšŒããèªåãã¹ãããã£ããæžããŠããããã«ãããã§ããã
ã¢ããã°ã¬ãŒãåŸã®ã¡ããªã¯ã¹å€å
ãŸãã¯æŽæ°ç³»ã¯ãšãªãã¡ã€ã³ã® Writer ã€ã³ã¹ã¿ã³ã¹ã® AAS(Average Active Sessions) ã®å€åã§ããAAS 㯠DB ã«ååšããã¢ã¯ãã£ããªã»ãã·ã§ã³æ°ã衚ããè² è·ã®ç¶ç¶çãªç£èŠã§å©çšãããã¡ããªã¯ã¹ã§ããèµ€ç·ãã¢ããã°ã¬ãŒãæ¥æã®å¢çç·ã§ãã

è² è·ãäžããã¹ã«ãŒããããæ¹åããŠããããšã確èªã§ããŸããã
次㫠Reader ã€ã³ã¹ã¿ã³ã¹ã§ãã

ã¢ããã°ã¬ãŒãçŽåŸã¯å è¿°ã®åé¡ããã£ããã倧ããæªåããŠããŸããåé¡ãèœã¡çããåŸã§ãããŒã¯æã§ 1.5 åè¿ã AAS ã®å€ãå¢å ããŠãããè² è·ãäžæããŠããããšãããããŸããCPU 䜿çšç㯠v2 æ¯ã§å¢å ããå察ã«ã¡ã¢ãªäœ¿çšçã¯äžãã£ãŠããŸãããéã SELECT ã¯ãšãªã¯ Reader ã€ã³ã¹ã¿ã³ã¹ã«éäžããŠçºè¡ããŠããããã Writer ãšã¯å¯Ÿè±¡çãªå€åã§ããã
次㫠API å šäœã®å¹³åã¬ã¹ãã³ã¹ã¿ã€ã ã§ãããªã¢ã«ã¿ã€ã ã«çºè¡ãããã¯ãšãªã§ã¯ç®ç«ã€å£åã¯ãªããAPI ã¬ã¹ãã³ã¹ã¿ã€ã ãžã®åœ±é¿ã¯ç¹ã«èŠãããŸããã§ããã

ãŸãšã
ãªããã£ãã€ã¶ã«ããæé©åã§ä¹ãåã£ãŠããéšåãã巚倧ããŒãã«ã宿çã«éèšããéãã¯ãšãªãæ®ã£ãŠããããšãã課é¡ãšããŠæµ®ã圫ãã«ãªããŸããã
çµæãèŠããš v3 ã§ããã©ãŒãã³ã¹ãæªåããããšããããã«èŠããŸãããä»ãŸã§ããã©ãŒãã³ã¹ã®æªãã¯ãšãªã MySQL ããããªã«æé©åããŠãããšããèŠæ¹ãã§ããããšæããŸãããææã§ãããv3 ã§ã¯çŽ çŽã«è¯ããªãã¯ãšãªã¯è¯ããªãããã©ãŒãã³ã¹ãšããŠçŸããããã«ãªã£ãã®ã§ããããŸã§ããäºæ³ããããæåã«ãªã£ãããã«æããŸããã
note ã®äŒå¡ç»é²è
æ°ã¯ 770 äžãè¶
ããããŒã¿éããã©ãã£ãã¯å
±ã«ãŸããŸãèšå€§ã«ãªã£ãŠããŠããŸãã
环ç©ãã巚倧ããŒãã«ãžã®ã¢ãããŒããéèšåŠçã®æé©åããšãã£ããšããã倧ããªèª²é¡ã§ãããšããããšãæ¹ããŠå®æããŸãããåŒãç¶ããå®å®ãããµãŒãã¹ãæäŸã§ããããã«èª²é¡ãžåãçµãã§ãããããšæããŸãã