เช…เชฎเซ‡ PostgreSQL เชธเชพเชฅเซ‡ เชกเชฟเชเชพเชธเซเชŸเชฐ เชฐเชฟเช•เชตเชฐเซ€ เชฎเชพเชŸเซ‡ เช†เชณเชธเซ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเซเชฏเซ‹

เช…เชฎเซ‡ PostgreSQL เชธเชพเชฅเซ‡ เชกเชฟเชเชพเชธเซเชŸเชฐ เชฐเชฟเช•เชตเชฐเซ€ เชฎเชพเชŸเซ‡ เช†เชณเชธเซ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเซเชฏเซ‹
เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชฌเซ‡เช•เช…เชช เชจเชฅเซ€. เช•เซ‡ เชจเชนเซ€เช‚? เช†เช•เชธเซเชฎเชฟเช• เชฐเซ€เชคเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒเชพ เชถเซ‰เชฐเซเชŸเช•เชŸเซเชธเชฎเชพเช‚เชฅเซ€ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡.

เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชจเชฟเชทเซเชฃเชพเชคเซ‹ GitLab เช•เชพเชฎ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡ GitLab.com - เชชเซเชฐเช•เซƒเชคเชฟเชฎเชพเช‚ เชธเซŒเชฅเซ€ เชฎเซ‹เชŸเซ‹ เช—เชฟเชŸเชฒเซ‡เชฌ เชฆเชพเช–เชฒเซ‹. 3 เชฎเชฟเชฒเชฟเชฏเชจ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เช…เชจเซ‡ เชฒเช—เชญเช— 7 เชฎเชฟเชฒเชฟเชฏเชจ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เชธเชพเชฅเซ‡, เชคเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ เชธเชพเชฅเซ‡เชจเซ€ เชธเซŒเชฅเซ€ เชฎเซ‹เชŸเซ€ เช“เชชเชจ เชธเซ‹เชฐเซเชธ SaaS เชธเชพเช‡เชŸเซเชธเชฎเชพเช‚เชจเซ€ เชเช• เช›เซ‡. PostgreSQL เชกเซ‡เชŸเชพเชฌเซ‡เช เชธเชฟเชธเซเชŸเชฎ เชตเชฟเชจเชพ, GitLab.com เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชตเชงเซ เช†เช—เชณ เชตเชงเชถเซ‡ เชจเชนเซ€เช‚, เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชกเซ‡เชŸเชพ เช—เซเชฎ เชฅเชˆ เชถเช•เซ‡ เชคเซเชฏเชพเชฐเซ‡ เช•เซ‹เชˆเชชเชฃ เชจเชฟเชทเซเชซเชณเชคเชพเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชซเซ‹เชฒเซเชŸ เชธเชนเชฟเชทเซเชฃเซเชคเชพเชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชถเซเช‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช. เชคเซ‡ เช…เชธเช‚เชญเชตเชฟเชค เช›เซ‡ เช•เซ‡ เช†เชตเซ€ เช†เชชเชคเซเชคเชฟ เชฅเชถเซ‡, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชตเชฟเชตเชฟเชง เชฌเซ‡เช•เช…เชช เช…เชจเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชชเชฆเซเชงเชคเชฟเช“ เชธเชพเชฅเซ‡ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชคเซˆเชฏเชพเชฐ เช›เซ€เช เช…เชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช›เซ€เช.

เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช เชกเซ‡เชŸเชพเชฌเซ‡เชธเซ‡เชธเชจเซ‹ เชฌเซ‡เช•เช…เชช เชฒเซ‡เชตเชพเชจเซเช‚ เชธเชพเชงเชจ เชจเชฅเซ€ (เชจเซ€เชšเซ‡ เชœเซเช“). เชชเชฐเช‚เชคเซ เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชœเซ‹เชˆเชถเซเช‚ เช•เซ‡ เช†เชณเชธเซ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช†เช•เชธเซเชฎเชฟเช• เชฐเซ€เชคเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชกเซ‡เชŸเชพเชจเซ‡ เชเชกเชชเชฅเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเซ‹: เชšเชพเชฒเซ GitLab.com เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชถเซ‹เชฐเซเชŸเช•เชŸ เช•เชพเชขเซ€ เชจเชพเช–เซเชฏเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ gitlab-ce เช…เชจเซ‡ เชฎเชฐเซเชœ เชตเชฟเชจเช‚เชคเซ€เช“ เช…เชจเซ‡ เช•เชพเชฐเซเชฏเซ‹ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฃเซ‹ เช—เซเชฎเชพเชตเซเชฏเชพ.

เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเชพเชฅเซ‡, เช…เชฎเซ‡ เชฎเชพเชคเซเชฐ 1,5 เช•เชฒเชพเช•เชฎเชพเช‚ เชกเซ‡เชŸเชพ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเซเชฏเซ‹. เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฅเชฏเซเช‚ เชคเซ‡ เชœเซเช“.

PostgreSQL เชธเชพเชฅเซ‡ เชชเซ‹เชˆเชจเซเชŸ เช‡เชจ เชŸเชพเช‡เชฎ เชฐเชฟเช•เชตเชฐเซ€

PostgreSQL เชฎเชพเช‚ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เชซเช‚เช•เซเชถเชจ เช›เซ‡ เชœเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชจเซ‡ เชšเซ‹เช•เซเช•เชธ เชธเชฎเชฏเซ‡ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡ เช•เชนเซ‡เชตเชพเชฏ เช›เซ‡ เชชเซ‹เชˆเชจเซเชŸ-เชˆเชจ-เชŸเชพเช‡เชฎ เชฐเชฟเช•เชตเชฐเซ€ (PITR) เช…เชจเซ‡ เชคเซ‡ เชœ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‡ เช…เชฆเซเชฏเชคเชจ เชฐเชพเช–เซ‡ เช›เซ‡: เชธเชฎเช—เซเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เช เช•เซเชฒเชธเซเชŸเชฐ (เชฌเซ‡เช เชฌเซ‡เช•เช…เชช) เชจเชพ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชธเซเชจเซ‡เชชเชถเซ‹เชŸเชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชšเซ‹เช•เซเช•เชธ เชธเชฎเชฏ เชธเซเชงเซ€ เชฐเชพเชœเซเชฏเชจเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เชถเซเชฐเซ‡เชฃเซ€ เชฒเชพเช—เซ เช•เชฐเซ€เช เช›เซ€เช.

เช•เซ‹เชฒเซเชก เชฌเซ‡เช•เช…เชช เชฎเชพเชŸเซ‡ เช† เชธเซเชตเชฟเชงเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชจเชฟเชฏเชฎเชฟเชคเชชเชฃเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชกเซ‡เชŸเชพเชฌเซ‡เช เชฌเซ‡เช•เช…เชช เชฌเชจเชพเชตเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเซ€เช เช›เซ€เช (GitLab เช†เชฐเซเช•เชพเช‡เชตเซเชธ เช—เซ‚เช—เชฒ เช•เซเชฒเชพเช‰เชก เชธเซเชŸเซ‹เชฐเซ‡เชœ). เช…เชฎเซ‡ เชฒเช–เชตเชพ-เช†เช—เชณเชจเชพ เชฒเซ‹เช—เชจเซ‡ (เชฒเช–เซ‹-เช†เช—เชณ เชฒเซ‹เช—, WAL). เช…เชจเซ‡ เช† เชฌเชงเชพ เชธเชพเชฅเซ‡, เช…เชฎเซ‡ เช†เชชเชคเซเชคเชฟ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ เชฎเชพเชŸเซ‡ PITR เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช: เชจเชฟเชทเซเชซเชณเชคเชพ เชชเชนเซ‡เชฒเชพ เชฒเซ€เชงเซ‡เชฒเชพ เชธเซเชจเซ‡เชชเชถเซ‹เชŸเชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡, เช…เชจเซ‡ WAL เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชจเชฟเชทเซเชซเชณเชคเชพ เชธเซเชงเซ€เชจเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ‡ เชฒเชพเช—เซ เช•เชฐเซ‹.

เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชถเซเช‚ เช›เซ‡?

เชธเซเชธเซเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช เชตเชฟเชฒเช‚เชฌ เชธเชพเชฅเซ‡ WAL เชฎเชพเช‚เชฅเซ€ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เช…เชฐเชœเซ€ เช›เซ‡. เชเชŸเชฒเซ‡ เช•เซ‡, เชเช• เช•เชฒเชพเช•เชฎเชพเช‚ เชตเซเชฏเชตเชนเชพเชฐ เชฅเชฏเซ‹ X, เชชเชฐเช‚เชคเซ เชคเซ‡ เชตเชฟเชฒเช‚เชฌ เชธเชพเชฅเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชฎเชพเช‚ เชฆเซ‡เช–เชพเชถเซ‡ d เชเช• เช•เชฒเชพเช•เชฎเชพเช‚ X + d.

เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เชชเชพเชธเซ‡ เชญเซŒเชคเชฟเช• เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ 2 เชฐเซ€เชคเซ‹ เช›เซ‡: เชฌเซ‡เช•เช…เชช เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ เช…เชจเซ‡ เชธเซเชŸเซเชฐเซ€เชฎเชฟเช‚เช— เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ. เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช, เช…เชจเชฟเชตเชพเชฐเซเชฏเชชเชฃเซ‡ PITR เชจเซ€ เชœเซ‡เชฎ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชธเชคเชค: เช…เชฎเซ‡ เชธเชคเชค WAL เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชชเชฐ เชฒเชพเช—เซ เช•เชฐเซ€เช เช›เซ€เช. เช เชธเซเชŸเซเชฐเซ€เชฎเชฟเช‚เช— เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช…เชชเชธเซเชŸเซเชฐเซ€เชฎ เชกเซ‡เชŸเชพเชฌเซ‡เช เชนเซ‹เชธเซเชŸเชฎเชพเช‚เชฅเซ€ เชธเซ€เชงเชพ เชœ WAL เชธเซเชŸเซเชฐเซ€เชฎ เชฎเซ‡เชณเชตเซ‡ เช›เซ‡. เช…เชฎเซ‡ เช†เชฐเซเช•เชพเช‡เชต เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟเชจเซ‡ เชชเซเชฐเชพเชงเชพเชจเซเชฏ เช†เชชเซ€เช เช›เซ€เช - เชคเซ‡เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเซเช‚ เชตเชงเซ เชธเชฐเชณ เช›เซ‡ เช…เชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจ เช•เซเชฒเชธเซเชŸเชฐ เชธเชพเชฅเซ‡ เชธเซเชธเช‚เช—เชค เชฐเชนเซ‡เชคเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชชเซเชฐเชฆเชฐเซเชถเชจ เช›เซ‡.

เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเซ€

เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ เชตเชฟเช•เชฒเซเชชเซ‹ เชซเชพเชˆเชฒเชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡ recovery.conf. เช‰เชฆเชพเชนเชฐเชฃ:

standby_mode = 'on'
restore_command = '/usr/bin/envdir /etc/wal-e.d/env /opt/wal-e/bin/wal-e wal-fetch -p 4 "%f" "%p"'
recovery_min_apply_delay = '8h'
recovery_target_timeline = 'latest'

เช† เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเชพเชฅเซ‡, เช…เชฎเซ‡ เชฌเซ‡เช•เช…เชช เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ เชธเชพเชฅเซ‡ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‡ เช—เซ‹เช เชตเซ€ เช›เซ‡. เช…เชนเซ€เช‚ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡ wal-e WAL เชธเซ‡เช—เชฎเซ‡เชจเซเชŸเซเชธ เช•เชพเชขเชตเชพ เชฎเชพเชŸเซ‡ (restore_command) เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€, เช…เชจเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช†เช  เช•เชฒเชพเช• เชชเช›เซ€ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ (recovery_min_apply_delay). เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚ เชธเชฎเชฏเชฐเซ‡เช–เชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชฎเชพเชŸเซ‡ เชœเซ‹เชถเซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชซเซ‡เชฒเช“เชตเชฐเชจเซ‡ เช•เชพเชฐเชฃเซ‡ (recovery_target_timeline).

ะก recovery_min_apply_delay เชคเชฎเซ‡ เชตเชฟเชฒเช‚เชฌ เชธเชพเชฅเซ‡ เชธเซเชŸเซเชฐเซ€เชฎเชฟเช‚เช— เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเช‚เชคเซ เช…เชนเซ€เช‚ เช•เซ‡เชŸเชฒเซ€เช• เช–เชพเชฎเซ€เช“ เช›เซ‡ เชœเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเซเชฒเซ‹เชŸ, เชนเซ‹เชŸ เชธเซเชŸเซ‡เชจเซเชกเชฌเชพเชฏ เชชเซเชฐเชคเชฟเชธเชพเชฆ เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชตเชงเซ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡. WAL เช†เชฐเซเช•เชพเช‡เชต เชคเชฎเชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชŸเชพเชณเชตเชพ เชฆเซ‡ เช›เซ‡.

เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ recovery_min_apply_delay เชฎเชพเชคเซเชฐ PostgreSQL 9.3 เชฎเชพเช‚ เชฆเซ‡เช–เชพเชฏ เช›เซ‡. เช…เช—เชพเช‰เชจเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชฎเชพเช‚, เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชธเช‚เชฏเซ‹เชœเชจเชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ เชตเซเชฏเชตเชธเซเชฅเชพเชชเชจ เช•เชพเชฐเซเชฏเซ‹ (pg_xlog_replay_pause(), pg_xlog_replay_resume()) เช…เชฅเชตเชพ เชตเชฟเชฒเช‚เชฌเชจเชพ เชธเชฎเชฏเช—เชพเชณเชพ เชฎเชพเชŸเซ‡ เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚ WAL เชธเซ‡เช—เชฎเซ‡เชจเซเชŸเซเชธเชจเซ‡ เชชเช•เชกเซ€ เชฐเชพเช–เซ‹.

