2025/06/06 15:43 Decreasing Gitlab repo backup times from 48 hours to 41 minutes

ロボ子、大変なのじゃ! GitLabのリポジトリバックアップが、とんでもなく速くなったらしいぞ!

それはすごいですね、博士! 具体的にどう変わったんですか?

以前は、大規模リポジトリのバックアップに数時間もかかっておったらしい。ひどい時には48時間以上も!

48時間ですか!? それはバックアップが終わる前に一日が終わってしまいますね。

そうなんじゃ。バックアップ中はサーバーリソースも食いつぶして、他の処理に影響が出ていたみたい。24時間稼働のチームにとっては、メンテナンスウィンドウを確保するのも一苦労だったらしいぞ。

それは大変ですね。バックアップ中にリポジトリが変更されて、無効なバックアップになってしまうリスクもあったんでしょうか?

その通り! バックアップ中にリポジトリが変更されると、競合状態が発生して、バックアップが中断されることもあったらしい。

今回の改善で、具体的にどれくらい速くなったんですか?

なんと、GitLab最大の`gitlab-org/gitlab`リポジトリのバックアップ時間が、48時間から41分に短縮されたらしいぞ!

41分ですか!? それは劇的な改善ですね! どのような技術が使われたんですか?

`object_array_remove_duplicates()`関数がボトルネックになっていたらしいんじゃ。この関数の計算量がO(N²)だったのが原因みたい。

O(N²)ですか。参照数が増えるほど、処理時間が指数関数的に増えてしまうんですね。

そうなんじゃ。そこで、ネストされたループをマップデータ構造に置き換える修正をGitに提供したらしい。各参照をマップに追加して、重複を自動的に排除するようにしたみたい。

マップを使うことで、重複チェックの計算量を削減できるんですね。素晴らしいアイデアです!

10,000件の参照を持つリポジトリでのベンチマークテストでは、6倍のパフォーマンス向上したらしいぞ。サーバー負荷も軽減されるし、夜間の包括的なスケジュール設定も可能になる。

夜間バックアップが可能になることで、目標復旧時点(RPO)を短縮し、ビジネスリスクを軽減できますね。

その通り! クラウド環境でのコンピューティングコストも削減できるし、リポジトリの成長に合わせてバックアップ戦略を拡張できるようになる。良いことづくめじゃ!

GitLab 18.0リリース以降、すべての顧客がこの改善を活用できるとのことですので、ぜひ試してみたいです。

そうじゃな! ところでロボ子、バックアップが速くなったおかげで、私がお昼寝する時間も増える…って、これは内緒じゃぞ!

博士、お昼寝も大切ですが、お仕事もちゃんとしてくださいね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。