2015幎ã®PG Dayã«ã³ãã¡ã¬ã³ã¹ã§æã人æ°ã®ãã£ãã¬ããŒãã®1ã€ã¯ãå±æ©åŸã®æ ç¹ãç
æ°ã«ãªã£ãå Žåã®ãŠã©ãžããŒã«ãããã£ã³ãšã€ã«ãã¹ã¯ã«ãã³ã¬ãªãšãã®è©±ã§ããããããã蚺æããŠããã«ããã¯ãæ¢ãå¿
èŠããããŸãã ã¬ããŒãã®ãã¹ãŠã®äŸã¯ãå®éã®Yandexã®å®è·µããåãããŠãããã€ã©ã¹ããšãbotnekãã®æ€çŽ¢ã«é¢ãã詳现ãªã¹ããŒãªãŒãæ·»ããããŠããŸãã ããŒã¿ããŒã¹ã®9.4ããã³9.5ããŒãžã§ã³ã®ã³ã³ããã¹ãã§åé¡ãèæ
®ããããšããäºå®ã«ããããããããŠã©ãžããŒã«ãšã€ã«ãã¹ã®ã¢ããã€ã¹ã®å
šäœçãªäŸ¡å€ãšå®çšçãªé©çšæ§ã¯å€ãã£ãŠããŸããã ãã®ã¬ããŒãã®è»¢åãæäŸããŠåãã§ããŸãã
ã€ãªã€ã»ã³ã¹ã¢ããã£ã³ã¹ããŒã«ããçŽ¹ä» ïŒä»ãç§ãã¡ã¯ããªããæ¬åœã«ãªã©ã¯ã«ãæã¡ãããªãçããæ¹æ³ã«ã€ããŠã®ç©èªãæã¡ãŸãããããã§ã¯ãããŸããã å®éãããã¯æçšãªã¬ããŒãã§ãããªããªããçŸåšæ±ããŠããåé¡ã®1ã€ã¯èšºæããŒã«ã®åé¡ã ããã§ãã äžéšã®å Žæã§ã¯ãéåžžã®èšºæããŒã«ã®ä»£ããã«èšºæããŒã«ã䜿çšã§ããŸãããDBAã§ã¯ãªãLinuxéçºè
åãã®éåžžã«è€éãªããŒã«ã䜿çšããå¿
èŠããããŸãã DBAã®æ¯ã¯ããããã®ã¹ã¯ãªãããèŠããšå·ã€ãå§ããŸãã ãŸããYandexãšPG Proã®ã¡ã³ããŒã¯ã䜿çšããŠããPostgresã®èšºææ¹æ³ããããã®äœ¿çšæ¹æ³ãããã³ãã®äžçãã©ã®ããã«æ¹åãããã«ã€ããŠå°ã話ããŸãã
ãŠã©ãžããŒã«ã»ãããã£ã³ ïŒã¿ãªãããããã«ã¡ã¯ã ç§ã®ååã¯Vovaã§ãYandexã¡ãŒã«ã®ç®¡çè
ã§ãã ã¬ããŒãã¯Ildusãšå
±åã§ãPostgres Proã§PostgreSQLãéçºããŠããŸãã
Postgres蚺æã¬ããŒããšãã®éèŠãªãã€ã³ãã¯åçã§ãã ã¬ããŒãã®æåã®éšåã¯ãäœããã¹ãããã¢ãã¿ãªã³ã°ã倱æããå Žåã«äœããã¹ããã説æããŠããŸãã
ãã®å Žåãã©ãã§å®è¡ããŸããïŒ ç£èŠã®ççº-ããã¯éåžžã«æœè±¡çãªããšã§ãããŒã¿ããŒã¹ã«é¢é£ä»ããããç£èŠãççºããããšãæå³ããŸãã
Postgresã¯åªããããŒã¿ããŒã¹ã§ãããšèããŠããŸãã è¯ãããŒã¿ããŒã¹ãããããã¹ãŠæªããšããããã¯ååãšããŠäœãã®äžã«çœ®ãããŸãã ã»ãšãã©ã®å Žåãããã¯äœããã®ã·ã¹ãã ãªãœãŒã¹ã§ãã 圌女ã«ã¯ããã»ããµãŒããããŸããã 圌女ã«ã¯ãã£ã¹ã¯ããããã¯ãŒã¯ããããŸããã éãããã¯ãåç·ã®ããã¯ãã¿ãã¬ãããªã©ã«èããããšãã§ããŸãã ããããããŒã¹ãä»ã®äœãã«ããã£ãŠããå ŽåããããŸãã
åããããã¯ã·ã§ã³ããã®ããã€ãã®åçã ããã§ãããšãã°ãããã»ããµã«çœ®ããã1ã€ã®PostgresããŒã¹ã®htopã Load Average 200ãå€æ°ã®ã»ãã·ã§ã³ãããã³ãŠãŒã¶ãŒç©ºéã®ããã»ããµå
šäœããããçºçããŸãã
ããŒã¹ã¯ãã€ãŒã«ã«èŒããããšãã§ããŸãã sgresã§éåžžã«äººæ°ã®ãããã®ã äžå¯Ÿã®ãã£ã¹ã¯ã§ã®å»æ£ã¯ã»ãŒ100ïŒ
ã§ãã 倧éã®ãã£ã¹ã¯èªã¿åããåŸ
ã¡ãŸãã
ãã£ã¹ã¯ã¯iopsãŸãã¯åž¯åå¹
ã§çµããã ãã§ãªããæ®å¿µãªããæå®ã®äœçœ®ã§çµããå¯èœæ§ããããŸãã ããã¯ãxlogã»ã¯ã·ã§ã³ã§çµäºããããŒã¿ããŒã¹ã®åçã§ãã
ããŒã¹ããããã¯ãŒã¯äžã«ãããxlogãã¬ããªã«ãã¢ãŒã«ã€ãããŸãã¯ä»ã®å Žæã«è»¢éããŠã¯ã©ã€ã¢ã³ããžã®åçããåããããç¶æ³ããããŸãã
ã¡ã¢ãªã®å Žåããã¹ãŠãããè€éã§ãã ååãšããŠãåé¡ãã¡ã¢ãªã«ããããšã¯ããããŸããã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®èšå®æ¹æ³ã«å¿ããŠãSWAPãžã®ã¯ããŒã«ãéå§ãããã£ã¹ã¯ã¢ã¯ãã£ããã£ã®åé¡ãšããŠããã確èªããããOOMãå°çããŠããã¯ãšã³ãã匷å¶çµäºããçµæãšããŠPostgreså
šäœãå€æããŸãã
ãããã¯ãã¹ãŠãPostgresã®å€éšã®ããŒã«ã«ãã£ãŠéåžžã«ãã蚺æãããŸãã ã€ãŸãããæ°ã«å
¥ãã®top-likeãŠãŒãã£ãªãã£ãdstatãiostatãªã©ã§ãã ç§ã¯äž»ã«Linuxã«ã€ããŠè©±ããŸãã ããŒã¿ããŒã¹ãéãããã¯ã«çœ®ãããŠããå Žåããã®æ
å ±ã¯PGããã¯ãä»ããŠè¡šç€ºã§ããŸãããŸããããããã®åºåãç®ã§ç°¡åã«è§£æã§ããããã«ãããªã¯ãšã¹ããããã€ããããŸãã ãããããããã¯Postgres wikiã§ã³ã³ãã€ã«ãããŠããŸãã å®éãäžèšã®äŸã¯ãã¹ãŠãçŸãã瀺ããŠããŸãã
ççºãçºçããäœãã«ééããŸããã 圌ããäŒãã ãã®ã®ããã«ãæªéã¯åœŒãç¥ã£ãŠããŸãã ã»ãšãã©ã®å Žåããã®å³ã®ããã«ãäœããå€æŽãããããäœããå±éãããããããŒã¹ã®è² è·ãå¢å ããããèŠæ±ã®èšç»ããªããªã£ãŠãæåŸ
ã©ããã«æ©èœããªããªã£ããããŸãã
ããŒãžã§ã³9.4ããåã«ã¯ãåªããpg_stat_statementsããŒã«ããããŸããã æãæéããããã¯ãšãªãæ€çŽ¢ã§ããŸãã ã€ãŸããããŒã¹ãæãå€ãã®æéãè²»ããã¯ãšãªã§ãã ããŠãããã¯ãã§ã«æšæºã§ãããåæã説æããŠããã®æéãã©ãã§éããããäœãããããªã©ã確èªããŸãã ãã ããããŒã¿ããŒã¹ãã¯ãšãªã®å®è¡ã«è²»ããæéã¯æè¯ã®ææšã§ã¯ãããŸããã ãã®æéã¯ããŸããŸãªãªãœãŒã¹ã«è²»ããããšãã§ããŸãã ãã£ã¹ã¯ããèªã¿åã£ãããããã»ããµãã匷å¶ãããããäœãããœãŒãããããäœããã®ããã¯ãæåŸ
ãããã§ããŸãã
9.4ããã¯ãpg_stat_kcacheãšåŒã°ããçŽ æŽããããã®ããããŸãããããã«ããããŠãŒã¶ãŒæéã§ã®ããã»ããµæ¶è²»ãã·ã¹ãã æéã§ã®ããã»ããµæ¶è²»ãªã©ããªã¯ãšã¹ããŸã§ç¢ºèªã§ããŸãã ãããŠã圌女ãã§ããéåžžã«ã¯ãŒã«ãªããšã¯ããã£ã¹ã¯ããã®ç©ççãªèªã¿åãå€ãå
±æãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããããŒãžãã£ãã·ã¥ããŒã¿ãååŸããããšã§ãã
ããã€ãã®äŸã ããšãã°ãäžäœã®ã¯ãšãªã«é¢ããæ
å ±ã衚瀺ããã¯ãšãªã ç¹°ãè¿ããŸãããæéã§ãœãŒããããŠããŸãã ããããã·ã¹ãã æéããŠãŒã¶ãŒæéããã£ã¹ã¯ããã®æžã蟌ã¿/èªã¿åããã¡ã¢ãªããã®ååŸéãªã©ã§ããã»ããµãã©ãã ãæ¶è²»ãããã瀺ããŠããŸãã ãããã®ãªã¯ãšã¹ãã®ããã¹ããèŠãããšãã§ããŸãã
ãªã¯ãšã¹ãèªäœã¯æ¬¡ã®ããã«ãªããŸãã ãã®ããã¹ãã¯ã³ããŒã§ããŸãã 圌ã¯ããã»ã©è€éã§ã¯ãããŸããã ããã§ã¯ãã¹ãŠãç°¡åã§ãã ãã®ç¹å®ã®ã±ãŒã¹ã§ã¯ãpg_stat_statementsãpg_stat_kcacheããããŒã¿ãååŸããããŒã¿ããŒã¹ããã®ãªã¯ãšã¹ãã«è²»ãããæéã§ãœãŒãããŸãã
ããããããã¯pg_stat_kcacheã®æ倧ã®å©ç¹ã§ã¯ãããŸããã ãã£ã¹ã¯ããã®èªã¿åãããã£ã¹ã¯ãžã®æžã蟌ã¿ãªã©ã§ãœãŒãã§ããŸãã ããšãã°ãåãpg_stat_statementsã¯shared_hitãšshared_readãå
±æã§ããŸãã ããã¯ãå
±æãããã¡ããã³ãã®ä»ãã¹ãŠããã®èªã¿åããæå³ããŸãã ãã以å€ã¯ãã¹ãŠããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããŒãžãã£ãã·ã¥ããååŸããããšãããã£ã¹ã¯ããç©ççã«ååŸããããšãã§ããŸãã pg_stat_kcacheã¯ããããåé¢ã§ããŸãã 圌ã¯getrusageïŒïŒã·ã¹ãã ã³ãŒã«ã䜿çšããŠãããè¡ããŸãããã®ã·ã¹ãã ã³ãŒã«ã¯ãåãªã¯ãšã¹ãã®åŸã«çæ£ããŸãã
ããšãã°ãèªã¿åãå€ãæã€ãã£ã¹ã¯äžã«çœ®ãããããŒã¹ãããããã®ãããªãã®ãæ§ç¯ããŸããããã£ã¹ã¯ããã®ç©ççãªèªã¿åãå€ã§ãœãŒãããã¯ãšãªã§ãã ãããŠããããã¯çžå¯Ÿçãªå€ã§ãã ããã§ã¯ãæäžäœã«ãããªã¯ãšã¹ããããããšã¯æããã§ãã æ°ããŒã»ã³ãããã£ã¹ã¯ã«å°éãããã£ã¹ã¯ããäœããèªã¿åããŸãã ãã以å€ã®ãã¹ãŠã¯ãå
±æã¡ã¢ãªãŸãã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãã£ãã·ã¥ããæäŸãããŸãã ã€ãŸãããã®ããŒã¿ããŒã¹ã®ãã£ãã·ã¥ã¯éåžžã«å¹æçã«æ©èœããŸããã 9.4ã䜿çšããå Žåã¯ãå¿
ãpg_stat_kcacheã䜿çšããŠãã ããã
äžè¬ã«ç¹å®ã®èŠæ±ã«ãã£ãŠæ±ºå®ãããªããããè€éãªåé¡ããããŸãã ããšãã°ããã®ãããªåé¡ã æåã®ç¢å°ã§ããã£ã¹ã¯IOãå¢ãããŸãã ç»åã®äžå€®ã«ãããã£ãŒã«ãã®èª¬æã ãããã®2ã€ã®åã¯iopsã§ãã iopsã1äžãã10äžã«å¢ãããŸãã ãããŠããã°ããããŠãããããŒã¹ã¯ã·ã¹ãã æéã§ããã»ããµå
šäœã殺ãå§ããŸãã ãã®æç¹ã§ããã¹ãŠãæªããªããäžè¬çã«åœŒå¥³ãäœãããŠãããã¯æ確ã§ã¯ãããŸããã ãããŠãpg_stat_statementsãŸãã¯pg_stats_kcacheãèŠããšãã·ã¹ãã æéã«ãã·ã¹ãã ããã¹ãŠã®ãªã¯ãšã¹ããå°ãã§ãå®è¡ããããšãããããŸãã ããã¯ç¹å®ã®ã¯ãšãªã®åé¡ã§ã¯ãããŸããã
ããã»ããµãç¡é§ã«ããŠãããã®ã蚺æããããã®çŽ æŽãããããã©ãŒãã³ã¹ãŠãŒãã£ãªãã£ããããDBAãã«ãŒãã«éçºè
ã«ãšã£ãŠã¯äŸ¿å©ã§ã¯ãããŸãããããµã³ããªã³ã°ã«ãã£ãŠæ©èœããæŠéããã»ã¹ãå·ã€ããŸããã éåžžãã·ã¹ãã ãã匷å¶ãããããšã¯ãããŸããã ãããŠãããã§ãããã»ããµæéã®ã»ãšãã©ãã¹ãã³ããã¯ã«è²»ããããŠããããšãããããŸãã åæã«ãæãå¯èœæ§ãé«ãã®ã¯ã軜éããã¯ãååŸããããšã§ãã ãããŠãæãå¯èœæ§ãé«ãã®ã¯ããããã¡ãã£ãã·ã¥ã®é åã§ãã 圌ãã¯ãPinBufferãUnpinBufferãReadBufferãªã©ãåŒã³åºããŸããã ãã®çµè«ã®perf topãèŠããšãããã»ã¹ãã·ã¹ãã æéã®ã©ãã§è²»ããããŠããããç解ããããããŒã¿ããŒã¹å
ã§æ£ç¢ºã«ã©ãã§è²»ããããŠããããæšæž¬ãããã§ããŸãã
åãã¹ãã³ããã¯ãèŠããšæªãç¶æ³ããããŸãããåæã«ããã®ã¹ãã³ããã¯ã®å
¥æå
ãšãã®åŠçæ¹æ³ã¯æ確ã§ã¯ãããŸããã
ããŒã ç»åãããã¯ãã§ãã ãã£ãšæ·±ããããã§äœãèµ·ãã£ãŠããã®ããäœã«åºã¥ããŠããã®ããèŠãããšãã§ããŸãã
ããã«ã¯ããã€ãã®ããŒã«ããããŸãã ãããã®1ã€ã¯ãdtraceãšsystemtapïŒLinuxã®å ŽåïŒã§ãã ãã®å©ç¹ã¯ãæåéããã¹ãŠãèŠãããšãã§ããããšã§ãã ãããããã®ããã«ã¯ãããã€ãã®ã³ãŒããæžãå¿
èŠããããŸãã ãããæåã§ãã 次ã«ãsystemtapãPostgresã«ã¢ã¯ã»ã¹ã§ããããã«Postgresãåæ§ç¯ããå¿
èŠããããŸãã ãããŠæ倧ã®åé¡ã¯ãsystemtapãã©ã®ãããªæ¡ä»¶äžã§ãé©çšã§ããªãããšã§ãã è² è·ãã¹ãçšã®ã¹ã¿ã³ãã§äœ¿çšã§ããŸãã åžžã«å®å®ããŠåäœãããšã¯éãããçç£ã«è¿œå ãããå¯èœæ§ãããããã§ãã ããã¯ç§ãã¡ãšäœåºŠãèµ·ãããŸããã åºåãšããŠããããã°ãã§systemtapã䜿çšãããããã°ç¶æ³ã«ã€ããŠæžããŸããã
å¥ã®ããŒã«ã¯å€å
žçãªGDBãããã¬ãŒã§ãããããã䜿çšããŸãã éåžžã«ç°¡åã«èšãã°ãããã»ã¹ã«åºå·ããã¹ã¬ããããããã¯ãã©ãã¯ãåé€ããŸããPostgresã®å Žåã1ã€ã®ããã»ã¹ã1ã€ã®ã¹ã¬ããã§ãã ãããã£ãŠãããã¯ãã©ãã¯ãåé€ããã ãã§ãã ãããŠãããã»ããµããåãé¢ããŸãã
çµè«ã¯æ¬¡ã®ãšããã§ãã ãããã¡ãã£ãã·ã¥ãæäœããé åã§è»œéããã¯ãåŸ
æ©ããŠããŠãã©ããã§ç°¡åã§ã¯ãªããç¹å®ã®ãœãŒã¹è¡ã§äœæ¥ããŠããããšãããããŸãã 591è¡bufmgr.cã®ãœãŒã¹ã³ãŒãã«ç§»åããŠãããã§äœãèµ·ãããã確èªã§ããŸãã Cãç¥ããªããŠããéåžžã«è¯ãã³ã¡ã³ãããããã©ãã§äœãèµ·ãã£ãŠããã®ããç解ã§ããŸãã
GDBã«äžæå¿«ãªæ¬ é¥ãããå¯äžã®ããšã ããã»ã¹ã«ããã¿ã€ããŠctrl + Cãšèšããšã SIGTERMãSIGQUITã§ã¯ãªãããã»ã¹ã«é£ã³ãŸããã SIGKILLã¯é£ã³ãPostgresã¯ãããè¿œå ããŸãã ãããã£ãŠãéåžžã«æããªãã€ã³ãã£ã³ã°ãäœæããŸããã ãã®ãã€ã³ãã£ã³ã°ã«éä¿¡ãããã¹ãŠã®ã·ã°ãã«ãGDBã«éä¿¡ããããã§ã¯ãããŸããã ãããã£ãŠãæããããã¯ãšã³ãã«ãå°éããŸããã
ã¹ãã©ããã䜿çšãããšãã¢ãããã¯ããã¯ãšã³ãããã¹ã¿ãã¯ãã¬ãŒã¹ãåé€ã§ããŸãããã®åŸã圌ãã¯ç®ãåèŠããããã§äœãèµ·ãã£ãŠããã®ããç解ããŸãã ãã©ã¹ã®ç¹ã¯ãå®å®ããŠåäœãããæŠéããå·ã€ããªãããšã§ãã ãããæ©èœããããã«ã¯ãäœãåæ§ç¯ããå¿
èŠã¯ãããŸããã debuginfoããã±ãŒãžãã€ã³ã¹ããŒã«ããã ãã§ãïŒpostgresql-debuginfoãlibc-debuginfoãkernel-debuginfoããããŠããªãã¯æºè¶³ããã§ãããã éèŠãªã®ã¯ãããã¯ãšã³ããæéãè²»ãããŠããæ£ç¢ºãªå Žæãã³ãŒãè¡ã«å¯ŸããŠæ£ç¢ºã«ç解ã§ããããã«ããããšã§ãã
ãã¬ãŒã³ããŒã·ã§ã³ã®2çªç®ã®éšåã¯ãäœããã®ããã©ãŒãã³ã¹ã®åé¡ãæãä»ããªãã£ãå Žåã®å¯ŸåŠæ¹æ³ã«å°å¿µããèªä¿¡ãæã£ãŠåçŸããŸãã ããªãã¯åœŒå¥³ãããã«æ²»çããæ¹æ³ãç¥ããŸããã ãããŠã圌ãã¯ããªãããã¥ãŒã¹ã¬ã¿ãŒã«äœãæžãã¹ãããæããŠãäœããã¹ããå°ããŸãã ãã ãããã¥ãŒã¹ã¬ã¿ãŒã«æžã蟌ãåã«ãããå€ãã®èšºæãåéã§ããŸãã
ããã€ãã®äŸã ããšãã°ããã®ãããªç¶æ³ããããŸããã ããã»ããµäžã«ããããŒã¹ãæã¡ãŸããã ããã®2çªç®ã®åçã§ã¯ãé»è²ããŠãŒã¶ãŒã¹ããŒã¹ã®ããã»ããµã§ãããã»ãšãã©äœãé£ã¹ãã«ãã¹ãŠæ¶è²»ãããŠããããšãããããŸãã åæã«ããã®ãããªãããã¡ã€ã«è² è·ã§ã¯ãããŒã¹ãè² è·ããŸã£ããåŠçããªãã£ãæ倧2åã®æéééããããŸããã ãã¹ãŠãå©å®³é¢ä¿ã§ããã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã®ããŒã¹ãã¯è¡šç€ºãããŸããã§ããã
perftopã®åºåãç®ãåŒããã®ã§ã¯ãããŸããã ãã®æç¹ã§æ³šæãæã£ãå¯äžã®ããšã¯ããã®é害ãåºåã«è¡šç€ºããããšãginãæäœããåŒã³åºãã衚瀺ãããããšã§ãã ããã«è²»ããããæéã¯éåžžã«å°ãªããšããäºå®ã«ããããããã ããããããã§å€±æãããšããã«ããããã衚瀺ãããŸãã ãã¹ãŠãè¯ããªããšããã«æ¶ããŸãã ãã®ããŒã¿ããŒã¹ã«ã¯ãžã³ã€ã³ããã¯ã¹ã1ã€ãããŸããã ãŸãããã®gin-indexã䜿çšããã¯ãšãªããªãã«ããŠãªãã«ãããã¹ãŠãæ£åžžã§ããããšã確èªããŸããã
ãããã圌ãã¯ç解ãå§ããŸããã ãã€ãã®ããã«ãããã¥ã¡ã³ããèªãŸãªãã£ãããšãå€æããŸããã 9.4ã§ã¯ãginã®fastupdateãç»å ŽããŸããã ã»ãšãã©ã®å Žåãæ¿å
¥æéã¯ççž®ãããŸãããé決å®çãªæ¿å
¥æéãçºçããå ŽåããããŸãã ç§ãã¡ã«ãšã£ãŠãæéã®å®å®æ§ã¯ãçžå¯Ÿçã«èšãã°ããã®æéèªäœã®ééãããéèŠã§ãã fastupdateããªãã«ããŸãããããã¹ãŠãæ£åžžã§ããã ãããã£ãŠãæåã®æšå¥šäºé
ã¯ããã¥ãŒã¹ã¬ã¿ãŒã«æžã蟌ãåã«ããã¥ã¡ã³ããèªãããšã§ãã ã»ãšãã©ã®å Žåãããã«çãããããŸãã
2çªç®ã®äŸã ç¹°ãè¿ãã«ãªããŸãããæ®åœ±äžã«ãéåžžèãªç§åäœã®åçã®ããŒã¹ãã®ã¹ãã£ã³ã芳å¯ããŸããã ãŸããèªåããã¥ãŒã ããã§ãã¯ãã€ã³ãããŸãã¯ä»ã®ã·ã¹ãã ããã»ã¹ãšæéçã«çžé¢ããŸããã§ããã
perfoã®åŽé¢ããã¯ããã®ããã«èŠããŸããã compaction_allocã®æäžéšã«ã¯ãç°åžžãªãã®ã¯äœããããŸããã§ããã ããã»ããµæ¶è²»ã®å€å
žçãªå³ã
GDBã§ã¯ãå
±æã¡ã¢ãªã®åé¡ã®ããã«èŠããŸãããããã¯ããããã¡ãã£ãã·ã¥ã®é åã«ãããŸããã éèŠãªã®ã¯ã9.4ã«æŽæ°ããåŸã«åºå§ããŸããã 9.3ã§ã¯ããã§ã¯ãããŸããã§ããã 9.4ã§å€§èŠæš¡ããŒãžããµããŒããããèµ€ãåžœåããŒã¹ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¯ããã©ã«ãã§éæãªå€§èŠæš¡ããŒãžããªã³ã«ãªããããããããŠããããã圌ãã¯ãããèŠã€ãå§ããŸããã å®éãç§ãã¡ã¯ãã®åé¡ã«æåã«ééããããšã«ã¯ã»ã©é ãã
ãã®åé¡ãè°è«ããŠããã¹ã¬ãããžã®ãªã³ã¯ã¯ãã¡ãã§ãã éæãªå·šå€§ããŒãžããªãã«ãããšããã¹ãŠãé£ã³å§ããŸããã ããã¯2çªç®ã®æšå¥šäºé
ã§ãããããã¥ã¡ã³ãã®èªã¿æ¹ã圹ã«ç«ããªãã£ãåéã§ãã ãã ããã±ãŒã¹ã®95ïŒ
ã§åœ¹ç«ã¡ãŸãã ã€ã³ã¿ãŒããããæ€çŽ¢ããã®ã¯çã«ããªã£ãŠããŸãããããããããªã以å€ã®èª°ãããã®åé¡ã«ééããã§ãããã
3çªç®ã®äŸã ãã£ã¹ã¯IOã®å¢å åŸãã°ããããŠãããããŒã¿ããŒã¹ãã·ã¹ãã ã§ãã¹ãŠã®æéãè²»ããå§ãããšãã®åãåé¡ã ããã»ããµå
šäœã
ãŸããperfåºåã§ã¯ãã¹ãã³ããã¯ã®ããã«èŠããŸãã
äžå®æ°ã®backtrace'ovãæ®åœ±ããããã«åæããŠããããã¡ãã£ãã·ã¥ã®æäœã«é¢ããã»ãŒãã¹ãŠã®ããšãããããŸããã ãœãŒã¹ã«è¡ãå¿
èŠãããããŸããã
ãã®å Žåã®å€å
žçãªæšå¥šäºé
ã¯ãå
±æãããã¡ãæžããããšã§ãã éåžžãPostgresã§äœæ¥ãéå§ãããŠãŒã¶ãŒã¯ãå
±æãããã¡ãŒã«äœ¿çšå¯èœãªãã¹ãŠã®RAMãåæããŸãã ããã¯éåžžã²ã©ãçµãããŸãã åŸæ¥ã®æšå¥šäºé
ã¯ããã¹ãŠã®ã¡ã¢ãªã®25ïŒ
ã§ããã8 GB以äžã§ãã å®éã«ã 8 GBã«æžãããšããã®åé¡ã¯è§£æ¶ãããŸãã ã§ãããªãããã®çç±ã§ãå
±æãããã¡ã®äžã§å€ããåæžãããã£ãã®ã§ãã
ãœãŒã¹ã«è¡ãããããã®è¡ãã©ãã«ãããã調ã¹ãŸããã ãããã¡ãã£ãã·ã¥ã®ããŒãã£ã·ã§ã³ã®ããã¯ã®åšãã«ããããšãããããŸããã 9.5ã§ã¯ã128ã®å€ãããã©ã«ãã«ãªããŸãã 9.4ã§ããŸã 16ã§ãã ããã«ãããããã¯ã®æ°ãåæžãããŸããã ããã«ã9.5ã«ã¯æ¢ã«èšåãããããããããã€ããããŸãã ããã¯ãå€ãã®ã¿ã€ãã®ã¯ãŒã¯ããŒãã§ããã©ãŒãã³ã¹ãåäžããŸãã å¯äžã®ããšã¯ããããã®ãããã¯äž»ã«èªã¿èŸŒã¿ã®è² è·ã«é¢ãããã®ã§ãã ããã«å€ãã®èªã¿åãå€ãæã€ããŒã¿ããŒã¹ãããå Žåã å
±æãããã¡ã®äžã®ã»ãšãã©ãã¹ãŠã®ã¡ã¢ãªãåæã§ããã»ãšãã©ã®å Žåãåé¡ã¯çºçããŸããã
ããã«å€ãã®ãšã³ããªãããå Žåã¯ãé
ããæ©ãããã®åé¡ãçºçããŸãã éªæªãªãŠã£ãã¯ãå°æ¥ãã®ç¶æ³ãæ¹åããæ¹æ³ã«é¢ããã¢ã€ãã¢ãéããŠããŸãã å®éãããã¥ã¡ã³ããŒã·ã§ã³ãçªç¶èªãã§ã€ã³ã¿ãŒããããæ€çŽ¢ããŠãåé¡ã®è§£æ±ºçãåŸãããªãå Žåã¯ããœãŒã¹ãåžã£ãŠ1ã€ã®å€æ°ããããããšãçã«ããªã£ãŠãããåé¡ã解決ããŸãã ããããããã¯éåžžã«ãŸããªããã§ãã
4çªç®ã®äŸã åé¡ã®èª¬æã¯ãã¡ãããå
¥æã§ããŸãã æ¬è³ªã¯ããã次ã®ãšããã§ãããµã€ãºãçŽ10åè¡ã®å€§ããªã¿ãã¬ããã倧ããªBããªãŒã€ã³ããã¯ã¹ïŒãµã€ãºã200 GBïŒã ãã®ãã¬ãŒãã§VACUUMãšèšãã15å以å
ã«ã¬ããªã«ãžã®å€æŽã®ããŒã«ãªãŒããŒãåæ¢ããŸãã ã¹ããªãŒãã³ã°è€è£œã«ã€ããŠã§ãã
åæã«ãããŒã¿èªäœãååšããã»ã¯ã·ã§ã³ãããã¬ããªã«ããã£ã¹ã¯ãã倧éã®èªã¿åããéå§ããããšã¯æããã§ãã èµ·åããã»ã¹ã¯ãxlogãå®è¡ããå€ãã®ä¿¡çšãå·ã€ãããã®ãšåãã§ããããšãããããŸãã
ãã®å Žåãããã»ããµã§ã¯ãªãAIã«ãã¹ãŠãè²»ãããŠããããããããããŒã¯ã®åºåãèŠãã®ã¯ç¡æå³ã§ãã GDBã§ã¯ããã£ã¹ã¯ããã®èªã¿åãã«æ¬åœã«ãã³ã°ããŠããããšãããããŸãã ããã¯libcåŒã³åºãã§ãã ãããŠã1è¡ã®ã³ãŒããŸã§ããããã©ãã§è¡ã£ãŠããããèŠãããšãã§ããŸãã ãœãŒã¹ã«ç§»åããŠããã§äœãèµ·ããããèŠããšãããã§è¡ãããããšãæé©ã§ã¯ãªãããšãéãã·ã¢èªã®çœã§çŽæ¥æžãããŠããŸãã æ¹åã§ããŸãã
ãã®åé¡ã®è°è«ãžã®ãªã³ã¯ãããã解決ããæ¹æ³ã«ã€ããŠã ããã¯ãã¹ãŠãPostgresã®ãããã§çµãããŸãããããã«ãããã¬ããªã«ã®ããã¯ãã°ãåæžã§ããŸãã ãŸã£ããåãå€ããªãã§ãçãããŠãã ããã ãã®å³ã«ã¯ã2ã€ã®ã¬ããªã«ããããŸãã ç·è²ã®ãã®ã¯ãããã®ãªãã¬ããªã«ã§ãã éããã®ã¯ããããã®ããã¬ããªã«ã§ãã ã°ã©ãã¯é
ãã瀺ããŠããŸãã ãããŠãããã¯ãã£ã¹ã¯ããã®èªã¿åãã®ã°ã©ãã«ãããŸã[çŽã EdãïŒå³åŽ]ã èªã¿åãããªã¥ãŒã ã¯å¢å ããŸããã ã€ãŸããããã¥ã¡ã³ããèªãã§ãã€ã³ã¿ãŒããããæ€çŽ¢ãããœãŒã¹ãæãã«çèããŠãããªãã®è³ªåã«å¯ŸããçããåŸãããªãã£ãããããããä¿®æ£ããã®ã¯ããããšã ãšæããŸãã ããããç§ã®ãããªCãããããªãå Žåããã®ç¹å®ã®ç¶æ³ã§ã¯ã倧ããªãã¬ãŒãã倧ããªBããªãŒã€ã³ããã¯ã¹ããããããã«ã»ãšãã©å€æŽããªããåºæ¬çã«æ¿å
¥ã®ã¿ã®ããŒãã§ããå ŽåãããŒãã£ã·ã§ã³åããã®ãçã«ããªã£ãŠããŸããã®ãããªåé¡ã¯çºçããŸããã
ãã®æç¹ã§ãé ã«æ¬¡ã®ããšãèããŠããå¿
èŠããããŸããã¯ããããŸãè¡ããªãã£ããGDBã¯æŠéäžãPostgresã®ãœãŒã¹ã³ãŒãã«ããããåœãŠãŸããéåžžã®DBAããããåŠçããããã§ã¯ãããŸããã ãããŠããã®èãã¯æ£ããã§ãã ç§ãã¡ãããæããŸããã ãããã£ãŠãç§ã¯ããã§ã€ã«ãã¥ã¹ãæåŸ
ããŸããã€ã«ãã¥ã¹ã¯ç§ãã¡ãåŸ
ã£ãŠããæããæªæ¥ã«ã€ããŠæããŠãããŸãã
Ildus Kurbangaliev ïŒã¿ãªãããããã«ã¡ã¯ã ç§ã®ååã¯ã€ã«ãã¥ã¹ã§ãã ç§ã¯Postgres Professionalã§éçºè
ãšããŠåããŠããŸãã çŸæç¹ã§ã¯ãç£èŠãè¡ã£ãŠããŸãã ã€ãŸããPostgresã§ãããã®æåŸ
ãç£èŠã§ããããã«ããç£èŠããããäœæããŠããŸãã åŸ
ã£ãŠããããšããŸãã«Postgresã®æ ¹å¹¹ã§ãã ããã¯ãããšãã°ããã£ã¹ã¯ããããã¯ãŒã¯ããã©ããããå
éšã§çºçãã軜éã®ãããã¯ãããŸãã¯ééã®ãããããã¯ãèªäœã§ãã ãããã®æåŸ
ã¯å€ãã®ãµãã¿ã€ãã«åããããŸãã 軜éããã¯ã¯50åãããã¯ã¯9åã§ãã ãããã¯ãŒã¯-èªã¿åããŸãã¯æžã蟌ã¿å¯èœã ã¹ãã¬ãŒãžã¯åãã§ãã
å¥ã®ç£èŠããŒã«ãå¿
èŠãªã®ã¯ãªãã§ããïŒ å€ãã®å Žåã2çªç®ã®ãã€ã³ãã¯å®éã«ã¯æåã®ãã€ã³ãã§ãã ãããã¯ãããããããããããåå¥ã«å¯ŸåŠããå¿
èŠãããããã§ãã ããããçµã¿åãããããŒã«ã䜿çšããããšããå§ãããŸãã ç§ã«ã¯ãã®ãããªä»äºããããŸãããããšãã°ãsystemtapã¯åªããããŒã«ã§ãããå®çšŒåã§ã¯äœ¿çšã§ããŸããã
ãããã£ãŠãç§ã¯pg_stat_waitãéçºããŸãããããã¯ããããã¡ã€ãªã³ã°ããã¡ã€ã«ãžã®ãã¬ãŒã¹ãããã³åŸ
æ©å±¥æŽãå®è¡ã§ããŸããç¹å¥ãªãã©ã¡ãŒã¿ãŒããããæžã蟌ã¿ãšä¿åãã§ããåå¥ã«èªã¿åãããšãã§ããŸãããããã¡ã€ãªã³ã°ã¯ãåæåŸ
å€ã®æåŸ
å€ã®æ°ãšæéãèªã¿åããŸããåã
ã®ããã»ã¹ã®ãã¬ãŒã¹ãæå¹ã«ã§ããŸããããã»ã¹ã®PIDããã¡ã€ã«åãããã³ãã®ããã»ã¹ã«å¯Ÿãããã¹ãŠã®æåŸ
å€ãããã«æžã蟌ãŸããŸãããã¬ãŒã¹ã®ãã€ãã¹é¢ã¯ã倧ããªãªãŒããŒãããã§ããããšãå€æãããªã³ã©ã€ã³ã§äœ¿çšã§ããªãããšã§ãããããã¯ã·ã§ã³ã§ãããã¯ã·ã§ã³ã§äœ¿çšã§ããããã«ããŸããã
ããã§ãèšå®ãããèŠä»¶ãèšè¿°ããŸãããã€ãŸãããããã¯ãªã³ã©ã€ã³ã§åäœããã¯ãã§ããããŒã¿ããŒã¹èªäœã«éè² è·ããããªãã§ãã ããããã¹ãŠã®æåŸ
ã«ãããæ£ç¢ºãªããŒã¿ãååŸããããšãæãŸããã§ããã€ãŸããããªç§åäœã®æéãéãããã³äž»èŠãªç®æšã§ãããå€æ°ã®ããŒã«ã1ã€ã«ãŸãšããããšã§ããã§ããèŠããã
ãã®ããŒã¿ãè¿ãã ãã®å¥åã®é¢æ°ãåŒã³åºããããã¡ã€ã©ãŒçšã®ãããããããŸããã€ãŸããäºæ³ããšã«ãã©ãã ãæéãããã£ãããéã確èªã§ããŸããããšãã°ãçŸããã°ã©ããäœæããããäºçŽãå
¥ããããããäžåºŠè³ªåãããããã¹ãŠã衚瀺ãããã°ã©ããäœæãããã§ããŸããããã§ã¯ãããã§ã®äž»ãªæéã¯ãã©ãããã§ãããã¯ãŒã¯ãæäœããã®ã«è²»ããããŠããããšãããããŸãããããŠãããã«LWLockã1ã€ãããŸããã
ç©èªã¯ãã®ããã«èŠããŸãããã©ã¡ãŒã¿ãŒã5,000ã®å ŽåãæåŸã®5,000ã®æåŸ
å€ãååŸããŸãããããã¯ããã«æ¶å»ããããããããã«èŠæ±ããå¿
èŠããããŸãããŸããåæåŸ
å€ã®ãã©ã¡ãŒã¿ãŒã®ã¿ã衚瀺ãããŸããäžã®ã¹ãã¬ãŒãžã«ã¯ãç¹å®ã®ãããã¯ãæžã蟌ãŸããŠããããèŠãããšãã§ããŸãããããŠãã¢ã³ããŒãããããŒãã«èªäœãèšç®ããŸãã
ãã¬ãŒã¹ã®éå§ç¹ã¯æ¬¡ã®ãšããã§ããé¢æ°ïŒpidãfileïŒãåŒã³åºããšããã®ãããªçµæã衚瀺ãããŸããéå§ããã€è¡ãããããããã«è¡šç€ºããããã¹ãŠãçµäºãããšãæéãèšç®ããŠããã®èšé²ãè¡ãããå Žæã確èªã§ããŸãã
å®è£
ã«ã€ããŠå°ããåœåãç£èŠã«ã¯ãã©ã¡ãŒã¿ã1ã€ãããããŸããã§ããããããã®5ã€ã®ã¿ã€ãã¯ããµã³ããªã³ã°ã«ãã£ãŠåéããããããã¡ã€ã«ãäœæãããŸããããµã³ããªã³ã°ã¯æåã«ããã»ã¹ã®ãªã¹ãã«ãããã¯ã眮ããããããã¯ããŸã圹ã«ç«ããªãããšãå€æããŸããã次ã«ãæ€çŽ¢ãç¶è¡ããããšãä»ã®ããã»ã¹ãããã¯ããããããšãã§ãããããã¯ã¹ããããããŸããå°ãéã£ãããæ¹ã§ãã£ããã€ãŸããåããã¯ãšã³ãã¯ããèªäœå
ã§éèšãåéããå
±æã¡ã¢ãªã«æã
ããããããŸããããããããããã¡ã€ã«ã ããäžããããŸãã
ã¹ããŒãªãŒã¯é»è²ã®ã³ã¬ã¯ã¿ãŒã«ãã£ãŠåéãããŠããŸããProcArrayãå埩åŠçããçŸåšããã§èµ·ãã£ãŠããããšãèšé²ããŸããçŸåšã®ãã¥ãŒããããŸãåå¥ã«ãç¹å®ã®ããã»ã¹ãçŸåšäœãããŠããã®ããèŠãããšãã§ããŸãããªãŒããŒããããåé¿ããããã«ããã¹ãŠããããã¯ããªãŒã¢ã«ãŽãªãºã ã«å®è£
ãããŠããŸãã
以äžã«ããã®ãããªãããã¯ã®ãªãã¢ã«ãŽãªãºã ãå±¥æŽã«å¯ŸããŠã©ã®ããã«äœæããããã®äŸã瀺ããŸããæåŸ
ããšã«2ã€ã®ãããã¯ãä¿æããŸãããããŠãããã¯ãšã³ããäžæ¹ã«æžã蟌ããšãããäžæ¹ãèªã¿åããŸãããããã£ãŠããããã¯ãé¿ããŠãã ããã
ãããŠãç§ã¯å€ãã®ãªãŒããŒããã枬å®ãè¡ããŸããããããã®ãã¹ãã¯ããªãŒããŒãããããã®å Žå0.5ïŒ
æªæºã§ããããšã瀺ããŸãããããããSELECTã¯ãšãªã§ããããã¹ãããããšãæ確ã«ããŸãããã®ãããpg_benchã®çµæã®æ£åžå³ãååŸãããŸãããããã§ã¯ãç£èŠã®æç¡ã«ãããããããªãŒããŒããããè©äŸ¡ããããšã¯äžå¯èœã§ãããããŠã誰ãããããè¡ãæ¹æ³ãæãã€ããããç§ã¯éåžžã«æè¬ããŸããå®å®ããé²é³çµæãåŸãã®ã¯éåžžã«é£ããããã§ãã
ããã§ãã³ãŒãã¯ãªãŒãã³ãœãŒã¹ã§éãããŠãããgitgubã§ã¯ãã®ãããžã§ã¯ãããããäœãã足ããªãå Žåã¯åé¡ãäœæããç£èŠããã¹ãããããŒã¿ããŒã¹ããã§ãã¯ã€ã³ãããã°ãæ¢ããŸããããã¯éåžžã«åœ¹ç«ã¡ãŸãããããã®åé¡ã«é¢ãã察å¿ã確èªã§ãããªã³ã¯ã2ã€ãããããã«ãåå ã§ããŸãã
ãã®ç£èŠã®äœ¿çšäŸããããŸããããã«ã€ããŠã¯ãVovaã«äŒããŸãã
ãŠã©ãžããŒã«ã»ãããã£ã³ïŒäŸã«ã€ããŠå°ãã Ildusã¯ããã°ãããŠã³ããŒããè©Šçšããã¹ããæ€çŽ¢ã§ãããšè¿°ã¹ãŸãããããŠã³ããŒããè©Šçšãæ€çŽ¢ããã¹ããè¡ããŸããããã¹ãŠã®ãã·ã³ã§ãã§ã«9.4ãå®çšŒåããŠããŸãããããã¯9.4çšã§ãããçŸåšã®ãã¹ã¿ãŒçšã®ãããããããŸããããã¯çŸåšãã¢ããã¹ããªãŒã ã«ããã·ã¥ãããŠããŸãã
以åã¯ã©ãã§ãããïŒç§ãã¡ã«ã¯ãäœã«å¯ŸããŠãäŒãŸãªãããã«æãããããã以äžãããçºè¡ããªãåºç€ããããŸãã 1ç§ããã1äžãã©ã³ã¶ã¯ã·ã§ã³ããã³ãã€ã³ããããæ©èœããŸããã GDBã§ã¯ãProcArrayEndTransactionã§ãã³ã°ãã軜éããã¯ãååŸããŠããããšãããããŸãããç¹°ãè¿ãã«ãªããŸãããæ倧1è¡ã®ã³ãŒãã§ãProcArrayLockã§ãã³ã°ããŠããããšãããããŸãããã®GDBãæ¥ç¶ããç¹å®ã®ããã¯ãšã³ãã§ãã£ããããŠãããã確èªã§ããŸãã
ãããŠä»ãããã¯1ã€ã®SELECTã¯ãšãªã§ãpg_stat_wait_currentãŸãã¯pg_stat_wait_historyã§ãçŸåšã®ç¶æ³ãèŠãŠããããéå»ã®å±¥æŽãèŠãŠãããã«ãã£ãŠç°ãªããŸãããããŠãããã§ã¯ãããããã¹ãŠãProcArrayLockã«ããã£ãŠããããšããããããã®ProcArrayLockãåŸ
æ©ããã®ã«ã©ãã ãã®æéãè²»ãããããããããŸãã
ããã¯èŠèŠåã§ããŸããããã¯ãååŸ
æ©ã¯ã©ã¹ã§ããŒã¹ãè²»ããæéã®ã°ã©ãã§ããèµ€ã¯ãã£ã¹ã¯ãç·ã¯è»œéããã¯ãéã¯éããã¯ã§ãããããã¯ãŒã¯ãšãã©ãããã¯ããã§ã¯ãªãã«ãªã£ãŠããŸããããã¯éåžžãå€ãã®æéããããããã§ããããã¯ãšã³ãããã³ã°ããŠäœãããŸãããããããã¯ãŒã¯åŸ
æ©ã¯ã©ã¹ããããåŸ
æ©æéãéåžžã«é·ããªã£ãŠããŸãããã§ãã¯ãã€ã³ãããã³ã°ããŠäœãããªãå Žåãã©ããåŸ
æ©ã¯ã©ã¹ããããŸããåŸ
æ©æéã¯ç¡éã§ãããŸããç¡éã§ã¯ãªãããéåžžã«å€§ããããããŠããã§ãã»ãšãã©ã®å ŽåãããŒã¹ã¯äœããåŸ
ã£ãŠãããšãã«ãã£ã¹ã¯IOãåŸ
ã¡ãŸããã軜éããã¯ã§ãã³ã°ããããšããããŸãã y軞ã¯åŸ
æ©æéãx軞ã¯ã«ã¬ã³ããŒæéã§ãã
軜éããã¯å
ã§äœãèµ·ããããšåãã°ã©ããããããã§ããŸããã»ãšãã©ãã¹ãŠãé»è²ã§ãé»è²ãBufferPartitionLockã§ããããšãããããŸãããããã¡ãã£ãã·ã¥ã®åãããã¯ãšããŒãã£ã·ã§ã³ããããã ãã§ã¯ãªãã16ãã128ã«å¢ãããŸããã9.5ã®ããã«ããããã¯å€§å¹
ã«æé©åãããŸããã
ããšãã°ãããã¯ãããŒã¿ããŒã¹å
ã®ãã¹ãŠãäžè¯ã«ãªã£ãç¬éã®åŸ
æ©ã¯ã©ã¹ã®æ§åã§ããæåã¯ããããççºãã軜éã®ããã¯ã«æåŸ
ããŠã¶ãäžãã£ãããšãããããŸãããã°ããããŠãããééã®ããããã¯ã«ãã¬ãŒãã®ã©ã€ã³ã®ã¬ãã«ã§ããã¯ã¢ããããŸããã軜éããã¯ã
åå ã§ãããã®ãèŠããšãçè«çã«ã¯ãProcArrayLockãšBuffFreelistLockãããã¯ãã§ããäžçµéŠåBuffFreelistLockãEãããã³ProcArrayLockããšãããããããã¯ãšã³ãã®å€§èŠæš¡ãªæ°ãäœæããããã«ãçŸæç¹ã§ã¯ãå€ãããã£ããæ°ããæ¥ç¶ãéããããããŠãã®-è² è·ProcArrayããã®åé¡ã®äž»ãªåå ã¯BuffFreelistLockã§ãããããã¯9.5ã§ã¯ãªããªããæé©åã®1ã€ã§èŠãããŸããã
åšåº«ã確èªããæãæ¥ãŸãããããã¯åŸ
æã®æ©èœã§ãããä»ã®å€ãã®ããŒã¿ããŒã¹ã«ãããDBAã®å¯¿åœã倧å¹
ã«ä¿é²ããŠããããã§ãã
PG Day'17ã®æ¬¡ã®å€ãYandexã®å°é家ã¯ãããã€ãã®ã¯ãŒã«ãªã¬ããŒããæºåããŠããŸããVladimir Krasilshchikã ããã°ããŒã¿ã®èŽè¡ãšè©±ãããVasily SozykinãYandex.Moneyã§ã®PostgreSQLãžã®ç§»è¡ã®å£®å€§ãªã¹ããŒãªãŒãèªãã人æ°ã®ClickHouseåæããŒã¿ããŒã¹ã®ãªãŒãéçºè
ã§ããAlexey Milovidov ã圌ã®çºæã®å
éšæ§é ã«ã€ããŠèªããŸããä»ããåå ãããïŒ