PostgreSQL เช† เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเซ‡ เช›เซ‡?

เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชเชธเช•เซเชฏเซเชเชฒ เช†เชณเชธเซ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเชพเช—เซ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชœเซ‹เชตเชพเชจเซเช‚ เชฐเชธเชชเซเชฐเชฆ เช›เซ‡. เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช recoveryApplyDelay(XlogReaderState). เชฅเซ€ เชฌเซ‹เชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชฎเซเช–เซเชฏ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชฒเซ‚เชช WAL เชคเชฐเชซเชฅเซ€ เชฆเชฐเซ‡เช• เชเชจเซเชŸเซเชฐเซ€ เชฎเชพเชŸเซ‡.

static bool
recoveryApplyDelay(XLogReaderState *record)
{
    uint8       xact_info;
    TimestampTz xtime;
    long        secs;
    int         microsecs;

    /* nothing to do if no delay configured */
    if (recovery_min_apply_delay <= 0)
        return false;

    /* no delay is applied on a database not yet consistent */
    if (!reachedConsistency)
        return false;

    /*
     * Is it a COMMIT record?
     *
     * We deliberately choose not to delay aborts since they have no effect on
     * MVCC. We already allow replay of records that don't have a timestamp,
     * so there is already opportunity for issues caused by early conflicts on
     * standbys.
     */
    if (XLogRecGetRmid(record) != RM_XACT_ID)
        return false;

    xact_info = XLogRecGetInfo(record) & XLOG_XACT_OPMASK;

    if (xact_info != XLOG_XACT_COMMIT &&
        xact_info != XLOG_XACT_COMMIT_PREPARED)
        return false;

    if (!getRecordTimestamp(record, &xtime))
        return false;

    recoveryDelayUntilTime =
        TimestampTzPlusMilliseconds(xtime, recovery_min_apply_delay);

    /*
     * Exit without arming the latch if it's already past time to apply this
     * record
     */
    TimestampDifference(GetCurrentTimestamp(), recoveryDelayUntilTime,
                        &secs, &microsecs);
    if (secs <= 0 && microsecs <= 0)
        return false;

    while (true)
    {
        // Shortened:
        // Use WaitLatch until we reached recoveryDelayUntilTime
        // and then
        break;
    }
    return true;
}

เชฌเซ‹เชŸเชฎ เชฒเชพเช‡เชจ เช เช›เซ‡ เช•เซ‡ เชตเชฟเชฒเช‚เชฌ เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ เช•เชฎเชฟเชŸ เชŸเชพเช‡เชฎเชธเซเชŸเซ‡เชฎเซเชชเชฎเชพเช‚ เชจเซ‹เช‚เชงเชพเชฏเซ‡เชฒเชพ เชญเซŒเชคเชฟเช• เชธเชฎเชฏ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡ (xtime). เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชตเชฟเชฒเช‚เชฌ เชซเช•เซเชค เช•เชฎเชฟเชŸเซเชธเชจเซ‡ เชฒเชพเช—เซ เชชเชกเซ‡ เช›เซ‡ เช…เชจเซ‡ เช…เชจเซเชฏ เชเชจเซเชŸเซเชฐเซ€เช“เชจเซ‡ เช…เชธเชฐ เช•เชฐเชคเซเช‚ เชจเชฅเซ€ - เชฌเชงเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชธเซ€เชงเชพ เชœ เชฒเชพเช—เซ เชฅเชพเชฏ เช›เซ‡, เช…เชจเซ‡ เช•เชฎเชฟเชŸเชฎเชพเช‚ เชตเชฟเชฒเช‚เชฌ เชฅเชพเชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เช…เชฎเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เชตเชฟเชฒเช‚เชฌ เชชเช›เซ€ เชœ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชœเซ‹เชˆเชถเซเช‚.

เชกเซ‡เชŸเชพ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซ‹

เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เช เช•เซเชฒเชธเซเชŸเชฐ เช›เซ‡ เช…เชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เช†เช -เช•เชฒเชพเช•เชจเชพ เชตเชฟเชฒเช‚เชฌ เชธเชพเชฅเซ‡เชจเซ€ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช›เซ‡. เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เช‰เชฆเชพเชนเชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเซ‡เชŸเชพ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเซ‹ เช†เช•เชธเซเชฎเชฟเช• เชฐเซ€เชคเซ‡ เชถเซ‹เชฐเซเชŸเช•เชŸ เช•เชพเชขเซ€ เชจเชพเช–เชตเซเช‚.

เชœเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชถเซ‡ เชถเซ€เช–เซเชฏเชพ, เช…เชฎเซ‡ เช†เชฐเซเช•เชพเช‡เชต เชชเซเชจเชƒเชธเซเชฅเชพเชชเชจ เชฅเซ‹เชญเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชฎเชพเชŸเซ‡:

SELECT pg_xlog_replay_pause();

เชตเชฟเชฐเชพเชฎ เชธเชพเชฅเซ‡, เช…เชฎเชจเซ‡ เช•เซ‹เชˆ เชœเซ‹เช–เชฎ เชจ เชนเชคเซเช‚ เช•เซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชตเชฟเชจเช‚เชคเซ€เชจเซเช‚ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเชถเซ‡ DELETE. เชœเซ‹ เชคเชฎเชจเซ‡ เชฌเชงเซเช‚ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฎเชฏเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซ‹ เชเช• เช‰เชชเชฏเซ‹เช—เซ€ เชตเชธเซเชคเซ.

เชฎเซเชฆเซเชฆเซ‹ เช เช›เซ‡ เช•เซ‡ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชตเชฟเชจเช‚เชคเซ€ เชชเชนเซ‡เชฒเชพเช‚เชจเซ€ เช•เซเชทเชฃ เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡ DELETE. เช…เชฎเซ‡ เชฒเช—เชญเช— เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซ‹ เชญเซŒเชคเชฟเช• เชธเชฎเชฏ เชœเชพเชฃเชคเชพ เชนเชคเชพ. เช…เชฎเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เซเชฏเซเช‚ เช›เซ‡ recovery_min_apply_delay เช…เชจเซ‡ เช‰เชฎเซ‡เชฐเซเชฏเซเช‚ recovery_target_time ะฒ recovery.conf. เช† เชฐเซ€เชคเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชตเชฟเชฒเช‚เชฌ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เชฏเซ‹เช—เซเชฏ เช•เซเชทเชฃเซ‡ เชชเชนเซ‹เช‚เชšเซ‡ เช›เซ‡:

recovery_target_time = '2018-10-12 09:25:00+00'

เชŸเชพเช‡เชฎ เชธเซเชŸเซ‡เชฎเซเชชเซเชธ เชธเชพเชฅเซ‡, เชตเชงเซเชจเซ‡ เช“เช›เซเช‚ เช•เชฐเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡ เชœเซ‡เชฅเซ€ เชšเซ‚เช•เซ€ เชจ เชœเชพเชฏ. เชธเชพเชšเซเช‚, เชœเซ‡เชŸเชฒเซ‹ เชฎเซ‹เชŸเซ‹ เช˜เชŸเชพเชกเซ‹, เชคเซ‡เชŸเชฒเซ‹ เชตเชงเซ เชกเซ‡เชŸเชพ เช†เชชเชฃเซ‡ เช—เซเชฎเชพเชตเซ€เช เช›เซ€เช. เชซเชฐเซ€เชฅเซ€, เชœเซ‹ เช…เชฎเซ‡ เชตเชฟเชจเช‚เชคเซ€ เชšเซ‚เช•เซ€ เช—เชฏเชพ DELETE, เชฌเชงเซเช‚ เชซเชฐเซ€เชฅเซ€ เช•เชพเชขเซ€ เชจเชพเช–เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เชซเชฐเซ€เชฅเซ€ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเซเช‚ เชชเชกเชถเซ‡ (เช…เชฅเชตเชพ PITR เชฎเชพเชŸเซ‡ เช•เซ‹เชฒเซเชก เชฌเซ‡เช•เช…เชช เชชเชฃ เชฒเซ‡เชตเซ‹ เชชเชกเชถเซ‡).

เช…เชฎเซ‡ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซ‹เชธเซเชŸเช—เซเชฐเซ‡เชธ เชฆเชพเช–เชฒเชพเชจเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซเชฏเซ‹ เช…เชจเซ‡ WAL เชธเซ‡เช—เชฎเซ‡เชจเซเชŸเซเชธ เชจเชฟเชฐเซเชฆเชฟเชทเซเชŸ เชธเชฎเชฏ เชธเซเชงเซ€ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชฅเชฏเชพ. เชคเชฎเซ‡ เชชเซ‚เช›เซ€เชจเซ‡ เช† เชคเชฌเช•เซเช•เซ‡ เชชเซเชฐเช—เชคเชฟเชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

SELECT
  -- current location in WAL
  pg_last_xlog_replay_location(),
  -- current transaction timestamp (state of the replica)
  pg_last_xact_replay_timestamp(),
  -- current physical time
  now(),
  -- the amount of time still to be applied until recovery_target_time has been reached
  '2018-10-12 09:25:00+00'::timestamptz - pg_last_xact_replay_timestamp() as delay;

