Yandex.Mailã®ã¹ãã¬ãŒãžã·ã¹ãã éçšã°ã«ãŒãã®ã·ã¹ãã 管çè ã§ããVladimir Borodin ïŒHabrã®dev1ant㧠ïŒã¯ãOracle DatabaseããPostgreSQLã«å€§èŠæš¡ãªãããžã§ã¯ãã移è¡ããããšã®é£ããã玹ä»ããŸãã ããã¯ã HighLoad ++ 2016ã«ã³ãã¡ã¬ã³ã¹ã®ã¬ããŒãã®è»¢åã§ãã
ã¿ãªããããã«ã¡ã¯ïŒ ç§ã®ååã¯Vovaã§ããä»æ¥ã¯Yandex.MailããŒã¿ããŒã¹ã«ã€ããŠã話ããŸãã
ãŸããå°æ¥éèŠã«ãªãããã€ãã®äºå®ã Yandex.Mail-ãã®ãµãŒãã¹ã¯éåžžã«å€ãã2000幎ã«éå§ããããããå€ãã®éºç£ãèç©ãããŠããŸãã ç§ãã¡ã®å Žæã§ã¯ãèšããŸã§ããªãæ £ç¿çã§ãã¡ãã·ã§ããã«ã§ãããããéåžžã«é«è² è·ã®ãµãŒãã¹ãããã1æ¥ããã1,000äžäººä»¥äžã®ãŠãŒã¶ãŒãåèšã§æ°å人ã®ãŠãŒã¶ãŒãããŸãã ããã¯ãšã³ãã§ã¯ãããŒã¯æã«æ¯ç§20äžä»¶ãè¶ ãããªã¯ãšã¹ããå°çããŸãã ã¹ãã ããã³ãŠã€ã«ã¹ãã§ãã¯ã«åæ Œãã1æ¥ããã1å5,000äžä»¶ä»¥äžã®ã¡ãŒã«ãè¿œå ããŠããŸãã 16幎éãã¹ãŠã®æçŽã®ç·éã¯20ãã¿ãã€ã以äžã§ãã
ããã¯ã©ããªãã®ã§ããããïŒ OracleããPostgreSQLã«ã¡ã¿ããŒã¿ã転éããæ¹æ³ã«ã€ããŠã ã¡ã¿ããŒã¿ã¯ãã¿ãã€ãã§ã¯ãªãã300ãã©ãã€ããå°ãè¶ ããŠããŸãã 1ç§ããã25äžä»¶ãè¶ ãããªã¯ãšã¹ããããŒã¿ããŒã¹ã«éãããŸãã ãããã¯å°ããªOLTPèŠæ±ã§ãããã»ãšãã©ãèªã¿åãïŒ80ïŒ ïŒã§ããããšã«æ³šæããŠãã ããã
ããã¯ãOracleãåé€ããæåã®è©Šã¿ã§ã¯ãããŸããã 2000幎代ã®åãã«ãMySQLã«ç§»è¡ããè©Šã¿ããããŸãããã倱æããŸããã 2007幎ãŸãã¯2008幎ã«ãç¬èªã®äœããæžãè©Šã¿ããããŸããããããã倱æããŸããã ã©ã¡ãã®å Žåããæè¡çãªçç±ã§ã¯ãªããçµç¹çãªçç±ã§å€±æããããŸããã
ã¡ã¿ããŒã¿ãšã¯äœã§ããïŒ ããã§ã¯ãç¢å°ã§åŒ·èª¿è¡šç€ºãããŠããŸãã ãããã¯ãã©ã«ããŒã§ãããã«ãŠã³ã¿ãŒãã©ãã«ïŒå®éã«ã¯ã«ãŠã³ã¿ãŒã®ãããªã¹ãïŒãã³ã¬ã¯ã¿ãŒãã¹ã¬ããããããŠãã¡ããæåãå«ãäœããã®éå±€ã§ãã
ã¬ã¿ãŒèªäœãã¡ã¿ããŒã¹ã«ä¿åããã®ã§ã¯ãªããã¬ã¿ãŒã®æ¬æã¯å¥ã®ãªããžããªã«ãããŸãã ã¡ã¿ããŒã¹ã«ã¯ããšã³ãããŒããæ ŒçŽãããŸãã ãšã³ãããŒãã¯ãã¡ãŒã«ããããŒã®äžéšã§ãã誰ããã誰ãžãæçŽã®ä»¶åãæ¥ä»ãããã³åæ§ã®ãã®ã æ·»ä»ãã¡ã€ã«ãšäŒè©±ã«é¢ããæ å ±ãä¿åããŸãã
2012幎ã«æ»ã
ãããã¯ãã¹ãŠOracleã«ãããŸãã æãä¿åãããããŒã¿ããŒã¹ã«ã¯å€ãã®ããžãã¯ããããŸããã OracleããŒã¿ããŒã¹ã¯æãå¹ççãªãªã«ããªããŒããŠã§ã¢ã§ããã10ãã©ãã€ããè¶ ãã倧éã®ããŒã¿ãã·ã£ãŒãã«è¿œå ããŸããã æ¯èŒçèšãã°ã30ã³ã¢ã§ã¯ãéåžžã®å¹³åäœæ¥è² è·ã¯100ã§ãããããã¯ããã¹ãŠãæªãå Žåã§ã¯ãªããéåžžã®æäœäžã§ãã
æ ç¹ã¯ã»ãšãã©ãªãã£ãã®ã§ãå€ãã®äœæ¥ã¯èªååããã«æäœæ¥ã§è¡ãããŸããã å€ãã®æåæäœããããŸããã ãéãç¯çŽããããã«ãããŒã¹ãããŠã©ãŒã ãïŒ75ïŒ ïŒãšãã³ãŒã«ããïŒ25ïŒ ïŒã«åããŸããã ããŠã©ãŒã ãã¯ã¢ã¯ãã£ããŠãŒã¶ãŒåãã§ãSSDã䜿çšããŠããŸãã ãã³ãŒã«ãã-éã¢ã¯ãã£ããªãŠãŒã¶ãŒåããSATAã
ã·ã£ãŒãã£ã³ã°ãšãã©ãŒã«ããã¬ã©ã³ã¹ã¯ãYandexã®éèŠãªãããã¯ã§ãã ã·ã£ãŒãã£ã³ã°-ãã¹ãŠã1ã€ã®ã·ã£ãŒãã«ããã·ã¥ããããã§ã¯ãªããããããã³ãã©ãŒã«ããã¬ã©ã³ã¹-ããŒã¿ã»ã³ã¿ãŒã®1ã€ãå®æçã«åãå€ããŠåæãããã¹ãŠãæ©èœããããšã確èªããããã
ããã¯ã©ã®ããã«å®è£ ãããŸãããïŒ å éšBlackBoxãµãŒãã¹ïŒãã©ãã¯ããã¯ã¹ïŒããããŸãã 1ã€ã®ãªã¯ãšã¹ããããã¯ãšã³ãã®1ã€ã«å°çãããšãããã¯ãšã³ãã¯èªèšŒããŒã¿ïŒãã°ã€ã³ããã¹ã¯ãŒããCookieãããŒã¯ã³ãªã©ïŒã亀æããŸãã 圌ã¯ãããBlackBoxã«éããŸããBlackBoxã¯ãæåãããšãŠãŒã¶ãŒIDãšã·ã£ãŒãã®ååãè¿ããŸãã
次ã«ãããã¯ãšã³ãããã®ã·ã£ãŒãåãOCCI Oracleãã©ã€ããŒã«æž¡ãããã¹ãŠã®ãã©ãŒã«ããã¬ã©ã³ã¹ããžãã¯ããã®ãã©ã€ããŒå ã«å®è£ ãããŸããã ã€ãŸãã倧ãŸãã«èšã£ãŠãç¹å¥ãªãã¡ã€ã«/etc/tnsnames.oraã«shardnameãæžã蟌ãŸãããã®ã·ã£ãŒãã«å ¥ããã¹ãã®ãªã¹ãããµãŒãã¹ãæäŸããŸãã Oracleèªäœãããã¹ã¿ãŒãã¬ããªã«ãçåè ãæ»äº¡è ãªã©ã決å®ããŸãããåèšãããšãã·ã£ãŒãã£ã³ã°ã¯å€éšãµãŒãã¹ã䜿çšããŠå®è£ ããããã©ãŒã«ããã¬ã©ã³ã¹ã¯Oracleãã©ã€ãã䜿çšããŠå®è£ ãããŸããã
ã»ãšãã©ã®ããã¯ãšã³ãã¯C ++ã§æžãããŠããŸãã ãèªè»¢è»ãã補é ããªãããã«ãé·ãéãmacsã¡ã¿ã¢ã¯ã»ã¹ã®äžè¬çãªæœè±¡åãè¡ãããŠããŸããã ããã¯ãããŒã¹ã«ç§»åããããã®åãªãæœè±¡åã§ãã ã»ãšãã©åžžã«ã圌女ã¯macs_oraã®1ã€ã®å®è£ ã䜿çšããŠOracleã«çŽæ¥ã¢ã¯ã»ã¹ããŸããã ãã¡ãããäžçªäžã«ããã®ã¯OCCIã§ãã æ¥ç¶ããŒã«ãå®è£ ããå°ããªdbpoolã¬ã€ã€ãŒããããŸããã
ããã¯ãé·ãéèããããèšèšãããå®è£ ãããŠããæ¹æ³ã§ãã æœè±¡åãçµãããšãããã¯ãšã³ãã¯macs_oraå®è£ ã®ã¡ãœããã䜿çšãå§ããŸãããdbpoolã®å Žåã¯ããã«æªãããšã§ãã ãã®ã©ã€ãã©ãªã䜿çšã§ããªãJavaããã³ãã®ä»ã®ããããçš®é¡ã®ããã¯ãšã³ããç»å ŽããŸããã ããããããã®ãã¹ãŠã®éººã¯çã ããã»ã©ããéããããªããã°ãªããŸããã§ããã
Oracleã¯åªããããŒã¿ããŒã¹ã§ãããåé¡ããããŸããã ããšãã°ãã©ã€ãã©ãªãã£ãã·ã¥ããããããPL / SQLã³ãŒãã®ã¬ã€ã¢ãŠãã¯èŠçã§ãã ããŒã¿ããŒã¹ã«è² è·ãããã£ãŠããå Žåãäžéšã®ã»ãã·ã§ã³ã§äœ¿çšãããŠããæ©èœã³ãŒããååŸããŠæŽæ°ããããšã¯ã§ããŸããã
æ®ãã®åé¡ã¯ã䜿çšããã¢ãããŒãã»ã©Oracleã«ã¯é¢ä¿ããŠããŸããã ç¹°ãè¿ããŸãããå€ãã®æåæäœã ãŠã£ã¶ãŒãã®åãæ¿ããæ°ããããŒã¿ããŒã¹ã®ããŒãããŠãŒã¶ãŒè»¢éã®éå§-æ ç¹ãã»ãšãã©ãªãããããã¹ãŠæäœæ¥ã§è¡ãããŸããã
éçºã®èŠ³ç¹ããèŠããšããã©ã¹[C ++] Oracleãã©ã€ããŒã«ã¯åæã€ã³ã¿ãŒãã§ãŒã¹ãããªããšããæ¬ ç¹ããããŸãã ã€ãŸããéåžžã®éåæããã¯ãšã³ããå é ã«æžã蟌ãããšã¯ã§ããŸããã ããã«ãããéçºã«å€å°ã®çã¿ãçããŸããã éçºã®2çªç®ã®çã¿ã¯ããã¹ãããŒã¹ãäžããããšãåé¡ã§ãããšããããšã§ããã 第äžã«ãæã§ã第äºã«ãããã¯ãéã ããã§ãã
ãããèšã人ã¯èª°ã§ãããªã©ã¯ã«ã¯ãµããŒãããŠããŸãã å€ãã®å ŽåãäŒæ¥ã®ãµããŒãã¯çæ³ããããé¢ããŠããŸãã ãããã移è¡ã®äž»ãªçç±ã¯ãéã§ãã Oracleã¯é«äŸ¡ã§ãã
ã¿ã€ã ã©ã€ã³
4幎以äžåã®2012幎10æã«ãOracleãå»æ¢ããããšã決å®ãããŸããã PostgreSQLã®èšèãæè¡çãªè©³çŽ°ãèãããŸããã§ãã-ããã¯çŽç²ã«æ¿æ²»çãªæ±ºå®ã§ããã3幎éãåãé€ãããšã§ãã
6ãæåŸãæåã®å®éšãéå§ããŸããã ãããã®6ãæãè²»ãããããã®ã¯ãå°ãåŸã§ããããŸãã ãããã®6ã¶æã¯éèŠã§ããã
2013幎4æã«ãPostgreSQLãå®éšããŸããã ãã®åŸãããããçš®é¡ã®NoSQLãœãªã¥ãŒã·ã§ã³ã«éåžžã«ãã¡ãã·ã§ããã«ãªãã¬ã³ãããããããŸããŸãªããšãè©ŠããŸããã ãã¹ãŠã®ã¡ã¿ããŒã¿ã¯æ¢ã«ã¡ãŒã«æ€çŽ¢ããã¯ãšã³ãã«ä¿åãããŠããã䜿çšã§ããå¯èœæ§ãããããšãæãåºããŸããã ãã®ãœãªã¥ãŒã·ã§ã³ãè©ŠããŸããã
æåã®æåããå®éšã¯ã³ã¬ã¯ã¿ãŒã§ããã 2014幎ã®Yandexã§ã®äŒè°ã§ããã«ã€ããŠè©±ããŸãã ã
ããªãããŒããããïŒ1ç§ããã4äžä»¶ã®ã¯ãšãªïŒã¡ãŒã«ã¡ã¿ããŒã¿ã®å°ããªæçïŒ2ãã©ãã€ãïŒãååŸããOracleããPostgreSQLã«ç§»è¡ããŸããã åºæ¬çãªã¡ã¿ããŒã¿ãšããŸãé¢ä¿ã®ãªãéšåã ç§ãã¡ã¯ããããã£ãããããŠããã奜ãã ã£ãã PostgreSQLãéžæããããšã«ããŸããã
次ã«ãPostgreSQLåãã®ã¡ãŒã«ã¹ããŒã ã®ãããã¿ã€ããæŽãæµããããã«æçŽã®æµãå šäœãè¿œå ãå§ããŸããã ãããéåæã§è¡ããŸããã1æ¥ã«1å5000äžéãã¹ãŠã®æåãPostgreSQLã«ã¹ã¿ãã¯ããŸããã ãããã倱æããå Žåãæ°ã«ããŸããã ããã¯çŽç²ãªå®éšã§ããã圌ã¯çç£ãå·ã€ããŸããã§ããã
ããã«ãããåè·¯ã䜿çšããŠåæ仮説ããã¹ãã§ããŸããã æšãŠãã®ãæ®å¿µãªããŒã¿ããªãå Žå-ããã¯éåžžã«äŸ¿å©ã§ãã ããçš®ã®ã¹ããŒã ãäœæããããã«æåãè©°ããŠããããæ©èœããŠããªãããšãç¥ãããã¹ãŠãèœãšããåã³å§ããŸããã ããªããããããã§ããçŽ æŽãããããŒã¿ãããã倧奜ãã§ãã
ãŸããããã®ãããã§ãç¬ç«ããã¹ã¿ã³ãã§ã¯ãªããããçš®ã®åæç©è³ªã§ã¯ãªããã©ã€ãè² è·ã§çŽæ¥è² è·ãã¹ããå®è¡ããããšãããçšåºŠå€æããŸããã PostgreSQLã«å¿ èŠãªåæã®éã®æšå®å€ãããŸããŸäœæããŸããã ãããŠãã¡ãããçµéšã åã®å®éšãšãããã¿ã€ãã®äž»ãªç®æšã¯çµéšã§ãã
ãã®åŸãäž»ãªäœæ¥ãå§ãŸããŸããã éçºã«ã¯çŽ1幎ããããŸããã çµäºãããã£ãšåã«ãã¡ãŒã«ããã¯ã¹ãOracleããPostgreSQLã«ç§»åããŸããã ç§ãã¡ã¯åžžã«ãããå€ãããããæè¡çãªä»äºããèŠãã300ãã©ãã€ãã転éããPostgreSQLã§äœæ¥ãéå§ãããããªããšã¯æ±ºããŠãªãããšãç解ããŠããŸããã ããã¯èµ·ãããŸããã ç§ãã¡ã¯ééããªãæ éããããŒã«ããã¯ãããã¹ãŠãæªãã§ãããã äžéšã®ã¡ãŒã«ããã¯ã¹ãOracleã«ååšããäžéšã®ã¡ãŒã«ããã¯ã¹ãPostgreSQLã«ååšããå Žåã移è¡ã«æéããããããªãé·ãæéãããããšãç解ããŸããã
2015幎ã®å€ã«ãããã¯ã¹ã移åããŸããã æžã蟌ã¿ããã¹ãã管çãªã©ãè¡ãã¡ãŒã«ããŒã ã¯ãã¡ãŒã«ããã¯ã¹ã移åããŸããã ããã«ãããéçºãå€§å¹ ã«å éããŸããã æœè±¡VasyaãèŠããããããªããèŠããããããªãã¯ãããä¿®æ£ããããšãã§ããŸã-ãããã¯2ã€ã®ç°ãªããã®ã§ãã
ãã¹ãŠã®æ©èœãè¿œå ããŠå®è£ ããåã§ããéã¢ã¯ãã£ããªãŠãŒã¶ãŒã®ç§»åãéå§ããŸããã ã¡ãŒã«ãå±ããŠãŒã¶ãŒãéã¢ã¯ãã£ããšåŒã³ãæçŽãè¿œå ããŸããã圌ã¯ããããèªã¿ãŸããããŠã§ããã¢ãã€ã«ãIMAPã®ãããã§ããããŸããã æ®å¿µãªããããã®ãããªãŠãŒã¶ãŒãããŸãã ããšãã°ãIMAPããŸã å®å šã«å®è£ ãããŠããªãããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ãã³ã®ååãæ©èœããŠããªãã£ããšãã«ããã®ãããªéã¢ã¯ãã£ããªãŠãŒã¶ãŒãæºåž¯ãå§ããŸããã
ããããããã¯ç§ãã¡ãéåžžã«åæ¢ã§ãã¹ãŠã®ç®±ãå£ãããšã«ããããã§ã¯ãªããé転éã®åœ¢ã§èšç»Bãããããããç§ãã¡ã倧ãã«å©ããããã§ãã èªååãããããŸããã ãŠãŒã¶ãŒã転éããããšãã°ãWebã€ã³ã¿ãŒãã§ãŒã¹ãžã®ã¢ã¯ã»ã¹ãçªç¶è©Šã¿ã-èµ·ããŠã¢ã¯ãã£ãã«ãªã£ã-ç§ãã¡ã¯åœŒã®æ©èœãå£ããªãããã«Oracleã«æ»ããŸããã ããã«ããã転éã³ãŒãã®å€æ°ã®ãã°ãä¿®æ£ã§ããŸããã
ãã®åŸã移è¡ãç¶ããŸããã ããã«ããã€ãã®èå³æ·±ãäºå®ããããŸãã ç§ãã¡ã¯ãã¹ãŠã®éººãæžãæããããã«10人幎ãè²»ãããŸããã
移è¡èªäœã¯éåžžã«é«éã§ããã ããã¯4ãæã®ã¹ã±ãžã¥ãŒã«ã§ãã åè¡ã¯ããµãŒãã¹ãPostgreSQLããæäŸããè² è·ã®å²åã§ãã ãµãŒãã¹ã«åå²ïŒIMAPãWebãPOP3ãã¿ããã¢ãã€ã«ãªã©ã
æ®å¿µãªãããæ·±byã¯95ïŒ ãè¶ ããããšã¯ã§ããŸããã ç»é²ã¯Oracleã«æ®ã£ãŠãããããå šå¡ã4æã«ç§»ãããšã¯ã§ããŸããã§ãããããã¯ããªãè€éãªã¡ã«ããºã ã§ãã ãã®ãããæ°ãããŠãŒã¶ãŒãOracleã«ç»é²ããããã«å€ã«PostgreSQLã«è»¢éããŸããã 5æã«ç»é²ãæ®åœ±ãã7æã«ãã§ã«ãã¹ãŠã®OracleããŒã¿ããŒã¹ãå®æžããŸããã
倧ããªå€æŽ
macs_pgã®å¥ã®æœè±¡åãæœè±¡åã«çŸãããã¹ãŠã®éººã解ããŸããã è¡ããããã¹ãŠã®æœè±¡åã¯ãæ éã«æžãçŽããªããã°ãªããŸããã§ããã äžçªäžã«ã¯libpqããããæ¥ç¶ããŒã«ãã¿ã€ã ã¢ãŠãããšã©ãŒåŠçãããã³ããããã¹ãŠãéåæã§ããapqã®å¥ã®å°ããªã¬ã€ã€ãŒãäœæããŸããã
ã·ã£ãŒãã£ã³ã°ãšãã©ãŒã«ããã¬ã©ã³ã¹ã¯ãã¹ãŠåãã§ãã ããã¯ãšã³ãã¯ãŠãŒã¶ãŒããèªèšŒããŒã¿ãåãåããBlackBoxã§ãŠãŒã¶ãŒIDãšã·ã£ãŒãã®ååãšäº€æããŸãã ã·ã£ãŒãã®ååã«pgãšããæåãå«ãŸããŠããå Žåãã·ã£ãŒããšåŒã°ããæ°ãããµãŒãã¹ã«å¯ŸããŠå¥ã®èŠæ±ãè¡ããŸãã ããã¯ãšã³ãã¯ããã®ãŠãŒã¶ãŒã®èå¥åãšãããŒã¿ããŒã¹ãååŸããã¢ãŒããããã«æž¡ããŸãã ããšãã°ãããã¹ã¿ãŒãå¿ èŠãããåæã¬ããªã«ãå¿ èŠãããæãè¿ããã¹ããå¿ èŠããªã©ã§ãã Sharpeiã¯æ¥ç¶æååã圌ã«è¿ããŸãã 次ã«ãããã¯ãšã³ãã¯æ¥ç¶ãéããä¿æããŠäœ¿çšããŸãã
æ å ±ãç¥ãããã«ã誰ããã¹ã¿ãŒã§ã誰ãã¬ããªã«ã§ã誰ãçããŠããã誰ãæ»ãã§ããŠã誰ãåŸãã«ããŠã誰ãããªãã®ããç¥ãããã«ãã·ã£ãŒãã€ã¯1ç§ããšã«æçµããŒã¿ããŒã¹ã«è¡ãããã®ã¹ããŒã¿ã¹ãå°ããŸãã ãã®å Žæã«ãã·ã£ãŒãã£ã³ã°ãšãã©ãŒã«ããã¬ã©ã³ã¹ã®äž¡æ¹ã®æ©èœãæ ãã³ã³ããŒãã³ããç»å ŽããŸããã
éã«é¢ããŠã¯ãããã€ãã®å€æŽãå ããŸããã Oracleã¯ããã»ããµã³ã¢ã®ã©ã€ã»ã³ã¹ãååŸããŠãããããåçŽã«æ¡åŒµããå¿ èŠããããŸãã 1ã€ã®ããã»ããµã³ã¢ãã€ãŸãSSDãã£ã¹ã¯ã«å€§éã®ã¡ã¢ãªãè©°ããŸããã å°æ°ã®ããã»ããµã³ã¢ãåããå°æ°ã®ããŒã¹ããããŸããããã¡ã¢ãªãšãã£ã¹ã¯ã®å·šå€§ãªã¢ã¬ã€ããããŸããã ãã©ãŒã«ããã¬ã©ã³ã¹çšã®ã¬ããªã«ã¯åžžã«1ã€ã ãã§ããããã以éã®ã¬ããªã«ã¯ãã¹ãŠãéã§ãã
PostgreSQLã§ã¯ãã¢ãããŒããå€æŽããŸããã åã·ã£ãŒãã«å°ããªããŒã¹ãš2ã€ã®ã¬ããªã«ãäœæãå§ããŸããã ããã«ãããã¬ããªã«ã®èªã¿èŸŒã¿è² è·ãã©ããã§ããŸããã ã€ãŸããOracleã§ã¯ãã¹ãŠããã¹ã¿ãããPostgreSQLã§ã¯-2ã€ã®å°ããªãã·ã³ã§ã¯ãªã3ã€ã®ãã·ã³ãããµãŒãã¹ãæäŸãããPostgreSQLã§èªã¿åãå€ãã©ããããŸãã Oracleã®å ŽåãåçŽã«ã¹ã±ãŒãªã³ã°ããPostgreSQLã®å Žåãæ°Žå¹³ã«ã¹ã±ãŒãªã³ã°ããŸããã
ãæž©ãããããã³ãå·ãããããŒã¹ã«å ããŠããç±ããããŒã¹ãç»å ŽããŸããã ãªãã§ïŒ ã¢ã¯ãã£ããŠãŒã¶ãŒã®2ïŒ ãè² è·ã®50ïŒ ãäœæããããšãçªç¶ããã£ãããã§ãã ç§ãã¡ãã¬ã€ããããããªæªããŠãŒã¶ãŒãããŸãã ãããã®äžã§ãå¥ã ã®ããŒã¹ãäœããŸããã ãŠã©ãŒã ã³ã¢ãšå€§å·®ã¯ãããŸããããSSDããããŸãããããã»ããµãããç©æ¥µçã«äœ¿çšããããããããã»ããµã³ã¢ã1ã€å°ãªããªã£ãŠããŸãã
ãã¡ãããã·ã£ãŒãéã®ãŠãŒã¶ãŒè»¢éã®èªååãæ®åœ±ããŸããã ããšãã°ããŠãŒã¶ãŒãéã¢ã¯ãã£ãã§ãçŸåšã¯[SATAãã©ã€ãä»ã] satashnyããŒã¿ããŒã¹ã«äœãã§ããŠãçªç¶IMAPã®äœ¿çšãéå§ããå ŽåãããŠã©ãŒã ãããŒã¹ã«è»¢éããŸãã ãŸãã¯ã圌ãæããåºå°ã§6ãæé移åããŠããªãå Žåã¯ããå¯ããæ¹ã«ç§»ããŸãã
å€ãã¢ã¯ãã£ããŠãŒã¶ãŒã®ã¡ãŒã«ãSSDããSATAã«ç§»åããããšã¯æ¬åœã«ããããããšã§ãããããã¯ã§ããŸããã ããªããã¢ã¯ãã£ããŠãŒã¶ãŒã§ãSSDã«äœãã§ããŠã1,000äžéã®ã¡ãŒã«ãããå Žåããããã¯ãã¹ãŠSSDã«ãããŸãããããŸãå¹æçã§ã¯ãããŸããã ãããããããŸã§ã®ãšãããPostgreSQLã«ã¯éåžžã®ããŒãã£ã·ã§ã³åå²ã¯ãããŸããã
ãã¹ãŠã®èå¥åãå€æŽããŸããã Oracleã®å Žåããããã¯ãã¹ãŠã°ããŒãã«ã«äžæã§ããã ãã®ã·ã£ãŒãã«ã¯ãã®ãããªç¯å²ãããããã®ããã«æžãããŠãããšããå¥ã®åºç€ããããŸããã ãã¡ããããšã©ãŒã®ããã«èå¥åã亀差ãããã¹ãŠã®çŽååããã®äžææ§ã«çµã³ä»ããããŠãããšããç§ãã¡ã¯ãã¡ã«ãããæã£ãŠããŸããã çãã
PostgreSQLã®å Žåãèå¥åãåäžã®ãŠãŒã¶ãŒå ã§äžæã§ããå Žåãæ°ããã¹ããŒã ã«åãæ¿ããããšã«ããŸããã ãããã¬ã¿ãŒèå¥åãäžæã§ããåã§ããã°ãuidããããã¢ã¯äžæã§ãã ãã¹ãŠã®ã¿ãã¬ããã«ã¯ãæåã®uidãã£ãŒã«ããããããã¹ãŠã«æ¥é èŸãä»ããŠããŸããããã¯ããããŸã§ã®ãšããã©ãã«ã§ããããŸãã
ããã¯ã¹ããŒã¹ãå°ãªããšããäºå®ã«å ããŠãå¥ã®éèªæãªãã©ã¹ããããŸãã ãããã®èå¥åã¯ãã¹ãŠã·ãŒã±ã³ã¹ããååŸããããããã€ã³ããã¯ã¹ã®æåŸã®ããŒãžã§ã®ç«¶åã¯å°ãªããªããŸãã Oracleã§ã¯ããã®åé¡ã解決ããããã«éã€ã³ããã¯ã¹ãè¿œå ããŸããã PostgreSQLã®å Žåãæ¿å ¥ã¯ã€ã³ããã¯ã¹ã®ç°ãªãããŒãžã«ç§»åãããããéåžžã®BããªãŒã䜿çšããç¯å²ã¹ãã£ã³ãè¡ããŸããã€ã³ããã¯ã¹å ã®1人ã®ãŠãŒã¶ãŒã®ãã¹ãŠã®ããŒã¿ãè¿ãã«ãããŸãã ãšãŠã䟿å©ã§ãã
ãã¹ãŠã®ãªããžã§ã¯ãã«ãªããžã§ã³ãå°å ¥ããŸããã ããã«ãããã¬ããªã«ããã®èªã¿åããå¯èœã«ãªããŸããããŸããå€ãããŒã¿ã§ã¯ãªãã次ã«ãã¢ãã€ã«ã®IMAPã®å¢åæŽæ°ã ã€ãŸããããã®ãªããžã§ã³ã§ãã®ãã©ã«ãå ã§äœãå€æŽãããã®ãããšãã質åã«å¯Ÿããçãã¯ãããã«ããå€§å¹ ã«ç°¡çŽ åãããŸããã
PostgreSQLã§ã¯ãé åãè€åäœã§ãã¹ãŠãããŸããããŸãã ããŒã¿éšåã®éæ£èŠåãè¡ããŸããã 次ã«äŸã瀺ããŸãã
ãããã¡ã€ã³ã®mail.boxããŒã ãã¬ãŒãã§ãã åæåã®è¡ãå«ãŸããŠããŸãã 圌女ã®äž»ããŒã¯uidããããã¢ã§ãã 1ã€ã®æåã«è€æ°ã®ã¿ã°ãå«ããããšãã§ãããããlidsã¿ã°ã®é åããããŸãã åæã«ãããã®ãããªã©ãã«ã®ä»ãããã¹ãŠã®æåããã ããããšãã質åã«çããã¿ã¹ã¯ããããŸãã æããã«ãããã«ã¯äœããã®ã€ã³ããã¯ã¹ãå¿ èŠã§ãã é åã«BããªãŒã€ã³ããã¯ã¹ãäœæãããšããã®ãããªè³ªåã«ã¯çããããŸããã ãããè¡ãã«ã¯ãuidãã£ãŒã«ããšlidsãã£ãŒã«ãã«ããªãããŒãªé¢æ°ã€ã³ããã¯ã¹ginã䜿çšããŸãã ããã«ãããããã®ãããªã¿ã°ã䜿çšããŠããŸãã¯ãã®ãããªã¿ã°ã䜿çšããŠããã®ãããªãŠãŒã¶ãŒã®ãã¹ãŠã®æåãæããŠãã ããããšãã質åã«çããããšãã§ããŸãã
ã¹ãã¢ãããžãã¯
- Oracleã¯ã¹ãã¢ãããžãã¯ã«èŠåŽãããããPostgreSQLã«ã¯ã¹ãã¢ãããžãã¯ããŸã£ãããªãããšãèªããŸããã ããããå®éšãšãããã¿ã€ãã®éçšã§ã PL / pgSQLãéåžžã«åªããŠããããšãããããŸããã ã©ã€ãã©ãªãã£ãã·ã¥ã®åé¡ã¯çºçãããä»ã®éåžžã«é倧ãªåé¡ã¯èŠã€ãããŸããã§ããã
- åæã«ã ããžãã¯ã®éãå€§å¹ ã«åæžãã ãããŒã¿ã®è«ççæŽåæ§ã«å¿ èŠãªãã®ã®ã¿ãæ®ãããŸããã ããšãã°ãæåãå ¥åããå Žåããã©ã«ããŒã©ãã«ã®ã«ãŠã³ã¿ãŒãå¢ãããŸãã
- å ã«æ»ãããšãã§ããªãããããšã©ãŒã®äŸ¡æ Œã¯ãã£ãšé«ããªããŸãã ã æ®å¿µãªãããç§ãã¡ã¯æªãã³ãŒããã¬ã€ã¢ãŠãããåŸãæ°åç»ããŸããããã®ããšã«ã€ããŠãç§ã®ååã®Alexander ã¯ãç§ãã¡ã®äŒè°ã§å¥ã®å ±åãããŸãã ã
- ã©ã€ãã©ãªãã£ãã·ã¥ããªãããããããã€ãã¯ããã«ç°¡åã§ãã 以åã®ããã«ãååæã«1åã§ã¯ãªããé±ã«2ã3åä¹ããŸãã
ãµãŒãã¹ã¢ãããŒã
- ããŒããŠã§ã¢ãå€æŽããæ°Žå¹³æ¹åã«æ¡åŒµãå§ãããããããŒã¹ã®ä¿å®æ¹æ³ãå€æŽããŸããã çŸåšã SaltStackãæäœããããŒã¹ ã ç§ãã¡ã«ãšã£ãŠåœŒã®æãéèŠãªãã©ãŒæ©èœã¯ãçŸåšããŒã¹ã«ãããã®ãšç§ãã¡ãããããæåŸ ãããã®ãšã®éã®è©³çŽ°ãªéããèŠãèœåã§ãã 芳å¯ãæºè¶³ãããå Žåããã®äººã¯ãããŒã«ã¢ãŠãããã¿ã³ãæŒããããŒã«ããŸãã
- 移è¡ã«ãã£ãŠã¹ããŒã ãšã³ãŒããå€æŽããŸã ã ããã«ã€ããŠå¥ã®ã¬ããŒãããããŸãã ã
- ç§ãã¡ã¯æåã®ãµãŒãã¹ãæ®ããå¯èœãªããšã¯ãã¹ãŠèªååãããŸãã ã ãŠã£ã¶ãŒãã®åãæ¿ãããŠãŒã¶ãŒã®è»¢éãæ°ããã·ã£ãŒãã®ããŒããªã©-ãããã¯ãã¹ãŠãã¿ã³ã§éåžžã«ç°¡åã§ãã
- æ°ããããŒã¿ããŒã¹ã®å±éã¯1ã€ã®ãã¿ã³ã§ãããããéçºçšã®ä»£è¡šçãªãã¹ãç°å¢ãçšæãããŠããŸãã åéçºè ã«ã¯ãå¿ èŠã«å¿ããŠ2ã€ã®ããŒã¹ããããŸããããã¯éåžžã«äŸ¿å©ã§ãã
åé¡
ãã®ãããªããšã¯æ±ºããŠã¹ã ãŒãºã«é²ã¿ãŸããã
ããã¯ãèªåã§è§£æ±ºã§ããªãã£ãåé¡ãæ±ããã³ãã¥ããã£ã®ã¹ã¬ããã®ãªã¹ãã§ãã
- æ¿å ¥ã®ExclusiveLockã®åé¡
- ãã§ãã¯ãã€ã³ãé åž
- 巚倧ãªshared_buffersãšã®é¢ä¿ã®æ¡åŒµã«å¯ŸããExclusiveLock
- ãã¹ã¿ãŒãããã¥ãŒã ããåŸãã¬ããªã«ã§èµ·åããã»ã¹ããã³ã°ãã
- è€è£œã¹ããããšåé¢ã¬ãã«
- BackendIdGetTransactionsã®ã»ã°ã¡ã³ããŒã·ã§ã³éå
ã€ãŸããç§ãã¡ã¯ã³ãã¥ããã£ã«è¡ããå©ããŠãããŸããã ããã¯ããšã³ã¿ãŒãã©ã€ãºãµããŒãããªãå Žåã®å¯ŸåŠæ¹æ³ã®ãã¹ãã§ãããã³ãã¥ããã£ããããæ©èœããŠããŸãã ãšãŠãã¯ãŒã«ã§ãã ãã¡ãããç§ãã¡ã¯ãã£ãšå€ãã®åé¡ãèªåã§è§£æ±ºããŸããã
ããšãã°ãããã§ã¯éåžžã«äººæ°ã®ãããžã§ãŒã¯ããããŸããããç解ã§ããªãç¶æ³ã§ã¯ãèªåããã¥ãŒã ã®ããã§ããã ãããã®åé¡ã解決ããŸããã
PostgreSQLã®èšºææ¹æ³ãæ¬åœã«äžè¶³ããŠããŸããã Postgres Proã®ã¹ã¿ãããåŸ æ©ã€ã³ã¿ãŒãã§ã€ã¹ãå ¥æããŸããã ããã«ã€ããŠã¯ã2015幎ã®ãµã³ã¯ãããã«ãã«ã¯ã®PGããŒã§æ¢ã«è©±ããŸãã ã ãããã©ã®ããã«æ©èœããããèªãããšãã§ããŸãã Postgres ProãšEnterpriseDBã®ååãåŸãŠã9.6ã«ãŒãã«ã«å ¥ããŸããã ãã¹ãŠã§ã¯ãããŸãããããããã®éçºã®äžéšã¯9.6ã«å«ãŸããŠããŸããã ããã«ããã®æ©èœã¯æ¹åãããŸãã 9.6ã§ã¯ãããŒã¿ããŒã¹ã§äœãèµ·ãã£ãŠããããããè¯ãç解ã§ããããã«ããåãç»å ŽããŸããã
ãµãã©ã€ãº ããã¯ã¢ããã§åé¡ãçºçããŸããã å埩æéã¯7æ¥éã§ããã€ãŸããéå»7æ¥éã®éå»ã®ä»»æã®æç¹ã§å埩ã§ããã¯ãã§ãã Oracleã§ã¯ããã¹ãŠã®ããã¯ã¢ããããã³ã¢ãŒã«ã€ããã°ã®ã¹ããŒã¹ã®ãµã€ãºã¯ãã»ãŒããŒã¿ããŒã¹ã®ãµã€ãºã§ããã ããŒã¹ã¯15ãã©ãã€ãã§ã7æ¥éã§ã®ããã¯ã¢ããã«ã¯15ãã©ãã€ãããããŸãã
PostgreSQLã§ã¯ãbarmanã䜿çšããŸãããã®äžã§ãããã¯ã¢ããã«ã¯ããŒã¿ããŒã¹ã®ãµã€ãºã®å°ãªããšã5åã®ã¹ããŒã¹ãå¿ èŠã§ãã WALã¯å§çž®ãããŠããŸãããããã¯ã¢ããããªããããå®éã«ã¯æ©èœããªããã¡ã€ã«ã¬ãã«ã®å¢åããããäžè¬ã«ãã¹ãŠãã·ã³ã°ã«ã¹ã¬ããã§éåžžã«äœéã§ãã 300ãã©ãã€ãã®ã¡ã¿ããŒã¿ããã®ãŸãŸããã¯ã¢ããããå Žåãããã¯ã¢ããã«ã¯çŽ2ãã¿ãã€ããå¿ èŠã«ãªããŸãã ã¡ãŒã«ã¹ãã¬ãŒãžå šäœã20ãã¿ãã€ãã§ããããšãæãåºãããŠãã ããã ã€ãŸããéå»7æ¥éã«ã¡ã¿ããŒã¹ã®ããã¯ã¢ããã®ã¿ã10ïŒ ã«ãããªãããå¿ èŠããããŸããããããã¯ããªãæªãèšç»ã§ãã
ããè¯ããã®ãããããé©çšããããŒãã³ã¯æãã€ããŸããã§ãããããããã«ãªã¯ãšã¹ãã§ãã ãã®ãã©ãŒæ©èœãåæžããããã«äŸé ŒããŠããã»ãŒ1幎ãçµéããŸããã éåžžã«æ ¢ãªç·ã 2016幎ã®PGday㧠ããã¹ãŠãåæžããååã®Eugeneãããã«ã€ããŠè©±ããŸãã ã ããã¯æ¬åœã«ããã¯ã¢ãããããè¯ãæºãã¶ããã¹ããŒãã¢ããããæ£çŽãªå¢åããããŸãã
ãã®æç¹ãŸã§ã«PostgreSQLã«ç»å ŽããŠããå®éšããããã¿ã€ããããã³ãã®ä»ã®ããŒã¿ããŒã¹ã®çµéšããã転éäžã«å€§éã®ã¬ãŒããçºçããããšãäºæ³ãããŸããã ãããã圌ãã¯ããã«ããŸããã§ããã å€ãã®åé¡ããããŸãããããããã¯PostgreSQLãšã¯é¢ä¿ãããŸããã§ããã 10幎以äžã«ããã£ãŠå€ãã®ã¬ã¬ã·ãŒãèç©ãããŠãããããããŒã¿ã®åé¡ã§ãã£ã±ãã§ããã çªç¶ãäžéšã®ããŒã¿ããŒã¹ã§ã¯ããŒã¿ãKOI8-RãŸãã¯ãã®ä»ã®å¥åŠãªãã®ã§ãšã³ã³ãŒããããŠããããšãå€æããŸããã ãã¡ããã転éããžãã¯ã«ãšã©ãŒããã£ããããããŒã¿ã修埩ããå¿ èŠããããŸããã
å®äº
PostgreSQLã§æ¬åœã«èŠéããŠããããšããããŸãã
ããšãã°ãå€ãããŒã¿ãSSDããSATAã«ç§»åããããã®ããŒãã£ã·ã§ã³åå² ã fork batmanã䜿çšããªããçµã¿èŸŒã¿ã®ãªã«ããªãŒãããŒãžã£ãŒãäžè¶³ããŠããŸããããã¯ãããããbarmanã«ãŒãã«ã«å°éããªãããã§ãã ç§ãã¡ã¯ãã§ã«ç²ããŠããŸãã圌ãã¯ã»ãŒäžå¹Žé圌ãã蹎ã£ãŠããŸããã圌ãã¯æ¥ãã§ããŸããã ããã¯PostgreSQLãããã€ãŸãã«ãŒãã«å ããé¢ããŠã¯ãªããªãããã§ãã
åŸ æ©ã€ã³ã¿ãŒãã§ã€ã¹ãéçºããŸã ã 第10ããŒãžã§ã³ã§ã¯å®è¶³æ°ã³ããããçºçãããããã¯è¯å¥œãªç¶æ ã«ãããšæããŸãã ãŸãããã£ã¹ã¯ã®éåžžã®åäœãæ¬åœã«å¿ èŠã§ãã ãã£ã¹ã¯I / Oã®èŠ³ç¹ãããPostgreSQLã¯Oracleã«å€ãã®æ倱ããããããŸãã
çµæã¯äœã§ããïŒ ã¬ããªã«ã®è¥²æãèãããšãPostgreSQLã«ã¯1ãã¿ãã€ã以äžãããŸãã ç§ã¯æè¿ã5000åè¡ä»¥äžãããšæã£ãã æ¯ç§25äžä»¶ã®ãªã¯ãšã¹ããåŠçãããŸãã åèšã§3æŠå¹ŽããããŸãããã10人幎以äžãè²»ãããŸããã ã€ãŸããããŒã å šäœã®åªåã¯éåžžã«å°è±¡çã§ãã
äœãåŸãã®ïŒ æ ç¹ãã¯ããã«å€§ãããªããDBAã®æ°ãæžå°ããã«ãããããããå±éã¯ããé«éã«ãªããŸããã ãã®ãããžã§ã¯ãã®DBAã¯ãOracleã®å Žåãããå°ãªããªããŸããã
æããã©ããã«ããããããããã¯ãšã³ãã³ãŒãå šäœããªãã¡ã¯ã¿ãªã³ã°ããå¿ èŠããããŸããã é·å¹Žã«ããã£ãŠèç©ããŠãããã¹ãŠã®éºç£ã¯åæžãããŸããã ç§ãã¡ã®ã³ãŒãã¯ä»ã§ã¯ãã£ããããŠããŸããããã¯ãšãŠãè¯ãããšã§ãã
ã¹ããŒã³ãªãã®ã¿ãŒã«ã¯ãããŸããã çŸåšãPostgreSQLã§ã¯3åã®éã䜿çšããŠããŸãããããã¯Oracleã®ã³ã¹ããšæ¯èŒããŠãäœããããŸããã ãããŸã§ã®ãšããã倧ããªãã¡ã«ãã¹ã¯ãããŸããã§ããã
ç§ããã®ã¡ãã£ãšããã³ã¡ã³ãã ãã¡ãŒã«ãã§ã¯ãå€ãã®ãªãŒãã³ãœãŒã¹ã©ã€ãã©ãªããããžã§ã¯ããããã³ã¿ãŒã³ããŒãœãªã¥ãŒã·ã§ã³ã䜿çšããŠããŸãã ã»ãŒã©ãã«ã§ãããã¿ã€ããª3ã€ã®æ€ åïŒLinuxãnginxãpostfixïŒã«PostgreSQLãè¿œå ãããŸããã çŸåšãä»ã®ãããžã§ã¯ãã®å€ãã®æ ç¹ã§äœ¿çšããŠããŸãã 圌ã奜ãã ã£ãã 4çªç®ã¯ãè¯ããä¿¡é Œã§ããæ€ åã§ãã ããã¯ãµã¯ã»ã¹ã¹ããŒãªãŒã ãšæããŸãã
ç§ã¯ããããã¹ãŠæã£ãŠããŸãã ãããããé¡ãããŸãïŒ
Vladimir Borodin-PostgreSQLã䜿çšããYandex.Mailã®æåäºäŸ