50


13

多くの改訂後のSVNパフォーマンス

私のプロジェクトは現在svnリポジトリを使用しています。これは1日に数百の新しいリビジョンを獲得します。 リポジトリはWin2k3サーバー上にあり、Apache / mod_dav_svnを通じて提供されます。

改訂が多すぎると、時間がたつにつれてパフォーマンスが低下することを私は今恐れています。 これは合理的ですか? 1.5にアップグレードすることをすでに計画しているので、1つのディレクトリに何千ものファイルがあることは長期的には問題になりません。

_ Subversion onは、2つのリビジョン間の差分(差分)を保存するため、特にコード(テキスト)のみをコミットし、バイナリ(イメージとドキュメント)をコミットしない場合、スペースを大幅に節約できます。 _

それは、ファイルfoo.bazのリビジョン10をチェックアウトするために、svnはリビジョン1を取ってからデルタ2-10を適用することを意味しますか?

9 Answer


60


どんな種類のレポがありますか。 FSFSかBDBか

(今のところFSFSを想定しましょう。これがデフォルトです。)

FSFSの場合、各リビジョンは以前のリビジョンに対する差分として格納されます。 それで、あなたはそう、多くの修正の後にはい、それは非常に遅いだろうと思うでしょう。

しかし、そうではありません。 FSFSは「スキップデルタ」と呼ばれるものを使用して、前のrevであまりにも多くの検索をしなくても済むようにします。

(だから、FSFSリポジトリを使っているのなら、Brad Wilsonの答えは間違っている。)

BDBレポジトリの場合、HEAD(最新)リビジョンは全文ですが、それ以前のリビジョンは頭に対する一連の差分として作成されています。 これは、コミット毎に前回の回転数を再計算する必要があることを意味します。

詳細については:http://svn.apache.org/repos/asf/subversion/trunk/notes/skip-deltas

P.S 私達のレポは約35GBの改訂で約20GBです、そして我々は少しの性能低下にも気付いていません。


16


Subversionは最新のバージョンを全文として、後ろ向きの差分を付けて保存します。 これは、headの更新は常に高速であることを意味します。そして、あなたが徐々に代償を払っているのは、歴史の中でさらに遠くまで見ているということです。


5


実際のプロジェクトでは、80K LOCを超えるコードベースを持つSubversionリポジトリを個人的に扱ったことはありません。 私が実際に持っていた最大のリポジトリは約1.2ギグでしたが、これにはプロジェクトが使用するすべてのライブラリとユーティリティが含まれていました。

日々の使用がそれほど影響を受けることはないと思いますが、さまざまなリビジョンを調べる必要がある場合は少し時間がかかるかもしれません。 それほど目立たないかもしれません。

これで、システム管理者の観点からは、パフォーマンスのボトルネックを最小限に抑えるのに役立つことがいくつかあります。 Subversionはほとんどファイルベースのシステムなので、これを行うことができます。

  • 実際のリポジトリを別のドライブに入れる

  • svn以外のファイルロックアプリケーションが上記のドライブで動作していないことを確認してください。

  • ドライブを少なくとも7,500 RPMにします。 あなたは10,000 RPMを取得しようとすることができますが、やり過ぎるかもしれません

  • 全員が同じオフィスにいる場合は、LANをギガビットに更新します。

これはあなたの状況ではやり過ぎるかもしれませんが、それは私が他のファイル集約型アプリケーションのために通常したことです。

Subversionを「成長」させたことがある場合は、 Perforceをクリックしてください。 それは非常に大規模なプロジェクトのための最速のソース管理アプリを渡します。


4


私たちはギガバイト相当のコードとバイナリを持つsubversionサーバーを動かしています、そしてそれは2万以上のリビジョンまでです。 まだ減速はありません。


3


Subversionは2つのリビジョン間の差分(相違点)のみを保存するので、特にコード(テキスト)のみをコミットし、バイナリ(画像やドキュメント)をコミットしない場合は、スペースの節約に役立ちます。

さらに、私はsvnを使った非常に大きなプロジェクトをたくさん見たことがあり、パフォーマンスについては文句を言わなかった。

多分あなたはチェックアウト時間について心配していますか? それから私はこれが本当にネットワーキングの問題になると思います。

