6

これはすべて、リポジトリのサイズが 1 日あたり 1 GB ずつ増加していることに気付いたときに始まりました。簡単なテストをしました。サイズが 35KB の既存のフォルダーのブランチ/タグを作成しました。リビジョン番号をメモして、リビジョン$REPO/db/revs/<K-rev>/rev-number/のサイズを確認しました。1メガバイトでした。それは怪しいですね。ここで何が間違っているのかについてのアイデア。私のリポジトリのサイズは約 350GB で、リビジョンは約 600,000 です。

PS私はすでにリポジトリ全体の再構築を開始して、それが違いを生むかどうかを確認していますが、完了するまでにおそらく数日かかるでしょう.

4

2 に答える 2

7

同じ質問をusers@subversion.sapache.orgに投稿し、BSmith-Mannschottからこの回答を得ました。これですべてが説明されます。パスには、コミットごとに16000個のフォルダーを含むディレクトリがあります。詳細な回答をありがとうBスミス-マンショット。他の人の利益のためにここに返信を投稿してください。


リポジトリには、非常に多くのエントリを含むディレクトリが含まれていますか?そのようなディレクトリ内またはその下で行われる大規模なコミットを生成する変更はありますか?

リポジトリへの単一のファイルへの単一の変更をコミットすると仮定しましょう。さらに、ファイルがリポジトリ内のここにあると仮定しましょう。

/project/trunk/some-really-large-directory/notes/blah.txt

blah.txtへの変更をコミットすると、新しいリビジョンは、「blah.txt」とリポジトリのルートの間のディレクトリノードを書き換えます:/ project / trunk / some-really-large-directory / notes、/ project / trunk / some-really-large-directory、/ project / trunk、/ project、/。ディレクトリノードを書き換える場合、FSFSは常に新しいバージョン全体を保存します。(これは、ファイルへの変更が保存される方法とは異なります。これは、通常、同じファイルの以前のバージョンとの違いです。)

/ project / trunk / some-really-large-directory /に10000個のファイルが含まれている場合、blah.txtにコミットするたびに、このディレクトリの完全なコピー(10,000個の名前)がリポジトリに保存されます。

数年前に個人用ウィキをバージョン管理下に置き始めたとき、これに気づきました。これは、10,000を超えるテキストファイルのフラットディレクトリでした。コミットがかなり大きいことにすぐに気づきました。(それ以来、このタスクやその他の理由でgitに切り替えました。)

http://svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html#server.fs.struct.bubble-upも参照して ください。

于 2010-10-13T14:51:18.767 に答える
0

非常に簡単な解決策があります。リポジトリに大量の履歴タグが含まれていると仮定すると、それらを移動して/tags-archiveこのディレクトリを読み取り専用にすることができます。その下に新しいタグを作成すると/tags、問題は発生しなくなります。

URL to URL move を使用する必要があることに注意してください。例えば

svn move https://svn.example.com/MyRepo/tags https://svn.example.com/MyRepo/tags-archive -m "Your Log Message"

このソリューションは、1 つのディレクトリに約 350,000 個のタグを含むリポジトリの問題を解決するのに役立ちました。

于 2018-11-16T13:55:08.923 に答える