เชœเซ‹ เชŸเชพเชˆเชฎเชธเซเชŸเซ‡เชฎเซเชช เชนเชตเซ‡ เชฌเชฆเชฒเชพเชคเซ‹ เชจเชฅเซ€, เชคเซ‹ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ เชชเซ‚เชฐเซเชฃ เชฅเชˆ เช—เชˆ เช›เซ‡. เช•เซเชฐเชฟเชฏเชพ เช•เชธเซเชŸเชฎเชพเช‡เช เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ recovery_target_actionเชชเซเชจเชƒเชชเซเชฐเชฏเชพเชธ เชชเช›เซ€ เชฆเชพเช–เชฒเชพเชจเซ‡ เชฌเช‚เชง เช•เชฐเชตเชพ, เชชเซเชฐเชฎเซ‹เชŸ เช•เชฐเชตเชพ เช…เชฅเชตเชพ เชฅเซ‹เชญเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ (เชคเซ‡ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฐเซ‚เชชเซ‡ เชธเชธเซเชชเซ‡เชจเซเชก เช›เซ‡).

เชคเซ‡ เช•เชฎเชจเชธเซ€เชฌ เชตเชฟเชจเช‚เชคเซ€ เชชเชนเซ‡เชฒเชพเช‚ เชกเซ‡เชŸเชพเชฌเซ‡เช เชคเซ‡เชจเซ€ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชชเชพเช›เซ‹ เชซเชฐเซเชฏเซ‹. เชนเชตเซ‡ เชคเชฎเซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชกเซ‡เชŸเชพ เชจเชฟเช•เชพเชธ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช…เชฎเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เซ‡เชฒ เชฒเซ‡เชฌเชฒ เชกเซ‡เชŸเชพ เช…เชจเซ‡ เชธเชฎเชธเซเชฏเชพเช“ เช…เชจเซ‡ เชฎเชฐเซเชœ เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ€ เชฌเชงเซ€ เชฒเชฟเช‚เช•เซเชธ เชจเชฟเช•เชพเชธ เช•เชฐเซ€ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เช‰เชคเซเชชเชพเชฆเชจ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เช–เชธเซ‡เชกเซเชฏเชพ. เชœเซ‹ เชจเซเช•เชธเชพเชจ เชฎเซ‹เชŸเชพ เชชเชพเชฏเซ‡ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เชซเช•เซเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‡ เชชเซเชฐเซ‹เชคเซเชธเชพเชนเชจ เช†เชชเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เชฎเซเช–เซเชฏ เชคเชฐเซ€เช•เซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชชเชฐเช‚เชคเซ เชคเซ‡ เชชเช›เซ€ เชœเซ‡ เชฌเชฟเช‚เชฆเซ เชธเซเชงเซ€ เช†เชชเชฃเซ‡ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เชฅเชฏเชพ เช›เซ€เช เชคเซ‡ เชชเช›เซ€เชจเชพ เชฌเชงเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช–เซ‹เชตเชพเชˆ เชœเชถเซ‡.

เชŸเชพเช‡เชฎเชธเซเชŸเซ‡เชฎเซเชชเชจเซ‡ เชฌเชฆเชฒเซ‡, เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ ID เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡. เช† ID เชจเซ‡ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเซเช‚ เช‰เชชเชฏเซ‹เช—เซ€ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, DDL เชธเซเชŸเซ‡เชŸเชฎเซ‡เชจเซเชŸเซเชธ เชฎเชพเชŸเซ‡ (เชœเซ‡เชฎ เช•เซ‡ DROP TABLE), เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ log_statements = 'ddl'. เชœเซ‹ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจ เช†เชˆเชกเซ€ เชนเชถเซ‡ เชคเซ‹ เช…เชฎเซ‡ เชฒเชˆเชถเซเช‚ recovery_target_xid เช…เชจเซ‡ เชตเชฟเชจเช‚เชคเชฟ เชชเชนเซ‡เชฒเชพ เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เชฌเชงเซเช‚ เชœ เชšเชฒเชพเชตเซเชฏเซเช‚ DELETE.

เช•เชพเชฎ เชชเชฐ เชชเชพเช›เชพ เช†เชตเชตเซเช‚ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡: เชฎเชพเช‚เชฅเซ€ เชฌเชงเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชฆเซ‚เชฐ เช•เชฐเซ‹ recovery.conf เช…เชจเซ‡ Postgres เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹. เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชฎเชพเช‚ เชŸเซ‚เช‚เช• เชธเชฎเชฏเชฎเชพเช‚ เชซเชฐเซ€เชฅเซ€ เช†เช  เช•เชฒเชพเช•เชจเซ‹ เชตเชฟเชฒเช‚เชฌ เชฅเชถเซ‡, เช…เชจเซ‡ เช…เชฎเซ‡ เชญเชตเชฟเชทเซเชฏเชจเซ€ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เช›เซ€เช.

เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชคเชฟ เชฒเชพเชญเซ‹

เช•เซ‹เชฒเซเชก เชฌเซ‡เช•เช…เชชเชจเซ‡ เชฌเชฆเชฒเซ‡ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเชพเชฅเซ‡, เชคเชฎเชพเชฐเซ‡ เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เช›เชฌเซ€เชจเซ‡ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช•เชฒเชพเช•เซ‹ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชธเช‚เชชเซ‚เชฐเซเชฃ เชฎเซ‚เชณเชญเซ‚เชค 2 TB เชฌเซ‡เช•เช…เชช เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชชเชพเช‚เชš เช•เชฒเชพเช• เชฒเชพเช—เซ‡ เช›เซ‡. เช…เชจเซ‡ เชชเช›เซ€ เชคเชฎเชพเชฐเซ‡ เชนเชœเซ€ เชชเชฃ เช‡เชšเซเช›เชฟเชค เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฎเช—เซเชฐ เชฆเซˆเชจเชฟเช• WAL เชฒเชพเช—เซ เช•เชฐเชตเซเช‚ เชชเชกเชถเซ‡ (เชธเซŒเชฅเซ€ เช–เชฐเชพเชฌ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚).

เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชฌเซ‡ เชฐเซ€เชคเซ‡ เช•เซ‹เชฒเซเชก เชฌเซ‡เช•เช…เชช เช•เชฐเชคเชพเช‚ เชตเชงเซ เชธเชพเชฐเซ€ เช›เซ‡:

  1. เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฎเซ‚เชณเชญเซ‚เชค เชฌเซ‡เช•เช…เชช เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.
  2. WAL เชธเซ‡เช—เชฎเซ‡เชจเซเชŸเชจเซ€ เช†เช -เช•เชฒเชพเช•เชจเซ€ เชจเชฟเชถเซเชšเชฟเชค เชตเชฟเชจเซเชกเซ‹ เช›เซ‡ เชœเซ‡เชจเซเช‚ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡.

เช…เชฎเซ‡ WAL เชฎเชพเช‚เชฅเซ€ PITR เชฌเชจเชพเชตเชตเซเช‚ เชถเช•เซเชฏ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เชชเชฃ เชธเชคเชค เชคเชชเชพเชธ เช•เชฐเซ€เช เช›เซ€เช, เช…เชจเซ‡ เช…เชฎเซ‡ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเชพ เชฒเซ‡เช—เชจเซ‡ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเซ€เชจเซ‡ WAL เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚ เชญเซเชฐเชทเซเชŸเชพเชšเชพเชฐ เช…เชฅเชตเชพ เช…เชจเซเชฏ เชธเชฎเชธเซเชฏเชพเช“เชจเซ‡ เชเชกเชชเชฅเซ€ เชœเซ‹เชถเซเช‚.

เช† เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช…เชฎเชจเซ‡ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ 50 เชฎเชฟเชจเชฟเชŸเชจเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹, เชเชŸเชฒเซ‡ เช•เซ‡ เชเชกเชช เชชเซเชฐเชคเชฟ เช•เชฒเชพเช• 110 GB WAL เชกเซ‡เชŸเชพ เชนเชคเซ€ (เช†เชฐเซเช•เชพเช‡เชต เชนเชœเซ€ เชšเชพเชฒเซ เชนเชคเซเช‚ AWS S3). เช•เซเชฒ เชฎเชณเซ€เชจเซ‡, เช…เชฎเซ‡ เชธเชฎเชธเซเชฏเชพ เชนเชฒ เช•เชฐเซ€ เช…เชจเซ‡ 1,5 เช•เชฒเชพเช•เชฎเชพเช‚ เชกเซ‡เชŸเชพ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเซเชฏเซ‹.

เชชเชฐเชฟเชฃเชพเชฎเซ‹: เชœเซเชฏเชพเช‚ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช‰เชชเชฏเซ‹เช—เซ€ เช›เซ‡ (เช…เชจเซ‡ เชœเซเชฏเชพเช‚ เชคเซ‡ เชจเชฅเซ€)

เชœเซ‹ เชคเชฎเซ‡ เช†เช•เชธเซเชฎเชฟเช• เชฐเซ€เชคเซ‡ เชกเซ‡เชŸเชพ เช—เซเชฎเชพเชตเซเชฏเซ‹ เชนเซ‹เชฏ เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เชตเชฟเชฒเช‚เชฌเชฎเชพเช‚ เช† เชธเชฎเชธเซเชฏเชพ เชจเซ‹เช‚เชงเชพเชˆ เชนเซ‹เชฏ เชคเซ‹ เชชเซเชฐเชฅเชฎ เชธเชนเชพเชฏ เชคเชฐเซ€เช•เซ‡ เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹.

