2

ライブ サーバーで実行svn updateすると、完了までに 15 分以上かかることがあります。

  1. 私たちのリポジトリは非常に小さく、約 1Mb でファイル数は 100 以下です (小さな Web サイトです)。
  2. コミット/更新の両方を行う開発者が数人いますが、これは非常にうまく機能しています
  3. サーバー上のすべての変更を更新します (これは のみを行いますsvn update)、これは非常に遅く実行されています
  4. サーバーからのアクセスは一度もありませんsvn commit(サイトの読み取り専用バージョンであるはずです)。

svn update時間が経つにつれて、更新が必要なファイルが 1 つだけであっても、サーバー上での処理がますます遅くなるようです。サーバー上のリポジトリの「年齢」は、リポジトリの遅さに関係していると思い始めていますか? もしそうなら、それをスピードアップするために私たちができることはありますか?

更新 #1

私はまだ「年齢」がsvn update遅いことに関係していると思いますが、サーバー上でリポジトリが「古く」なったときに実際に何が起こっているのかを考慮する必要があるかもしれません...

私がそう思う理由は次のとおりです。

  1. 2010 年 1 月以降、WebsiteA のリポジトリをチェックアウトし ( を使用svn checkout)、定期的に更新しています ( を使用)。svn update
  2. また、同じ方法で WebsiteZ の同じリポジトリをチェックアウトしましたが、これはほんの数日前、つまり 2012 年 7 月に発生しました。
  3. WebsiteA と WebsiteZ の両方が同じ物理サーバー上にあり、どちらも同じリポジトリを使用しています
  4. svn updateリビジョン 100 から 101 に更新するために Web サイト A で実行すると、20 分以上かかります
  5. WebsiteZ で実行svn updateしてリビジョン 100 から 101 に更新するには、わずか数秒しかかかりません

私が見ることができるこれらの Web サイトの唯一の違いは、WebsiteA がもう少し長く存在していたことです。Web サイト A にはいくつかの余分なファイル (キャッシュされたコンテンツ) がある場合がありますが、これはごくわずか (20 ファイル未満) であり、キャッシュ ファイルを含むディレクトリは svn:ignore を使用してすべてのファイルを無視するように設定されています。

ネットワークの問題を除外することはできなかったと思いますが、WebsiteA と WebsiteZ は同じファイアウォール設定を実行し、ルールがあれば「遅延」ではなく「ブロック」になると思います。両方の Web サイトが同じサーバー上にあるため、ネットワークの問題に関しては、両方とも同じ時間で更新する必要があると思います。

更新 #2

svn update file.txtこれを行うと、非常に高速に実行されることに注意してください。あたかも svn がディレクトリ内のすべてを比較して、何を更新するかを判断しているようです。

更新 #3

最終的にsvnをアップグレードし、チェックアウトしたすべてのリビジョンをアップグレードしました。svn update今ではずっと速く走っているようで、指を交差させてもそのままです。助けてくれてありがとう!

更新 #4

確かに、新しいチェックアウトを行うと問題は解決しましたが、数日/数週間だけでした. ついに今日、svn が遅い原因を発見したと思います。Zend_Auth を使用し、すべてのページで Zend_Auth::hasIdentity() を呼び出して、ユーザーがログインしているかどうかを確認します。この呼び出しによってセッションが作成され、サーバー上にセッション ファイルが作成されます。ブラウザ (または googlebot) が Cookie をオフにしてブラウジングしている場合、リクエストごとに 1 つのセッション ファイルが作成されます。したがって、セッション ディレクトリには何百万ものファイルがありました。ディレクトリ内のファイルを削除し、hasIdentity() を呼び出す前に Cookie が設定されているかどうかを確認して、ユーザーがログインしているかどうかを判断する方法を修正しました。svn更新は 30 秒未満で実行されるようになりました。

4

2 に答える 2

1

マニュアルで説明されているように、svnadmin dumpandを使用して (バックアップした後に) Subversion リポジトリを再構築することをお勧めします。古いバージョンからのアップグレード時に、リポジトリに何らかの異常が発生している可能性があります。これは古いリポジトリだとおっしゃっていますが、これはこのケースに該当する可能性があります。ダンプ -> ロード サイクルを行うということは、Subversion が現在の形式でより最適なリポジトリを作成する可能性があることを意味します。svnadmin load

于 2012-07-13T09:57:04.667 に答える
0

SVN は、ソース ファイルと同量のメタ データ (.svn ディレクトリ) をローカル ディスクに書き込みます。ネットワークに問題がない場合は、ディスクのパフォーマンスを確認することもできます。SAN ディスクが低速で (ネットワーク遅延、ローカル データとリモート データ間のエラー チェックなど)、SVN 遅延を引き起こしている状況に遭遇しました。通常、その場合は、ローカル ディスクの方がうまく機能するはずです。次のことを試すことができます。

  • 可能であればsvn export、リポジトリと svn デーモンが実行されているのと同じサーバーに対して実行します。そこでより高速に実行される場合、それはネットワークまたはディスクのいずれかです。
  • svn export他のクライアント/開発マシンでより高速に動作する場合は、ディスクにする必要があります。

リポジトリの年齢がパフォーマンスと関係があるかどうかは疑問です。

お役に立てれば。

于 2012-07-11T16:09:21.480 に答える