2011-07-07 15 views
8

私のMercurialクローンは、恐らくディスク上の断片化のために非常に遅くなっています。それを最適化する方法はありますか?Mercurialクローンを最適化することはできますか?

新しいクローンを作成し、MQ、保存したバンドル、hgrcなどを新しいクローンにコピーして古いものを削除するのは明らかです。しかし、誰かが前にこの問題に遭遇した可能性があり、それを行う拡張を行ったようですね?

+0

私がMercurialについて知っていることから、Mercurialは断片化などに関しては遅くする必要がありません。ディスク上に通常のディスクデフラグを実行しようとしましたか?また、どんな種類の操作が遅く、どれくらい遅いのですか? –

+0

hg qrefは本当に遅いものです。 70000ishのコミットでレポに50秒かかります。私はそれが水銀の特定の問題ではないことに同意する(水銀のアクセスパターンはそれを悪化させると思うが)Macは組み込みのデフラグツール(AFAICT)を持っていない。 –

答えて

0

私はレポを削除し、再クローン化され、そのパフォーマンスが向上しました。

+0

これは、すべての履歴を失うことを意味します。これはめったに有利な解決策ではない。 – Abel

+0

アベル:なぜあなたはすべての歴史を失うだろうか? –

+0

ああ、申し訳ありませんが、誤解されました。あなたが削除したものをどのように再クローンすることができるかまだ分かりません。または、サーバーの状態をそのままにして、新しいクローンを作成することを意味しますか?つまり、ローカルクローンのみを削除するという意味ですか?それはパージと同じではありませんか? – Abel

-2

レポが複製され、デフラグするフォルダのリアルタイムアンチウイルス監視をオフにします。あなたができることはあまりありません。

7

マニフェストが特に大きくなると、パフォーマンスが低下する可能性があります。 Mercurialには代替リポジトリ形式 - generaldelta - があり、多くの場合、マニフェストがはるかに小さくなります。

あなたは使用して、マニフェストの大きさを確認することができます。

ls -lh .hg/store/*manifest*

がgeneraldeltaから最大値を取得するには:

  1. はMercurialが2.7.2以降(2.7.2が含まれてインストールしますgeneraldeltaのバグを修正してマニフェストのサイズを大きくすることは可能ですが、以前のバージョンではバグを犯さないチャンスがあります。

  2. hg --config format.generaldelta=1 clone --pull orig orig.gdを実行します。

これにより、マニフェストのサイズはいくらか改善されますが、完全なメリットはありません。

  1. hg --config format.generaldelta=1 clone --pull orig.gd orig.gd.gdを実行します。

クローンのクローンは、マニフェストサイズにおいてはるかに大きな改善を与えることができる。これは、generaldeltaリポジトリから引き出すときに、マニフェストサイズを最適化するために再整理されるためです。

私は最近、〜55000 SVNコミット(hgsubversionを使用して引っ張られたもの)プラス約1000のMercurialコミット/マージ/グラフトなどのレポを変換しました。元のレポのマニフェストは〜 1.4GB。最初のクローンのマニフェストは〜600MBでした。クローンのクローンのマニフェストは〜30MBでした。

generaldeltaオンラインに関する多くの情報はありません。デフォルトのフォーマットになる前にまだ作業が完了していますが、多くのプロジェクトでうまくいきます。最初のいくつかのGoogle検索結果には、最初に導入されたときの情報があり、最近、mercurial-devメーリングリストに関する議論がありました。

+0

+1〜3400コミットの小さなリポジトリと〜17MBのオリジナルマニフェストサイズよりもはるかに小さいため、2つのクローンはhg操作を元の時間の1/3に短縮しました(最終マニフェストは11MBでした)。 –

関連する問題