เชชเชฐเช‚เชคเซ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฐเชพเช–เซ‹: เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช เชฌเซ‡เช•เช…เชช เชจเชฅเซ€.

เชฌเซ‡เช•เช…เชช เช…เชจเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเชพ เชœเซเชฆเชพ เชœเซเชฆเชพ เชนเซ‡เชคเซเช“ เช›เซ‡. เชœเซ‹ เชคเชฎเซ‡ เช†เช•เชธเซเชฎเชฟเช• เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเซเชฏเซเช‚ เชนเซ‹เชฏ เชคเซ‹ เช•เซ‹เชฒเซเชก เชฌเซ‡เช•เช…เชช เชนเชพเชฅเชฎเชพเช‚ เช†เชตเชถเซ‡ DELETE เช…เชฅเชตเชพ DROP TABLE. เช…เชฎเซ‡ เช•เซ‹เชฒเซเชก เชธเซเชŸเซ‹เชฐเซ‡เชœเชฎเชพเช‚เชฅเซ€ เชฌเซ‡เช•เช…เชช เชฌเชจเชพเชตเซ€เช เช›เซ€เช เช…เชจเซ‡ เชŸเซ‡เชฌเชฒเชจเซ€ เช…เช—เชพเช‰เชจเซ€ เชธเซเชฅเชฟเชคเชฟ เช…เชฅเชตเชพ เชธเชฎเช—เซเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เชชเซเชจเชƒเชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซ€เช เช›เซ€เช. เชชเชฐเช‚เชคเซ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡ เชตเชฟเชจเช‚เชคเซ€ DROP TABLE เชตเชฐเซเช•เชฟเช‚เช— เช•เซเชฒเชธเซเชŸเชฐ เชชเชฐเชจเซ€ เชคเชฎเชพเชฎ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเช“เชฎเชพเช‚ เชฒเช—เชญเช— เชคเชฐเชค เชœ เชชเซเชจเชƒเช‰เชคเซเชชเชพเชฆเชฟเชค เชฅเชพเชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เช…เชนเซ€เช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚. เชœเซเชฏเชพเชฐเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชธเชฐเซเชตเชฐเซ‹ เชญเชพเชกเซ‡ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฒเซ‹เชกเชจเซเช‚ เชตเชฟเชคเชฐเชฃ เช•เชฐเซ‡ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชชเซ‹เชคเซ‡ เชœ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เช‰เชชเชฒเชฌเซเชง เชฐเชพเช–เซ‡ เช›เซ‡.

เชตเชฟเชฒเช‚เชฌเชฟเชค เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟ เชธเชพเชฅเซ‡ เชชเชฃ, เชœเซ‹ เชกเซ‡เชŸเชพ เชธเซ‡เชจเซเชŸเชฐเชจเซ€ เชจเชฟเชทเซเชซเชณเชคเชพ, เช›เซเชชเชพเชฏเซ‡เชฒ เชจเซเช•เชธเชพเชจ เช…เชฅเชตเชพ เช…เชจเซเชฏ เช˜เชŸเชจเชพเช“ เช•เซ‡ เชœเซ‡ เชคเชพเชคเซเช•เชพเชฒเชฟเช• เชงเซเชฏเชพเชจเชชเชพเชคเซเชฐ เชจ เชนเซ‹เชฏ เชคเซ‹ เช…เชฎเชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชธเชฒเชพเชฎเชค เชธเซเชฅเชณเซ‡ เช เช‚เชกเชพ เชฌเซ‡เช•เช…เชชเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡. เชเช•เชฒเชพ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชจเซ‹ เช…เชนเซ€เช‚ เช•เซ‹เชˆ เช‰เชชเชฏเซ‹เช— เชจเชฅเซ€.

เชจเซ‹เช‚เชงเชฃเซ€... เชชเชฐ GitLab.com เช…เชฎเซ‡ เชนเชพเชฒเชฎเชพเช‚ เชซเช•เซเชค เชธเชฟเชธเซเชŸเชฎ เชธเซเชคเชฐเซ‡ เชกเซ‡เชŸเชพเชจเชพ เชจเซเช•เชถเชพเชจ เชธเชพเชฎเซ‡ เชฐเช•เซเชทเชฃ เช†เชชเซ€เช เช›เซ€เช เช…เชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชธเซเชคเชฐ เชชเชฐ เชกเซ‡เชŸเชพ เชชเซเชจเชƒเชชเซเชฐเชพเชชเซเชค เช•เชฐเชคเชพ เชจเชฅเซ€.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