ああ、私は2GBのもの(コード、imgs、docs)を使ってCVSリポジトリに取り組んできましたが、パフォーマンスの問題はありませんでした。 svnはcvsを大きく改善したものなので、私はあなたが心配すべきだとは思わない。

少しでも心が楽になることを願っています;)


3


私達の転覆が加齢によって減速したとは思わない。 私たちは現在、数テラバイトのデータ、主にバイナリを持っています。 毎日50ギガバイトまでのデータをチェックアウト/コミットします。 合計で、現在50000のリビジョンがあります。 私たちはストレージタイプとしてFSFSを使用しており、直接SVN:(Windows server)またはApache mod_dav_svn(Gentoo Linux Server)を介してインターフェースしています。

パフォーマンス比較のためにクリーンなサーバーをセットアップして比較できるため、これが時間の経過とともに遅くなることを確認できません。 重大な低下を測定することはできませんでした。

しかしながら、私たちの破壊はデフォルトではめったに遅くないことを言わなければなりません、そして明らかにそれは私たちが別のコンピュータシステムで試みたように破壊そのものです。

いくつかの未知の理由でsubversionは完全にサーバーCPUの制限のようです。 1つのサーバーCPUコアが完全に使い果たされているため、私たちのチェックアウト/コミットレートは1クライアントあたり15-30メガバイト/秒に制限されています。 これは、ほぼ空のリポジトリ(1ギガバイト、5リビジョン)についても、フルサーバー(〜5テラバイト、50000リビジョン)と同じです。 圧縮を0 =オフに設定するような調整はこれを改善しませんでした。

当社のハイバンドウィズ(〜1ギガバイト/秒)FC-Arrayアイドル、他のコアのアイドルおよびネットワーク(現在クライアント用に1ギガビット/秒、サーバー用に10ギガビット/秒)アイドルも同様です。 さて、本当にアイドリングではありませんが、使用可能容量の2〜3%しか使用されていない場合は、アイドリングと呼びます。

すべてのコンポーネントがアイドル状態になっているのを見るのは本当に楽しいことではありません。作業コピーがチェックアウトまたはコミットされるのを待つ必要があります。 基本的に、チェックアウト/コミット中は常に1つのCPUコアを完全に消費してサーバープロセスが何をしているのかわかりません。

しかし、私はただ転覆を調整する方法を見つけようとしています。 それが不可能な場合は、他のシステムに切り替える必要があるかもしれません。

したがって、答えはありません。SVNを使用してもパフォーマンスが低下することはありません。最初は低速です。

もちろん、(高性能の)パフォーマンスが必要ないのであれば、問題はありません。 ところで。 上記のすべてはsubversioon 1.7最新安定版に適用されます


2


遅くなる可能性がある唯一の操作は、複数のリビジョンから情報を読み取るものです。 SVN非難)。


-1


私はわかりません…​.. 私はCentos 5.2のapacheでSVNを使っています。 大丈夫です。 改訂番号は8230そのようなものでした…​ そして、すべてのクライアントマシンでコミットは非常に遅く、1kbのファイルを少なくとも2分待つ必要がありました。 私は大きなファイルサイズがない1ファイルについて話しています。

それから私は新しいリポジトリを作りました。 revから始まった。 1。 今正常に動作します。 速いです。 svnadmin create xxxxxxを使用しました。 それがFSFSかBDBかをチェックしませんでした…​..


-2


たぶんあなたはあなたのワークフローを改善することを考慮すべきです。

*これらの条件でリポジトリにパフォーマンスの問題があるかどうかはわかりませんが、正しいリビジョンに戻ることはできます。

あなたのケースでは、検証プロセスを含めることができます。そのため、チームリーダーはチームリーダーレポにコミットし、それぞれが読み取り専用のクリーン企業レポにコミットするチームマネージャーレポにコミットします。 どの段階でコミットするのかという段階で、あなたはそれを明確に選択しました。

このようにして、誰でも閲覧しやすい履歴とともに、きれいなコピーに戻ることができます。 マージははるかに簡単です、そしてdevは彼らが望むように彼らの混乱をまだコミットすることができます。