é ãå°æ¥ãäžèŠãªããŒã¿ãèªåçã«åé€ããããšã DBMS ã®éèŠãªã¿ã¹ã¯ã® 1 ã€ã«ãªãã§ããã [1]ã ãããŸã§ã®éãç§ãã¡èªèº«ãäžèŠãªããŒã¿ãåé€ããããããå®äŸ¡ãªã¹ãã¬ãŒãž ã·ã¹ãã ã«ç§»åãããããå¿ èŠããããŸãã æ°çŸäžè¡ãåé€ããããšã«ãããšããŸãã ç¹ã«æ¡ä»¶ãããã£ãŠãããé©åãªã€ã³ããã¯ã¹ãããå Žåã¯ãéåžžã«åçŽãªã¿ã¹ã¯ã§ãã ãDELETE FROM table1 WHEREcolXNUMX = :valueã - ãã£ãšç°¡åãªããšã¯ãªãã§ãããã?
ãããªïŒ
-
ç§ã¯å幎床ãã€ãŸã 2007 幎ãã Highload ããã°ã©ã å§å¡äŒã«åå ããŠããŸãã
-
ç§ã¯ 2005 幎ãã Postgres ã䜿çšããŠããŸãã å€ãã®ãããžã§ã¯ãã§äœ¿çšãããŸããã
-
2007 幎ãã㯠RuPostges ãšãã°ã«ãŒãåã
-
Meetup ã®åå è 㯠2100 åãè¶ ãããŸã§ã«æé·ããŸããã é·ãããµã³ãã©ã³ã·ã¹ã³ã«æããããã¥ãŒãšãŒã¯ã«æ¬¡ãäžç第ïŒäœã ã£ãã
-
ç§ã¯ã«ãªãã©ã«ãã¢ã«æ°å¹Žéäœãã§ããŸãã ç§ã¯å€§äŒæ¥ãå«ãã¢ã¡ãªã«äŒæ¥ãšååŒããããšãå€ãã§ãã 圌ã㯠Postgres ã®ã¢ã¯ãã£ã ãŠãŒã¶ãŒã§ãã ãããŠãããŸããŸãªèå³æ·±ããã®ããããŸãã
äœããããŠããå ŽåãPostgres ã®åšå²ã«äœããã®ãã©ã°ãååšããããšããããŸãã 管çè ããã¹ã ã¹ã¿ã³ããã»ããã¢ãããããŸã§åŸ ã€å¿ èŠãããå ŽåããŸã㯠DBA ãå¿çãããŸã§åŸ ã€å¿ èŠããããšããŸãã ãããŠãç§ãã¡ã¯éçºããã¹ãã管çããã»ã¹ã«ããããã®ãããªããã«ããã¯ãçºèŠããèªååãšæ°ããã¢ãããŒãã®å©ããåããŠããããæé€ããããšããŸãã
ç§ã¯æè¿ããµã³ãŒã«ã¹ã® VLDB ã«ããŸããã ããã¯ããŒã¿ããŒã¹ã«é¢ããæ倧ã®ã«ã³ãã¡ã¬ã³ã¹ã§ãã ãŸããå°æ¥çã«ã¯ DBMS ãããŒã¿ãä¿åããã ãã§ãªããèªåçã«åé€ããããã«ãªããšããå ±åããããŸããã ããã¯æ°ãããããã¯ã§ãã
äžçã§ã¯ãŒã¿ãã€ããã€ãŸã 1 ãã¿ãã€ãã®ããŒã¿ããŸããŸãå¢ããŠããŸãã ãããŠçŸåšãäžçäžã«ã¯ 000 ãŒã¿ãã€ããè¶ ããããŒã¿ãä¿åãããŠãããšãã§ã«æšå®ãããŠããŸãã ãããŠããã®æ°ã¯ãŸããŸãå¢ããŠããŸãã
ãããŠãããã©ãããã°ããã§ããããïŒ æããã«ãããåãé€ãå¿ èŠããããŸãã ãã®èå³æ·±ãã¬ããŒããžã®ãªã³ã¯ã¯æ¬¡ã®ãšããã§ãã ãããããããŸã§ã®ãšããããã㯠DBMS ã«å®è£ ãããŠããŸããã
ãéãæ°ãããã人㯠XNUMX ã€ã®ããšãæãã§ããŸãã 圌ãã¯ç§ãã¡ã«åé€ãæ±ããŠããã®ã§ãæè¡çã«ã¯åé€ã§ããã¯ãã§ãã
次ã«ç§ã話ãã®ã¯ãå®éã®ç¶æ³ãå€æ°å«ãæœè±¡çãªç¶æ³ã§ããã€ãŸããç§ãšåšå²ã®ããŒã¿ããŒã¹ã«å®éã«äœå¹ŽãäœåºŠãèµ·ãã£ãããšããŸãšãããã®ã§ãã çæã¯ã©ãã«ã§ãããã誰ãããã€ããããèžãã§ããŸãã
æé·äžã® XNUMX ã€ãŸãã¯è€æ°ã®æ ç¹ããããšããŸãã ãããŠãããã€ãã®ã¬ã³ãŒãã¯æããã«ãŽãã§ãã ããšãã°ããŠãŒã¶ãŒã¯ããã§äœããå§ããŸãããããããå®äºããŸããã§ããã ãããŠãã°ããããŠããã®æªå®æã®ãã®ã¯ããä¿åã§ããªãããšãããããŸãã ã€ãŸããã¹ããŒã¹ãç¯çŽããããããã©ãŒãã³ã¹ãåäžããããããããã«ãäžèŠãªãã®ãããã€ãã¯ãªãŒã³ã¢ããããããšèããŠããŸãã
äžè¬ã«ãã¿ã¹ã¯ã¯ãããŒãã«å ã®ç¹å®ã®ãã®ãç¹å®ã®è¡ã®åé€ãèªååããããšã§ãã
ãããŠãä»æ¥ã話ãããã®ã¯ããŽãã®æ€å»ã«ã€ããŠã§ãã
çµéšè±å¯ãªéçºè ã«äŸé ŒããŸããã 圌ã¯ãã®ãªã¯ãšã¹ããåãåããèªåã§ç¢ºèªããŸããããã¹ãŠãããŸããããŸããã ã¹ããŒãžã³ã°ã§ãã¹ãããŸãã - ãã¹ãŠåé¡ãããŸããã ããŒã«ã¢ãŠã - ãã¹ãŠãæ©èœããŸãã XNUMX æ¥ XNUMX åå®è¡ããŸããããã¹ãŠåé¡ãããŸããã
ããŒã¿ããŒã¹ã¯ã©ãã©ãæé·ããŠãããŸãã æ¯æ¥ã® DELETE ã®åäœãå°ãé ããªããŸãã
ãã®åŸãããŒã±ãã£ã³ã°äŒç€Ÿãèšç«ãããã©ãã£ãã¯ãæ°åã«ãªãããšãããã£ãã®ã§ãäžèŠãªãã®ãäžæçã«åæ¢ããããšã«ããŸããã ãããŠè¿ãã®ãå¿ããŸãã
æ°ãæåŸã圌ãã¯æãåºããã ãããŠããã®éçºè ã¯èŸããããå¥ã®ããšã§å¿ãããããå¥ã®éçºè ã«è¿åŽããããã«æ瀺ããŸããã
圌ã¯éçºãšã¹ããŒãžã³ã°ããã§ãã¯ããŸãããããã¹ãŠåé¡ãããŸããã§ããã åœç¶ã®ããšãªãããèç©ããããã®ãã¯ãªãŒã³ã¢ããããå¿ èŠããããŸãã 圌ã¯ãã¹ãŠãåäœããããšã確èªããŸããã
次ã¯äœãèµ·ããïŒ ãããªããšãç§ãã¡ã«ãšã£ãŠãã¹ãŠã厩å£ããŠããŸããŸãã ããã¯èœã¡ãã®ã§ãããæç¹ã§ãã¹ãŠãåããŸãã 誰ããã·ã§ãã¯ãåããŠãããäœãèµ·ãã£ãŠããã®ã誰ãç解ããŠããŸããã ãããŠãåé¡ã¯ãã®DELETEã«ãã£ãããšãå€æããŸããã
äœãåé¡ãçºçããŸããã? äœãåé¡ã ã£ãã®ãã以äžã«ãªã¹ãããŸãã ãããã®ãã¡ã©ããæãéèŠã§ãã?
-
ããšãã°ãã¬ãã¥ãŒã¯ãããŸããã§ãããã€ãŸããDBA å°é家ã¯ããã確èªããŸããã§ããã 圌ã¯çµéšè±å¯ãªç®ã§åé¡ãããã«èŠã€ããŸããããã«ãæ°çŸäžè¡ãèç©ãããŠããæ¬çªç°å¢ã«ã¢ã¯ã»ã¹ã§ããŸãã
-
ãããã圌ãã¯äœãééã£ãããšããã§ãã¯ããã®ã§ãããã
-
ããããããŒããŠã§ã¢ãå€ãããããã®ããŒã¹ãã¢ããã°ã¬ãŒãããå¿ èŠããããŸãã
-
ãŸãã¯ãããŒã¿ããŒã¹èªäœã«åé¡ããããPostgres ãã MySQL ã«ç§»è¡ããå¿ èŠããããŸãã
-
ãããã¯æäœã«äœãåé¡ãããã®ãââããããŸããã
-
ãããããããä»äºã®çµç¹åã«äœããã®ééããããã誰ãã解éããŠæãåªç§ãªäººæãéãå¿ èŠããããããããŸãã?
DBA ãã§ãã¯ã¯ãããŸããã§ããã ãã DBA ããããããããã®æ°çŸäžè¡ãèŠãŠãå®éšãããªããŠãã圌ãã¯ãããªããšã¯ããªãããšèšãã§ãããã ãã®ã³ãŒãã GitLab ã GitHub ã«ãããã³ãŒã ã¬ãã¥ãŒ ããã»ã¹ããããDBA ã®æ¿èªãªãã«ãã®æäœãæ¬çªç°å¢ã§è¡ããããšãããããªããšã¯ãªãã£ããšä»®å®ããŸãããã®å Žåãæããã« DBA ã¯ããèšãã§ãããã ã
ãããŠåœŒã¯ããã£ã¹ã¯ IO ã«åé¡ãçºçãããã¹ãŠã®ããã»ã¹ããããããªããããã¯ãçºçããå¯èœæ§ããããããã«èªåããã¥ãŒã ãæ°åéãããã¯ãããããšã«ãªããããããã¯è¯ããªããšèšããŸãã
1çªç®ã®ééãã¯ãééã£ãå Žæã§ãã§ãã¯ããããšã§ãã åŸã«ãªã£ãŠããã倧éã®ãžã£ã³ã¯ ããŒã¿ãæ¬çªç°å¢ã«èç©ãããŠããããšã確èªããŸããããéçºè ã¯ãã®ããŒã¿ããŒã¹ã«ããŒã¿ãèç©ããŠããããã¹ããŒãžã³ã°äžã«ãã®ãžã£ã³ã¯ ããŒã¿ãäœæãã人ã¯ããŸããã§ããã ãããã£ãŠãããã«è§£æ±ºã§ããè¡ã 000 è¡ãããŸããã
ç§ãã¡ã¯ããã¹ãã匱ããã€ãŸãæ§ç¯ãããããã»ã¹ãåé¡ãæ€åºã§ããªãããšãç解ããŠããŸãã é©å㪠DB å®éšãè¡ãããŠããŸããã§ããã
çæ³çãªå®éšã¯åãè£ çœ®ã§å®è¡ããããšãæãŸããã§ãã ãããåãæ©åšã§åžžã«å®è¡ã§ãããšã¯éããŸããããããŒã¿ããŒã¹ã®ãã«ãµã€ãºã®ã³ããŒã§ããããšãéåžžã«éèŠã§ãã ããã¯ç§ãããæ°å¹Žèª¬æããŠããããšã§ãã XNUMX 幎åã«ç§ã¯ãã®ããšã«ã€ããŠè©±ããŸãããããã¹ãŠ YouTube ã§èŠãããšãã§ããŸãã
ãããããŠãã¡ã®èšåãæªãã®ãïŒ èŠãŠã¿ããšãã¬ã€ãã³ã·ãŒãè·³ãäžãããŸããã 䜿çšçã 100% ã§ããããšãããããŸããã ãã¡ãããããããææ°ã® NVMe ãã©ã€ãã§ããã°ãããããã¯ããã«ç°¡åã«ãªãã§ãããã ãããŠããããç§ãã¡ã¯ãããã暪ããããªãã§ãããã
ã¯ã©ãŠãã䜿çšããŠããå Žåãã¢ããã°ã¬ãŒãã¯ããã§ç°¡åã«å®è¡ã§ããŸãã æ°ããããŒããŠã§ã¢ã§æ°ããã¬ããªã«ãäœæããŸããã åãæ¿ããã ãããŠãã¹ãŠé 調ã§ãã ãšãŠãç°¡åã
ã©ãã«ãããŠå°ããªãã£ã¹ã¯ã«è§Šããããšãã§ããŸãã? ããã§ã¯ãDBA ã®å©ããåããŠããã§ãã¯ãã€ã³ã ãã¥ãŒãã³ã°ãšåŒã°ããç¹å®ã®ãããã¯ã«ã€ããŠè©³ãã説æããŸãã ãã§ãã¯ãã€ã³ã調æŽãè¡ã£ãŠããªãããšãå€æããŸããã
ãã§ãã¯ãã€ã³ããšã¯äœã§ãã? ã©ã® DBMS ã«ããããŸãã ã¡ã¢ãªå ã«å€æŽãããããŒã¿ãããå Žåããã®ããŒã¿ã¯ããã«ã¯ãã£ã¹ã¯ã«æžã蟌ãŸããŸããã ããŒã¿ãå€æŽããããšããæ å ±ã¯ããŸãå è¡æžã蟌ã¿ãã°ã«æžã蟌ãŸããŸãã ãããŠããæç¹ã§ãDBMS ã¯å®éã®ããŒãžããã£ã¹ã¯ã«ãã³ãããææãæ¥ããšå€æããŸããããã«ãããé害ãçºçããå Žåã« REDO ãæžããããšãã§ããŸãã ãŸãã§ããã¡ãã®ããã ã æ»äº¡ããå Žåã¯ãæåŸã®ãã§ãã¯ãã€ã³ãããã²ãŒã ãéå§ãããŸãã ãããŠãã¹ãŠã® DBMS ããããå®è£ ããŸãã
Postgresã®èšå®ãé ããŠããŸãã ãããã¯ã10 ïœ 15 幎åã®ããªã¥ãŒã ã®ããŒã¿ãšãã©ã³ã¶ã¯ã·ã§ã³åãã«èšèšãããŠããŸãã ãã§ãã¯ãã€ã³ããäŸå€ã§ã¯ãããŸããã
以äžã¯ãPostgres ãã§ãã¯ã¢ãã ã¬ããŒããã€ãŸãèªåãã«ã¹ ãã§ãã¯ããã®æ å ±ã§ãã ããã«æ°ãã©ãã€ãã®ããŒã¿ããŒã¹ããããŸãã ãããŠãã»ãŒ90ïŒ ã®ã±ãŒã¹ã§æ€åæã匷å¶ãããããšãããããããŸãã
ããã¯ã©ãããæå³ã§ããïŒ ããã«ã¯10ã€ã®èšå®ããããŸãã ãã§ãã¯ãã€ã³ãã¯ãããšãã° XNUMX åã®ã¿ã€ã ã¢ãŠãã«ãã£ãŠå°éããããšãã§ããŸãã ãããã¯ãããªãå€ãã®ããŒã¿ãåã蟌ãŸãããšãã«çºçããå¯èœæ§ããããŸãã
ããã©ã«ãã§ã¯ãmax_wal_saze 㯠1 ã®ã¬ãã€ãã«èšå®ãããŸãã å®éããã㯠Postgres 㧠300 ïœ 400 ã¡ã¬ãã€ã以éã§å®éã«çºçããŸãã 倧éã®ããŒã¿ãå€æŽãããšããã§ãã¯ãã€ã³ããçºçããŸãã
ãããŠã誰ã調æŽããããµãŒãã¹ãæé·ããäŒç€Ÿãå€é¡ã®åçãäžãããã©ã³ã¶ã¯ã·ã§ã³æ°ãå€ããã°ããã§ãã¯ãã€ã³ã㯠30 åã« XNUMX åãå Žåã«ãã£ãŠã¯ XNUMX ç§ããšã«ãå Žåã«ãã£ãŠã¯éè€ããããšããããŸãã ããã¯ããªãã²ã©ãããšã§ãã
ãããŠããããèµ·ããé »åºŠãæžããå¿ èŠããããŸãã ã€ãŸããmax_wal_size ãäžããããšãã§ããŸãã ãããŠæ¥ãé »åºŠãæžããŸãã
ããããç§ãã¡ã¯ãããããæ£ç¢ºã«è¡ãæ¹æ³ãã€ãŸããæ確ã«ç¹å®ã®ããŒã¿ã«åºã¥ããŠèšå®ã®éžæã«é¢ããææ決å®ãè¡ãæ¹æ³ã«é¢ããå šäœçãªæ¹æ³è«ãéçºããŸããã
ãããã£ãŠãããŒã¿ããŒã¹ã«é¢ã㊠XNUMX ã€ã®äžé£ã®å®éšãè¡ã£ãŠããŸãã
æåã®ã·ãªãŒãº - max_wal_size ãå€æŽããŸãã ãããŠç§ãã¡ã¯å€§èŠæš¡ãªäœæŠãè¡ã£ãŠããŸãã ãŸããããã©ã«ãèšå®ã® 1 ã®ã¬ãã€ãã§å®è¡ããŸãã ãããŠãäœçŸäžè¡ãã®å€§èŠæš¡ãª DELETE ãå®è¡ããŸãã
ç§ãã¡ã«ãšã£ãŠãããã©ãã»ã©é£ãããããããŸãã ãã£ã¹ã¯ IO ãéåžžã«æªãããšãããããŸãã ããã¯éåžžã«éèŠãªã®ã§ãçæãã WAL ã®æ°ã確èªããŸãã ãã§ãã¯ãã€ã³ããäœåçºçããããèŠãŠã¿ãŸãããã ãããŠããããè¯ããªãããšãããããŸãã
次ã«ãmax_wal_size ãå¢ãããŸãã ç¹°ãè¿ããŸãã ç§ãã¡ã¯å¢å ããç¹°ãè¿ããŸãã ãããŠäœåºŠãã ååãšããŠã10ã1ã2ã4 ã®ã¬ãã€ãã®å Žå㯠8 ãã€ã³ããé©åã§ãã ãããŠãç¹å®ã®ã·ã¹ãã ã®åäœã調ã¹ãŸãã ããã§ã®æ©åšãæ¬çªç°å¢ãšåãã§ããå¿ èŠãããããšã¯æããã§ãã åããã£ã¹ã¯ãåãéã®ã¡ã¢ãªãåã Postgres èšå®ãå¿ èŠã§ãã
ãã®ããã«ããŠã·ã¹ãã ã亀æãããšãäžæ£ãªäžæ¬åé€ã®å Žåã« DBMS ãã©ã®ããã«åäœãããããã§ãã¯ãã€ã³ããã©ã®ããã«è¡ãããããããããŸãã
ãã§ãã¯ãã€ã³ãã¯ãã·ã¢èªã§æ€åæã
äŸ: ã€ã³ããã¯ã¹ã«ãã£ãŠæ°çŸäžè¡ãåé€ãããšãè¡ã¯ããŒãžå šäœã«ãåæ£ãããŸãã
ããã«äžäŸã瀺ããŸãã ããã¯ããåºå°ã§ãã ãŸããmax_wal_size ã®ããã©ã«ãèšå®ã 1 GB ã§ããããããã£ã¹ã¯ãèšé²çšã«æ£ã«çœ®ãããŠããããšã¯æããã§ãã ãã®åçã¯éåžžã«ç æ°ã®æ£è ã®å žåçãªçç¶ã§ããã€ãŸãã圌ã¯æ¬åœã«æ°åãæªããªã£ãŠããŸãã æäœã¯ XNUMX ã€ã ãã§ãæ°çŸäžè¡ã® DELETE ã ãã§ããã
ãã®ãããªæäœã prod ã§èš±å¯ãããŠããå Žåã¯ãXNUMX åã® DELETE ãã·ã§ã«ãå ã§ç§ãã¡ã殺ãããšã¯æãããªã®ã§ããã 暪ã«ãªãããšã«ãªããŸãã
ããã«ã16 ã®ã¬ãã€ãã®å Žåããã§ã«æ¯ããªããªã£ãŠããããšã¯æããã§ãã æ¯ã¯ãã§ã«è¯ããªããŸãããã€ãŸãã倩äºãå©ããŠããŸãããããã»ã©æªãã¯ãããŸããã ããã«ã¯ããçšåºŠã®èªç±ããããŸããã å³åŽãèšé²ã§ãã ãããŠæäœæ° - 16çªç®ã®ã°ã©ãã ãããŠãXNUMX ã®ã¬ãã€ãã«ãªããšããã§ã«åŒåžãå°ã楜ã«ãªã£ãŠããã®ã¯æããã§ãã
ãã㊠64 ã®ã¬ãã€ããèŠããšãå®å šã«æ¹åãããŠããããšãããããŸãã ãã§ã«æ¯ãç®ç«ã£ãŠãããããä»ã®æè¡ãä¹ãè¶ããŠãã£ã¹ã¯ã§äœããããæ©äŒãå¢ããŠããŸãã
ããã¯ãªãã§ããïŒ
ããå°ã詳ãã説æããŸããããã®ãããã¯ãã€ãŸããã§ãã¯ãã€ã³ã ãã¥ãŒãã³ã°ã®å®æœæ¹æ³ã«ã€ããŠã¯ãã¬ããŒãå šäœãäœæãããå¯èœæ§ããããããããŸãèªã¿èŸŒãŸãã«ãã©ã®ãããªå°é£ãããã®ãââã«ã€ããŠå°ãæŠèŠã説æããŸãã
ãã§ãã¯ãã€ã³ããé »ç¹ã«çºçããè¡ãé çªã«æŽæ°ããã«ã€ã³ããã¯ã¹ã§æ€çŽ¢ããå ŽåãããŒãã«å šäœãåé€ããªããããããã¯è¯ãããšã§ãããæåã«æåã®ããŒãžã«ã¢ã¯ã»ã¹ãã次㫠XNUMX çªç®ã®ããŒãžã«ã¢ã¯ã»ã¹ãããããŠæåã«æ»ããŸããã ãããŠãæåã®ããŒãžãžã®ãããã®èšªåã®éã«ããã§ãã¯ãã€ã³ãããã®ããŒãžããã§ã«ãã£ã¹ã¯ã«ä¿åããŠããå ŽåãXNUMX 床ç®ã«ããŒãžãæ±ããããããã§ãã¯ãã€ã³ãã¯ãããå床ä¿åããŸãã
ãããŠãã§ãã¯ãã€ã³ããäœåºŠã匷å¶çã«ä¿åããŸãã 圌ã«ãšã£ãŠäœåãªæè¡ãã©ã®ããã«è¡ãããã§ããããã
ããããããã ãã§ã¯ãããŸããã ããŒãžã¯ Postgres 㧠8 ãããã€ããLinux 㧠4 ãããã€ãã§ãã ãããŠãfull_page_writes èšå®ããããŸãã ããã©ã«ãã§ã¯æå¹ã«ãªã£ãŠããŸãã ããã¯æ£ããã§ããããããªãã«ãããšãã¯ã©ãã·ã¥ããå Žåã«ããŒãžã®ååããä¿åãããªãå±éºæ§ãããããã§ãã
ãã©ã¯ãŒã ãã°ã® WAL ãžã®æžã蟌ã¿åäœã¯ããã§ãã¯ãã€ã³ãããããåããŠããŒãžãå€æŽãããšãå€æŽããã®ã¯ 8 ãããã€ããã¹ãŠã§ããã«ãããããããããŒãžå šäœãã€ãŸã 100 ãããã€ããã¹ãŠããã©ã¯ãŒã ãã°ã«æžã蟌ãŸããŸããè¡ãéã㯠XNUMX ãã€ãã§ãã ãããŠããŒãžå šäœãæžãçããªããã°ãªããŸããã
ãã®åŸã®å€æŽã§ã¯ç¹å®ã®ã¿ãã«ã®ã¿ãååšããŸãããåããŠãã¹ãŠãæžãçããŸãã
ãããã£ãŠããã§ãã¯ãã€ã³ããåã³çºçããå Žåã¯ããã¹ãŠãæåããããçŽããŠãããŒãžå šäœãããã·ã¥ããå¿ èŠããããŸãã ãã§ãã¯ãã€ã³ããé »ç¹ã«ããå ŽåãåãããŒãžãééãããšãfull_page_writes = on ãæ³å®ä»¥äžã«å€ããªããŸããã€ãŸããããå€ãã® WAL ãçæãããŸãã ããã«å€ãã®ããŒã¿ãã¬ããªã«ãã¢ãŒã«ã€ãããã£ã¹ã¯ã«éä¿¡ãããŸãã
ãããã£ãŠãXNUMX ã€ã®äœå°äººå¡ãååšããŸãã
max_wal_size ãå¢ãããšããã§ãã¯ãã€ã³ããš wal ã©ã€ã¿ãŒã®äž¡æ¹ã容æã«ãªãããšãããããŸãã ããã¯çŽ æŽãããããšã§ãã
ãã©ãã€ããæå ¥ããŠãããã§æ®ãããŠã¿ãŸãããã ããã®äœãæªãããšã§ããïŒ ããã¯æªãããšã§ãããã§ãã¯ãã€ã³ãã¯ãã£ãšåã«ããããã§ã«å€ãã®ããšãå€ãã£ãŠããããã倱æããå Žåã¯äœæéãç»ãããšã«ãªããŸãã ãããŠãããããã¹ãŠãããçŽãããå¿ èŠããããŸãã ããã§ç§ãã¡ã¯ XNUMX çªç®ã®äžé£ã®å®éšãè¡ããŸãã
æäœãå®è¡ãããã§ãã¯ãã€ã³ããå®äºããã¿ã€ãã³ã°ã確èªãã-9 Postgres ãæå³çã«åŒ·å¶çµäºããŸãã
ãã®åŸãå床起åããŠããã®è£ 眮ã§ã©ã®ãããã®æéäžæããããã€ãŸãããã®æªãç¶æ³ã§ã©ãã ã REDO ãããã確èªããŸãã
ç¶æ³ãæªãããšã«äºåºŠæ³šæããŸãã ãŸãããã§ãã¯ãã€ã³ããçµããçŽåã«ã¯ã©ãã·ã¥ããŠããŸã£ãã®ã§ã倱ããã®ããããããããŸãã ãããŠç¬¬äºã«ã倧èŠæš¡ãªæè¡ãè¡ãããŸããã ãŸãããã§ãã¯ãã€ã³ããã¿ã€ã ã¢ãŠãã«ãªã£ãå ŽåãæåŸã®ãã§ãã¯ãã€ã³ã以éã«çæããã WAL ã¯ããããå°ãªããªããŸãã ã€ãŸãäºéã®æè ã§ãã
ãã®ãããªç¶æ³ãããŸããŸãª max_wal_size ãµã€ãºã§æž¬å®ããmax_wal_size ã 64 ã®ã¬ãã€ãã®å Žåã10 åã®ææªã®ã±ãŒã¹ã§ã¯ 3 åéäžæããããšãããããŸããã ãããŠãããèªåã«åããåããªãããèããŸãã ããã¯ããžãã¹äžã®è³ªåã§ãã ç§ãã¡ã¯ãã®åçãçµå¶äžã®ææ決å®ã®è²¬ä»»è ã«èŠããŠãããå°ããå¿ èŠããããŸãã ææªã®ç¶æ³ã§5ãXNUMXåé暪ã«ãªãããšãã§ããŸããïŒ ãããŠããªãã¯æ±ºæãäžããŸãã
ãããŠããã«èå³æ·±ãç¹ããããŸãã ã«ã³ãã¡ã¬ã³ã¹ã§ã®ããããŒãã«é¢ããã¬ããŒããããã€ããããŸãã ãããŠããããããããªããããã䜿ã£ãŠãããããããŸããã ãã㯠Postgres ã®èªåãã§ã€ã«ãªãŒããŒã§ãã GitLab ãš Data Egret ãããã«ã€ããŠè©±ããŸããã
30 ç§ä»¥å ã«èªåãã§ã€ã«ãªãŒããŒãè¡ãããå Žåã¯ã10 åé暪ã«ãªã£ãŠãããã§ãããã? ãã®æç¹ãŸã§ã«ã¬ããªã«ã«åãæ¿ãããšããã¹ãŠãããŸãããããã§ãã ããã¯è°è«ã®äœå°ããããŸãã æ確ãªçãã¯ããããŸããã ãã®ãããã¯ã¯ã¯ã©ãã·ã¥ãªã«ããªã«é¢ãããã®ã ãã§ã¯ãªããšæããŠããŸãã
倱æããã®å埩ã«æéãããããšãä»ã®å€ãã®ç¶æ³ã§ãäžå¿«ã«ãªããŸãã ããšãã°ãåãå®éšã§ãäœãããããšãã« 10 åéåŸ ããªããã°ãªããªãå ŽåããããŸãã
ããšãèªåãã§ã€ã«ãªãŒããŒããã£ããšããŠããç§ã¯ãããŸã§ãããããã€ããã¯ãããŸããã äžè¬ã«ã64ã100 ã®ã¬ãã€ããªã©ã®å€ãé©åãªå€ã§ãã å Žåã«ãã£ãŠã¯ãéžæãæžããããšãã䟡å€ããããŸãã äžè¬ã«ãããã¯åŸ®åŠãªç§åŠã§ãã
ããšãã°ãmax_wal_size =1, 8 ãªã©ã®å埩ãå®è¡ããã«ã¯ãäžæ¬æäœãäœåºŠãç¹°ãè¿ãå¿ èŠããããŸãã ãã£ãã ãããŠãåãããŒã¹ã§ãããäžåºŠãããããšæã£ãŠããŸããããã§ã«ãã¹ãŠãåé€ããŠããŸãã äœããããïŒ
ç§ãã¡ã®è§£æ±ºçããã®ãããªç¶æ³ã§å埩ããããã«äœããããã«ã€ããŠã¯åŸã»ã©èª¬æããŸãã ãããŠãããæãæ£ããã¢ãããŒãã§ãã
ãããããã®å Žåãç§ãã¡ã¯å¹žéã§ããã ããã§ãBEGINãDELETEãROLLBACKããšæžãããŠããå Žåã¯ãDELETE ãç¹°ãè¿ãããšãã§ããŸãã ã€ãŸããèªåã§ãã£ã³ã»ã«ããå Žåã¯ãç¹°ãè¿ãããšãã§ããŸãã ãããŠç©ççã«ã¯ãããŒã¿ã¯åãå Žæã«çœ®ãããŸãã ããã¿ããããŸããã ãã®ãã㪠DELETE ãå埩åŠçã§ããŸãã
ãã® ROLLBACK ã䜿çšãã DELETE ã¯ãé©åã«ãããã€ãããããŒã¿ããŒã¹ ã©ãããªãå Žåã§ãããã§ãã¯ãã€ã³ãã®ãã¥ãŒãã³ã°ã«æé©ã§ãã
ãiããXNUMXåã®ãã¬ãŒããäœããŸããã Postgres ã«ã¯ãŠãŒãã£ãªãã£åããããŸãã ç¹ã«èŠæ±ãããªãéãããããã¯è¡šç€ºãããŸããã ãããã¯ãctidãxmidãxmax ã§ãã
ctid ã¯ç©çã¢ãã¬ã¹ã§ãã ãŒãããŒãžãããŒãžå ã®æåã®ã¿ãã«ã
ROOLBACK åŸãã¿ãã«ã¯åãå Žæã«æ®ã£ãŠããããšãããããŸãã ã€ãŸããåè©Šè¡ããŠãåãããã«åäœããŸãã ãããäž»ãªãã®ã§ãã
Xmax ã¯ã¿ãã«ã®æ¶æ» æå»ã§ãã ã¹ã¿ã³ããããŠããŸãããPostgres ã¯ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããã¯ãããããšãèªèããŠãããããããã 0 ã§ãããããŒã«ããã¯ããããã©ã³ã¶ã¯ã·ã§ã³ã§ãããã¯é¢ä¿ãããŸããã ããã¯ãDELETE ãå埩ããŠã·ã¹ãã åäœã®äžæ¬æäœã確èªã§ããããšã瀺åããŠããŸãã 貧ãã人ã ã®ããã®ããŒã¿ããŒã¹ã©ããäœãããšãã§ããŸãã
ããã°ã©ããŒã«ã€ããŠã®è©±ã§ãã DBAã«ã€ããŠããããã°ã©ããŒã«å¯ŸããŠããªããããªã«é·ããŠé£ããæäœãããã®ã§ããïŒããšãã€ãå±ãããŸãã ããã¯ãŸã£ããç°ãªãåçŽã®ãããã¯ã§ãã ãã€ãŠã¯ç®¡çãè¡ãããŠããŸããããããããã¯éçºãè¡ãããŸãã
æããã«ãç§ãã¡ã¯ã°ãã°ãã«ã¯ãªã£ãŠããŸããã ããã¯æããã ã ãã®ãã㪠DELETE ãäœçŸäžè¡ãã®éšåã«åå²ããªãããšã¯äžå¯èœã§ãã ããã¯20åéè¡ããããã¹ãŠã暪ã«ãªããŸãã ããããæ®å¿µãªãããããšã倧äŒæ¥ã§ãã£ãŠããçµéšè±å¯ãªéçºè ã§ããã¹ãããããšããããŸãã
ãªãå£ãããšãéèŠãªã®ã§ããããïŒ
-
ãã£ã¹ã¯ã硬ãããšãããã£ãããé床ãäžããŸãããã ãããŠãå£ããå Žåã¯ãäžæåæ¢ãè¿œå ããããã¹ããããªã³ã°ãé ããããããããšãã§ããŸãã
-
ãããŠãç§ãã¡ã¯ä»ã®äººãé·æéãããã¯ããŸããã å Žåã«ãã£ãŠã¯åé¡ãããŸãããã誰ãäœæ¥ããŠããªãå®éã®ã¬ããŒãžãåé€ããå Žåã¯ããã©ã³ã¶ã¯ã·ã§ã³ãå®äºãããŸã§åŸ æ©ãããããèªåããã¥ãŒã äœæ¥ä»¥å€ã¯ãããã¯ãããªãå¯èœæ§ãé«ããªããŸãã ããããä»ã®äººããªã¯ãšã¹ãã§ãããã®ãåé€ãããšããã®äººã¯ãããã¯ãããããçš®ã®é£éåå¿ãçºçããŸãã Web ãµã€ããã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³ã§ã¯é·æéã®ãã©ã³ã¶ã¯ã·ã§ã³ãé¿ããå¿ èŠããããŸãã
ããã¯é¢çœãã éçºè ããã©ã®ãã㯠ãµã€ãºãéžæããã°ããã§ãã?ããšå°ããã®ãããèŠãããŸãã
ãã³ãã« ãµã€ãºã倧ãããªãã»ã©ããã©ã³ã¶ã¯ã·ã§ã³ ãªãŒããŒããããã€ãŸããã©ã³ã¶ã¯ã·ã§ã³ã«ããè¿œå ãªãŒããŒããããå°ãããªãã®ã¯æããã§ãã ãããåæã«ããã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ãããæéãå¢å ããŸãã
ç§ã«ã¯éåžžã«åçŽãªã«ãŒã«ããããŸããããã¯ãã§ããéãå€ãã®ããŒã¿ãååŸããŸãããXNUMX ç§ãããã®å®è¡å¯èœãã¡ã€ã«ã®æ°ãè¶ ããªãããã«ããããšã§ãã
ãªãã¡ãã£ãš? 説æã¯éåžžã«ã·ã³ãã«ã§ãå°éç¥èã®ãªã人ã§ãç解ã§ããŸãã åå¿ãèŠãããŸãã 50 ããªç§ãèããŠã¿ãŸãããã äœããå€åãããšãç§ãã¡ã®ç®ã¯åå¿ããŸãã ãã以äžã®å Žåã¯ãããã«å°é£ã«ãªããŸãã ããšãã°ãããŠã¹ãã¯ãªãã¯ã㊠100 ããªç§åŸã«äœããå¿çããå Žåããã§ã«ãã®ããããªé 延ãæããŠããŸãã 100çªç®ã¯ãã§ã«ãã¬ãŒããšããŠèªèãããŠããŸãã
ãããã£ãŠã倧éã®æäœã 10 ç§ã®ããŒã¹ãã«åå²ãããšã誰ãããããã¯ããŠããŸããªã¹ã¯ããããŸãã ãããŠãããã¯æ°ç§éå¹æãããã人ã ã¯ãã§ã«ããã«æ°ã¥ããŸãã ãããã£ãŠãç§ã¯XNUMXç§ä»¥äžã¯ãããããªãã®ã§ãã ãã ãåæã«ããã©ã³ã¶ã¯ã·ã§ã³ã®ãªãŒããŒããããé¡èã«ãªããããããŸã现ããåå²ããªãã§ãã ããã ããŒã¹ã硬ããªããå¥ã®åé¡ãçºçããå¯èœæ§ããããŸãã
ããã¯ã®ãµã€ãºãéžæããŸãã ããããã®å Žåã«ãããŠãç°ãªãæ¹æ³ã§å®è¡ã§ããŸãã èªååã§ããã ãããŠXNUMXããã¯ã®åŠçå¹çã«ãèªä¿¡ããããŸãã ã€ãŸããXNUMXã€ã®ããã¯ã®DELETEãŸãã¯UPDATEãè¡ããŸãã
ã¡ãªã¿ã«ãç§ã話ããŠããã®ã¯ DELETE ã ãã§ã¯ãããŸããã ãæ³åã®ãšããããããã¯ããŒã¿ã«å¯Ÿããäžæ¬æäœã§ãã
ãããŠããã®èšç»ãçŽ æŽãããããšãåãããŸããã ã€ã³ããã¯ã¹ ã¹ãã£ã³ã確èªã§ããŸãããã€ã³ããã¯ã¹ã®ã¿ã®ã¹ãã£ã³ã¯ããã«åªããŠããŸãã ãããŠãå°éã®ããŒã¿ãé¢ä¿ããŠããŸãã ãããŠããã㯠XNUMX ç§ãããããã«å®äºããŸãã çŽ æŽãããã
ãããŠãå£åããªãããšã確èªããå¿ èŠããããŸãã æåã®ããã¯ã¯ããã«ããŸããããŸããããã®åŸã¯ã©ãã©ãæªåããŠãããŸãã ãã®ããã»ã¹ã§ã¯å€ãã®ãã¹ããè¡ãå¿ èŠããããŸãã ããŒã¿ããŒã¹ ã©ãã¯ãŸãã«ããã«åœãŠã¯ãŸããŸãã
ãããŠãæ¬çªç°å¢ã§ããã«æ£ããåŸãããšãã§ããããã«ãäœããæºåããå¿ èŠããããŸãã ããšãã°ããã°ã«æå»ãæžã蟌ãã ããä»ã©ãã«ããã®ãã誰ãåé€ããã®ããæžã蟌ãã ãã§ããŸãã ãããŠããã«ãããåŸã§äœãèµ·ãã£ãŠããããç解ã§ããããã«ãªããŸãã ãããŠãäœãåé¡ãçºçããå Žåã«ã¯ãããã«åé¡ãèŠã€ããŸãã
ãªã¯ãšã¹ãã®å¹çããã§ãã¯ããå¿ èŠããããäœåºŠãç¹°ãè¿ãå¿ èŠãããå Žåã¯ããã§ã㌠ãããã®ãããªãã®ããããŸãã 圌ã¯ãã§ã«æºåãã§ããŠããŸãã æ¯æ¥æ°å人ã®éçºè ã«ãã£ãŠäœ¿çšãããŠããŸãã ãããŠåœŒã¯ãèŠæ±ã«å¿ã㊠30 ç§ã§å·šå€§ãªãã©ãã€ãã®ããŒã¿ããŒã¹ãèªåã®ã³ããŒãšããŠæäŸããæ¹æ³ãç¥ã£ãŠããŸãã ããã§äœããåé€ããŠããªã»ããããšèšããå床åé€ããããšãã§ããŸãã ãã®ããã«å®éšããŠã¿ãããšãã§ããŸãã ç§ã¯ãã®ããšã«ã¯æªæ¥ããããšæã£ãŠããŸãã ãããŠç§ãã¡ã¯ãã§ã«ãããå®è¡ããŠããŸãã
ããŒãã£ã·ã§ãã³ã°æŠç¥ãšã¯äœã§ãã? ãã®ããã¯ã®éçºè ã䜿çšããŠãã 3 ã€ã®ç°ãªãããŒãã£ã·ã§ãã³ã°æŠç¥ãããããŸãã
100ã€ç®ã¯ãšãŠãã·ã³ãã«ã§ãã æ°å€IDãæã£ãŠããŸãã ãããŠããããããŸããŸãªééã«åå²ããŠäœæ¥ããŠã¿ãŸãããã ãã€ãã¹é¢ã¯æããã§ãã æåã®ã»ã°ã¡ã³ãã«ã¯å®éã®ãŽãã 5 è¡ãããããããŸãããã1 çªç®ã® 000 è¡ã«ã¯ãŽããå«ãŸããŠãããããŸã£ããå«ãŸããŠããªãå ŽåãXNUMX è¡ãã¹ãŠããŽãã§ããããšãå€æããŸãã éåžžã«äžåäžãªäœæ¥ã§ãããå£ããããã§ãã 圌ãã¯æ倧ã®IDã奪ãããããç²ç ããŸããã ããã¯çŽ æŽãªã¢ãããŒãã§ãã
10 çªç®ã®æŠç¥ã¯ãã©ã³ã¹ã®ãšããã¢ãããŒãã§ãã Gitlabã§äœ¿çšãããŠããŸãã 圌ãã¯ããŒãã«ãæã«åã£ãŠã¹ãã£ã³ããŸããã åããã¯ã«ã¡ããã© 000 ã¬ã³ãŒããå«ãŸããããã«ãID ããã¯ã®å¢çãèŠã€ããŸããã ãããŠåœŒããåã«äžŠã¹ãŸãã ãããŠãåŠçããŠãããŸãã ããã¯è€æ°ã®ã¹ã¬ããã§å®è¡ã§ããŸãã
ã¡ãªã¿ã«ãæåã®æŠç¥ã§ãããããè€æ°ã®ã¹ã¬ããã§å®è¡ã§ããŸãã é£ãããªãã
ãããããã£ãšã¯ãŒã«ã§åªããã¢ãããŒãããããŸãã ããã XNUMX ã€ç®ã®æŠç¥ã§ãã ãããŠå¯èœã§ããã°ãããéžæããæ¹ãè¯ãã§ãããã ããã¯ç¹å¥ãªã€ã³ããã¯ã¹ã«åºã¥ããŠè¡ãããŸãã ãã®å Žåãã¬ããŒãžæ¡ä»¶ãš ID ã«å¿ããã€ã³ããã¯ã¹ã«ãªãå¯èœæ§ãé«ããªããŸãã ããŒãã«è¡ããªãããã«ãã€ã³ããã¯ã¹ã®ã¿ã®ã¹ãã£ã³ã«ãªãããã« ID ãå«ããŸãã
äžè¬ã«ãã€ã³ããã¯ã¹ã®ã¿ã®ã¹ãã£ã³ã¯ã€ã³ããã¯ã¹ ã¹ãã£ã³ãããé«éã§ãã
ãããŠãåé€ããã ID ãããã«èŠã€ãããŸãã BATCH_SIZE ã¯äºåã«éžæããŸãã ãããŠãç§ãã¡ã¯ããããå
¥æããã ãã§ãªããç¹å¥ãªæ¹æ³ã§å
¥æããããã«ãããã³ã°ããŸãã ãã ããããã¯ããŠããããããã§ã«ããã¯ãããŠããå Žåã¯ããã¯ãããå
ã«é²ãã§æ¬¡ã®ããã¯ãååŸããŸãã æŽæ°ã¹ãããããã¯çšã§ãã Postgres ã®ãã®åªããæ©èœã«ãããå¿
èŠã«å¿ããŠè€æ°ã®ã¹ã¬ããã§äœæ¥ã§ããããã«ãªããŸãã XNUMXã€ã®ã¹ããªãŒã ã§å¯èœã§ãã ãããŠããã« CTE ããããŸã - ãã㯠XNUMX ã€ã®èŠæ±ã§ãã ãããŠããã® CTE ã® XNUMX éã§ã¯å®éã®åé€ãè¡ãããŠããŸã - returning *
ã IDãè¿ãããšãã§ããŸããããã®æ¹ãè¯ãã§ã *
åè¡ã«ããŸãããŒã¿ããªãå Žåã
ãªããããå¿ èŠãªã®ã§ãããã? ããã¯ç§ãã¡ãå ±åããå¿ èŠããããã®ã§ãã å®éãéåžžã«å€ãã®è¡ãåé€ããŸããã ãããŠããã®ããã«IDãŸãã¯created_atããšã«å¢çç·ãèšå®ããŸãã æå°å€ãæ倧å€ãå®è¡ã§ããŸãã ä»ã«ãäœãã§ããã¯ãã§ãã ããã«ã¯ããããè©°ããããšãã§ããŸãã ã¢ãã¿ãªã³ã°ã«ãéåžžã«äŸ¿å©ã§ãã
ã€ã³ããã¯ã¹ã«ã€ããŠã¯ãã XNUMX ã€æ³šæç¹ããããŸãã ãã®ã¿ã¹ã¯ã«ç¹å¥ãªã€ã³ããã¯ã¹ãå¿ èŠã§ãããšå€æããå Žåã¯ãããã«ãã£ãŠããŒãã®ã¿ã®ã¿ãã«ã®æŽæ°ãæãªãããªãããã«ããå¿ èŠããããŸãã ã€ãŸããPostgres ã«ã¯ãã®ãããªçµ±èšããããŸãã ããã¯ãããŒãã«ã® pg_stat_user_tables ã§ç¢ºèªã§ããŸãã ãããã¢ããããŒãã䜿çšãããŠãããã©ããã確èªã§ããŸãã
æ°ããã€ã³ããã¯ã¹ã«ãã£ãŠããããåçŽã«åãåãããå ŽåããããŸãã ä»ã®ã¢ããããŒãããã¹ãŠãã§ã«æ©èœããŠããã®ã§ãé床ãèœãšããŠãã ããã ã€ã³ããã¯ã¹ã衚瀺ãããããã ãã§ã¯ãªãïŒåã€ã³ããã¯ã¹ã®æŽæ°ãå°ãé ããªããŸãããå°ããã€ïŒãããã§ã¯ãŸã ãããå°ç¡ãã«ãªã£ãŠããŸãã ãŸãããã®ããŒãã«ã«å¯ŸããŠç¹å¥ãªæé©åãè¡ãããšã¯ã§ããŸããã ããã¯æã èµ·ãããŸãã ããã¯éåžžã«åŸ®åŠãªç¹ãªã®ã§ãèŠããŠãã人ã¯ã»ãšãã©ããŸããã ãããŠãã®çæã¯èžã¿ãããã§ãã å Žåã«ãã£ãŠã¯ãå察åŽããã®ã¢ãããŒããèŠã€ããŠãããã§ããã®æ°ããã€ã³ããã¯ã¹ã䜿çšããªããå¥ã®ã€ã³ããã¯ã¹ãäœæããããŸãã¯ä»ã®æ¹æ³ (ããšãã° XNUMX çªç®ã®æ¹æ³ã䜿çšãã) ãå¿ èŠã«ãªãå ŽåããããŸãã
ãã ãããããæãæé©ãªæŠç¥ã§ããããããã«åå²ã㊠XNUMX ã€ã®ãªã¯ãšã¹ãã§ããããæ®åœ±ããããå°ãåé€ãããããæ¹æ³ã§ãã
ãã³ã°ãã©ã³ã¶ã¯ã·ã§ã³
èªåããã¥ãŒã ã®ããã㯠-
ãããã¯ã®åé¡ -
ééã #5 ã¯å€§ããªééãã§ãã Okmeter ã® Nikolai ã Postgres ã®ç£èŠã«ã€ããŠè©±ããŸããã æ®å¿µãªãããçæ³ç㪠Postgres ç£èŠã¯ååšããŸããã è¿ããã®ãããã°ãé ããã®ããããŸãã OKmeter ã¯ã»ãŒå®ç§ã«è¿ã¥ããŠããŸãããå€ãã®ãã®ãæ¬ ããŠãããè¿œå ããå¿ èŠããããŸãã ããã«åããŠæºåãããŠããå¿ èŠããããŸãã
ããšãã°ãç¡å¹ãªã¿ãã«ã¯ç£èŠããã®ãæé©ã§ãã ããŒãã«ã«æ»ãã ãã®ãããããããå Žåã¯ãäœããééã£ãŠããŸãã ä»ãã察å¿ããæ¹ãè¯ãã§ããããããªããšå£åãèµ·ããå¯èœæ§ãããã®ã§ã暪ã«ãªã£ãŠã倧äžå€«ã§ãã ããã¯èµ·ãããŸãã
IO ã倧ããå Žåããããè¯ããªãããšã¯æããã§ãã
é·ãååŒãã OLTP ã§ã¯é·ããã©ã³ã¶ã¯ã·ã§ã³ãèš±å¯ããªãã§ãã ããã ãããŠãããã«ããã¹ãããããžã®ãªã³ã¯ãåç §ãããšããã®ã¹ããããã䜿çšããŠããã§ã«é·ããã©ã³ã¶ã¯ã·ã§ã³ã®è¿œè·¡ãè¡ãããšãã§ããŸãã
ãªãé·æéã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯è¯ããªãã®ã§ãããã? ãã¹ãŠã®ããã¯ã解é€ãããã®ã¯æåŸã ãã ããã§ãã ãããŠç§ãã¡ã¯çãå°ç¡ãã«ããŸãã ããã«ããã¹ãŠã®ããŒãã«ã®èªåããã¥ãŒã ããããã¯ããŸãã å šç¶è¯ããªããã ã¬ããªã«ã§ããã ã¹ã¿ã³ãã€ãæå¹ã«ãªã£ãŠããå Žåã§ããããã§ãåé¡ã¯çºçããŸãã äžè¬ã«ãé·æéã®ãã©ã³ã¶ã¯ã·ã§ã³ãåé¿ããã®ãæé©ãªå Žæã¯ãããŸããã
ããã¥ãŒã ãããŠããªãããŒãã«ãå€æ°ããå Žåã¯ãã¢ã©ãŒããå¿ èŠã§ãã ããã§ã¯ãã®ãããªç¶æ³ãèããããŸãã èªåããã¥ãŒã ã®åäœã«éæ¥çã«åœ±é¿ãäžããå¯èœæ§ããããŸãã ãã㯠Avito ã®æç²ã§ãç§ãå°ãæ¹è¯ãããã®ã§ãã ãããŠãããã¯èªåããã¥ãŒã ã§äœãã§ããããç¥ãããã®èå³æ·±ãããŒã«ã§ããããšãããããŸããã ããšãã°ãããã€ãã®ããŒãã«ã¯ããã§åŸ æ©ããŠããŠãé çªãåŸ ã¡ãŸããã ãŸããç£èŠå¯Ÿè±¡ã«ããŠã¢ã©ãŒããçºããå¿ èŠããããŸãã
ãããŠãããã¯ãçºè¡ããŸãã ãããã¯ã®æšã®æ£®ã ç§ã¯èª°ãããäœããåãå ¥ããŠæ¹è¯ããã®ã奜ãã§ãã ããã§ã¯ããã㯠ããªãŒã®æ£®ã瀺ã Data Egret ããã¯ãŒã«ãªååž° CTE ãååŸããŸããã ããã¯åªãã蚺æããŒã«ã§ãã ãããŠãããã«åºã¥ããŠç£èŠãæ§ç¯ããããšãã§ããŸãã ããããããã¯æ éã«è¡ãå¿ èŠããããŸãã èªåçšã«å°ããªstatement_timeoutãäœæããå¿ èŠããããŸãã ãããŠãlock_timeout ãæãŸããã§ãã
å Žåã«ãã£ãŠã¯ãããããã¹ãŠã®ãšã©ãŒãåèšããŠçºçããããšããããŸãã
ç§ã®æèŠã§ã¯ãããã§ã®äž»ãªééãã¯çµç¹çãªãã®ã§ãã ãã¯ããã¯ãåŒã£åŒµããªãã®ã§çµç¹çã§ãã ããããã® 2 ã§ãã圌ãã¯ééã£ãå Žæã«ãã§ãã¯ãå ¥ããŸããã
ç°¡åã«ãã§ãã¯ã§ããå®çšŒåã¯ããŒã³ããªãã£ããããééã£ãå Žæã§ãã§ãã¯ããŠããŸããŸããã éçºè ã¯æ¬çªç°å¢ã«ãŸã£ããã¢ã¯ã»ã¹ã§ããªãå ŽåããããŸãã
ãããŠãç§ãã¡ã¯ããã«ããªãããšã確èªããŸããã ããç§ãã¡ãããã確èªããŠããããç§ãã¡èªèº«ããããèŠãŠããã§ãããã éçºè ã¯ãåãéã®ããŒã¿ãšåãå Žæãããè¯å¥œãªç°å¢ã§ãã§ãã¯ããã°ãDBA ããªããŠããã¹ãŠã確èªã§ããŸããã 圌ã¯ãã®ãã¹ãŠã®å£åãèŠãããæ¥ãå ¥ãã ããã
èªåããã¥ãŒã ã«ã€ããŠããã«è©³ããã æ°çŸäžè¡ã®å€§èŠæš¡ãªã¹ã€ãŒããè¡ã£ãåŸããREPACK ãè¡ãå¿ èŠããããŸãã ããã¯ã€ã³ããã¯ã¹ã«ãšã£ãŠç¹ã«éèŠã§ãã ç§ãã¡ãããã«ãããã®ããã¹ãŠæé€ããåŸã圌ãã¯æ°åãæªããªãã§ãããã
ãããŠãæ¯æ¥ã®æé€äœæ¥ã埩掻ããããå Žåã¯ãããé »ç¹ã«ããã ãèŠæš¡ã¯å°ããããããšããå§ãããŸãã XNUMX åã« XNUMX åããããã¯ãããããå°ãé »ç¹ã«è¡ãããšããããŸãã ãããŠãXNUMX ã€ã®ããšãç£èŠããå¿ èŠããããŸããããã¯ãããã«ãšã©ãŒããªãããšãšãé ãããªãããšã§ãã ç§ã瀺ããããªãã¯ã¯ããã解決ããã ãã§ãã
ç§ãã¡ããã£ãŠããããšã¯ãªãŒãã³ãœãŒã¹ã§ãã GitLab ã«æçš¿ãããŠããŸãã ãŸããDBA ããªããŠããã§ãã¯ã§ããããã«ããŠããŸãã ç§ãã¡ã¯ããŒã¿ããŒã¹ ã©ããè¡ã£ãŠããŸããã€ãŸããJoe ãçŸåšäœæ¥ããŠããããŒã¹ ã³ã³ããŒãã³ããåŒã³åºããŸãã ãããŠãæ¬çªç°å¢ã®ã³ããŒãå ¥æããããšãã§ããŸãã çŸåšãSlack çšã® Joe ã®å®è£ ããããããã§ãããããã®ãªã¯ãšã¹ãã説æããããšèšããšãããŒã¿ããŒã¹ã®ã³ããŒã®çµæãããã«ååŸã§ããŸãã ããã§åé€ããããšãã§ããŸããã誰ãããã«æ°ã¥ããŸããã
10 ãã©ãã€ãããããšããŸããããŒã¿ããŒã¹ ã©ãã 10 ãã©ãã€ãã«ããŸãã ãŸããåæã« 10 ãã©ãã€ãã®ããŒã¿ããŒã¹ã䜿çšã§ããããã10 人ã®éçºè ãåæã«äœæ¥ã§ããŸãã 誰ããèªåã®ããããããšãããããšãã§ããŸãã åé€ããããããããããã§ãããªã©ãããã¯ãšãŠãå¹»æ³ã§ãã ããã«ã€ããŠã¯ææ¥è©±ããŸãã
ããã¯ã·ã³ ããããžã§ãã³ã°ãšåŒã°ããŸãã ããã¯åŸ®åŠãªããããžã§ãã³ã°ã§ãã ããã¯ãéçºããã¹ãã®é ããå€§å¹ ã«è§£æ¶ãããã®ç¹ã§äžçãããè¯ãå Žæã«ããããçš®ã®ãã¡ã³ã¿ãžãŒã§ãã ã€ãŸããäžæ¬æäœã®åé¡ãåé¿ã§ããã ãã§ãã
äŸ: 5 ãã©ãã€ãã®ããŒã¿ããŒã¹ã30 ç§ä»¥å ã«ã³ããŒãååŸããŸãã ãããŠãããã¯ãµã€ãºã«ãäŸåããŸãããã€ãŸããäœãã©ãã€ããã¯é¢ä¿ãããŸããã
ä»æ¥ããªããè¡ããã®ã¯ã
質å
å®éã®ç¶æ³ã§ã¯ãããŒãã«ã«æ®ãã¹ãããŒã¿ããåé€ããå¿ èŠãããããŒã¿ãããã¯ããã«å°ãªãããšãå€æããããšããããããŸãã ã€ãŸãããã®ãããªç¶æ³ã§ã¯ãæ°ãããªããžã§ã¯ããäœæããå¿ èŠãªããŒã¿ã®ã¿ãããã«ã³ããŒããå€ãããŒãã«ããã©ã³ã¯ããæ¹ãç°¡åãªããããã®ãããªã¢ãããŒããå®è£ ããæ¹ãç°¡åã§ããããšããããããŸãã åãæ¿ãäžã®çŸæç¹ã§ã¯ãããã°ã©ã ã«ããã¢ãããŒããå¿ èŠã§ããããšã¯æããã§ãã ãã®ã¢ãããŒãã¯ã©ãã§ããïŒ
ããã¯éåžžã«åªããã¢ãããŒãã§ãããéåžžã«åªããã¿ã¹ã¯ã§ãã ãã㯠pg_repack ãè¡ãããšãšéåžžã«äŒŒãŠãããID ã 4 ãã€ãã«ãããšãã«è¡ãå¿ èŠãããããšãšéåžžã«äŒŒãŠããŸãã å€ãã®ãã¬ãŒã ã¯ãŒã¯ã¯æ°å¹Žåã«ãããè¡ã£ãŠããŸãããããã¬ãŒãã ãã倧ãããªãã8 ãã€ãã«å€æããå¿ èŠããããŸããã
ãã®äœæ¥ã¯ããªãé£ããã§ãã ãã£ãã ãããŠãéåžžã«æ³šæããªããã°ãªããŸããã éµãªã©ã¯ãããŸããããããŠããŸãã ã€ãŸããæšæºçãªã¢ãããŒã㯠pg_repack ã䜿çšããããšã§ãã ãã®ãããªã©ãã«ã宣èšããŸãã ãŸããã¹ãããã·ã§ãã ããŒã¿ã®ã¢ããããŒããéå§ããåã«ããã¹ãŠã®å€æŽã远跡ãã XNUMX ã€ã®ãã¬ãŒãã宣èšããŸãã äžéšã®å€æŽã远跡ã§ããªãå¯èœæ§ããããšããããªãã¯ããããŸãã 埮åŠãªç¹ããããŸãã ãããŠãããŒãªã³ã°å€æŽã«ãã£ãŠåãæ¿ããŸãã å šå¡ãã·ã£ããããŠã³ãããšãã¯å°ãæéãããããŸãããéåžžã¯ãããè¡ãããŠããŸãã
GitHub ã® pg_repack ãèŠããšãID ã int 4 ãã int 8 ã«å€æããã¿ã¹ã¯ããã£ããšãã«ãpg_repack èªäœã䜿çšãããšããã¢ã€ãã¢ããããŸããã ãããå¯èœã§ãããã¡ãã£ãšããããã¯ã§ãããããã§ãæ©èœããŸãã pg_repack ã䜿çšããããªã¬ãŒã«ä»å ¥ããŠãããã®ããŒã¿ã¯å¿ èŠãããŸããããšèšãããšãã§ããŸããã€ãŸããå¿ èŠãªãã®ã ãã転éããŸãã ãããŠåœŒã¯ãã åãæ¿ããŠãããã§çµããã§ãã
ãã®ã¢ãããŒãã§ããããŒãã«ã® XNUMX çªç®ã®ã³ããŒãååŸã§ããŸãããã®ã³ããŒã§ã¯ãããŒã¿ããã§ã«ã€ã³ããã¯ã¹ä»ããããŠãããçŸããã€ã³ããã¯ã¹ã§éåžžã«åçã«ç©ã¿éããããŠããŸãã
èšæºæã¯ãªããè¯ãã¢ãããŒãã§ãã ãããããããèªååãããã€ãŸãæ®éçãªãœãªã¥ãŒã·ã§ã³ãéçºããè©Šã¿ãããããšã¯ç¥ã£ãŠããŸãã ãã®èªååã«ã€ããŠãé£çµ¡ãããŠããã ããŸãã Python ã§æžãããŠããã®ã§ãããã¯è¯ãããšã§ãã
ç§ã¯ MySQL ã®äžçããå°ãã ãé¢ããŠããã®ã§ã話ãèãã«æ¥ãŸããã ãããŠç§ãã¡ã¯ãã®ã¢ãããŒããæ¡çšããŠããŸãã
ãã ãããã㯠90% ãéæããå Žåã«éããŸãã 5% ããå Žåãããã䜿çšããã®ã¯ããŸãè¯ããããŸããã
ãå ±åããããšãããããŸãïŒ prod ã®å®å šãªã³ããŒãäœæãããªãœãŒã¹ããªãå Žåãè² è·ããµã€ãºãèšç®ããããã®ã¢ã«ãŽãªãºã ãèšç®åŒã¯ãããŸãã?
è¯ã質åã ãããŸã§ã®ãšãããæ°ãã©ãã€ãã®ããŒã¿ããŒã¹ãèŠã€ããããšãã§ããŠããŸãã ããšãããŒããŠã§ã¢ãåãã§ãªããŠããããšãã°ãã¡ã¢ãªãããã»ããµãå°ãªãããã£ã¹ã¯ããŸã£ããåãã§ã¯ãããŸããããããã§ãç§ãã¡ã¯åãããšãããŸãã ãŸã£ããã©ãã«ããªãå Žåã¯ãèããå¿ èŠããããŸãã ææ¥ãŸã§èããããŠãã ãããããªããæ¥ãŸãããç§ãã¡ã¯è©±ããŸããããã¯è¯ã質åã§ãã
ãå ±åããããšãããããŸãïŒ ããªãã¯æåã«ãããŸããŸãªå¶éãããã¯ãŒã«ãª Postgres ãååšãããšããäºå®ããå§ããŸããããããã¯éçºäžã§ãã ãããŠãããã¯å šäœçã«èŠãŠæŸèæã§ãã ããã¯ãã¹ãŠãPostgres èªäœã®éçºãšççŸããŠããã®ã§ã¯ãããŸããããPostgres èªäœã®éçºã§ã¯ãäœããã® DELETE é 延é¢æ°ããããã§ç§ãã¡ãå¥åŠãªæ段ã§æ±ãããšããŠãããã®ãäœã¬ãã«ã«ä¿ã€ã¹ãäœããçŸããã§ãããã
SQL 㧠XNUMX ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§å€ãã®ã¬ã³ãŒããåé€ãŸãã¯æŽæ°ãããšèšã£ãããPostgres ã¯ã©ã®ããã«ããŠãããããã«åæ£ã§ããã®ã§ãããã? ç©ççã«æ¥åã«éçãããããŸãã ãããããé·ããã£ãŠãããŸãã ãããŠãã®æç¹ã§ããã¯ããŸãããªã©ã
ã€ã³ããã¯ã¹ã®äœæã¯å®äºã§ãã
åããã§ãã¯ãã€ã³ãã®ãã¥ãŒãã³ã°ãèªååã§ãããšèããããŸãã ãã€ããããªããããããªãã ããããããã§ã¯è³ªåãããããããŸããã
åé¡ã¯ããã¡ãã«è¡ã£ãããã¡ãã«è¡ã£ããããã¡ãã§ã¯äžŠè¡ããŠé²ããããªéçºã®ãã¯ãã«ãããã®ãââãšããããšã§ãã ãããã®ã 圌ãã¯ãŸã ããã«ã€ããŠèããŠããªãã®ã§ããïŒ
ä»ãã䜿ããååã«ã€ããŠã話ããŸããã å¥ã®ãããããããŸã
ãã§ãã¯ãã€ã³ãã®èª¿æŽã«ã€ããŠã¯ããããè¡ãããšãã§ããŸããã¯ã©ãŠãäžã« XNUMX åã®ã¯ã©ã¹ã¿ãŒãšç°ãªãããŒããŠã§ã¢ãç°ãªãä»®æ³ãã·ã³ãããå Žåãåœç€Ÿã®ãããã䜿çšã§ããŸãã
ããã«ã¡ã¯é·æååŒã®å±éºæ§ã«ã€ããŠè©±ããŸããã åé€ã®å Žåã«ã¯èªåããã¥ãŒã ããããã¯ããããšèšããŸããã ä»ã«ã©ã®ããã«ç§ãã¡ã«å®³ãåãŒãã®ã§ããããïŒ ãªããªããç§ãã¡ã¯ã¹ããŒã¹ã解æŸããããã䜿çšã§ããããã«ããããšã«ã€ããŠãã£ãšè©±ããŠããããã§ãã ä»ã«äœã足ããªãã§ããããïŒ
ããã§ã®æ倧ã®åé¡ã¯èªåããã¥ãŒã ã§ã¯ãªããããããŸããã ãããŠãé·ããã©ã³ã¶ã¯ã·ã§ã³ãä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ãããã¯ããå¯èœæ§ããããšããäºå®ããã®å¯èœæ§ã¯ããã«å±éºã§ãã 圌女ã¯äŒããããããªãããäŒããªããããããªãã ãã圌女ãäŒã£ãããããã¯éåžžã«æªãããšã«ãªãå¯èœæ§ããããŸãã ãããŠèªåããã¥ãŒã ã«é¢ããŠããããã¯åé¡ã§ãã OLTP ã®é·ããã©ã³ã¶ã¯ã·ã§ã³ã«ã¯ãããã¯ãšèªåããã¥ãŒã ãšãã XNUMX ã€ã®åé¡ããããŸãã ãŸããã¬ããªã«äžã§ããã ã¹ã¿ã³ã〠ãã£ãŒãããã¯ãæå¹ã«ãªã£ãŠããå Žåã§ãããã¹ã¿ãŒäžã§èªåããã¥ãŒã ããã¯ãåãåããŸããããã¯ã¯ã¬ããªã«ããå±ããŸãã ããããå°ãªããšãããã¯ã¯ååšããªãã§ãããã ãããŠããã¯ãããã§ãããã ããŒã¿ã®å€æŽã«ã€ããŠè©±ããŠããã®ã§ãããã§ã¯ããã¯ãéèŠãªãã€ã³ãã«ãªããŸãã ãããŠãããããã£ãšé·ãéç¶ããšãããã¯ããããã©ã³ã¶ã¯ã·ã§ã³ããŸããŸãå¢ããŸãã 圌ãã¯ä»äººãçãããšãã§ããŸãã ãããŠããã¯ã®æšãçŸããŸãã ã¹ãããããžã®ãªã³ã¯ãæäŸããŸããã ãããŠããã®åé¡ã¯ãèç©ãããã ãã®èªåããã¥ãŒã ã®åé¡ãããæ©ãé¡èã«ãªããŸãã
ãå ±åããããšãããããŸãïŒ ããªãã¯ãã¹ããééã£ãŠãããšèšã£ãŠã¬ããŒããå§ããŸããã ç§ãã¡ã¯ãåãè£ åãåãæ¹æ³ã§ããŒã¹ã䜿çšããå¿ èŠããããšããèããç¶ããŸããã éçºè ã«ããŒã¹ãæäŸãããšããŸãããã ãããŠåœŒã¯ãã®èŠæ±ã«å¿ããã ãããŠåœŒã¯å æ°ã®ããã ã ãããã圌ã¯ã©ã€ãã®å Žåã¯ãã§ãã¯ããŸããããã©ã€ãã®å Žåãããšãã°ã60ã70ïŒ ã®è² è·ããããŸãã ãããŠãã®ãã¥ãŒãã³ã°ãããŠãããŸãããŸããããŸããã
ããŒã ã«å°é家ãé 眮ããå®éã®ããã¯ã°ã©ãŠã³ãè² è·ã§äœãèµ·ããããäºæž¬ã§ãã DBA å°é家ã掻çšããããšãéèŠã§ãã ã¯ãªãŒã³ãªå€æŽãå®è¡ãããšã次ã®ãããªç»åã衚瀺ãããŸãã ããããããé«åºŠãªã¢ãããŒãã§ã¯ãæ¬çªç°å¢ã§ã·ãã¥ã¬ãŒããããè² è·ã䜿çšããŠãåãããšãå床å®è¡ããŸããã ãšãŠãã¯ãŒã«ã§ãã ãããŸã§ã¯æé·ããªããã°ãªããŸããã 倧人ã£ãœãã§ããã ç§ãã¡ã¯èªåãã¡ãæã£ãŠãããã®ã確èªããååãªãªãœãŒã¹ããããã©ããã確èªããŸããã ããã¯è¯ã質åã§ãã
ãã§ã«ã¬ããŒãž ã»ã¬ã¯ããå®è¡ããŠããŠãããšãã°åé€æžã¿ãã©ã°ãããå Žå
ããã¯ãPostgres ã§èªåããã¥ãŒã ãèªåçã«è¡ãããšã§ãã
ããã圌ã¯ãããŸããïŒ
Autovacuum ã¯ã¬ããŒãž ã³ã¬ã¯ã¿ãŒã§ãã
ããããšãããããŸãïŒ
ãå ±åããããšãããããŸãïŒ ãã¹ãŠã®ãŽããã¡ã€ã³ããŒãã«ã®ã©ããããæ±ããŠããŸããããªæ¹æ³ã§ããŒãã£ã·ã§ã³åå²ã䜿çšããŠããŒã¿ããŒã¹ãããã«èšèšãããªãã·ã§ã³ã¯ãããŸãã?
ãã¡ãããããŸãã
ã§ã¯ã䜿çšãã¹ãã§ã¯ãªãããŒãã«ãããã¯ããå Žåã«èªåèªèº«ãå®ãããšã¯ã§ããã®ã§ãããã?
ãã¡ãããããŸãã ããããããã¯é¶ãå ãåµãå ããšãããããªåé¡ã§ãã å°æ¥äœãèµ·ããããç§ãã¡å šå¡ãç¥ã£ãŠãããªãããã¡ãããç§ãã¡ã¯ãã¹ãŠãå·éã«è¡ãã§ãããã ããããããžãã¹ã¯å€åããŠãããæ°ããã³ã©ã ãæ°ããèŠæ±ããããŸãã ãããŠããã£ãšããããåé€ããããšæããŸãã ãããããã®çæ³çãªç¶æ³ã¯äººçã«ãããŠèµ·ãããŸãããåžžã«èµ·ããããã§ã¯ãããŸããã ããããå šäœçã«ã¯è¯ãã¢ã€ãã¢ã§ãã åãè©°ããã ãã§çµããã§ãã
åºæïŒ habr.com