« 分散バージョン管理ツールにおけるブランチ戦略 | トップページ | 論文作成の技法part1~論文の構造 »

2012/11/23

RedmineでSubversion リポジトリ表示を高速化する方法

RedmineでSubversion リポジトリ表示を高速化する方法について、丸山さんが回答されていたのでメモ。

【元ネタ】
Subversion リポジトリ表示に時間がかかる - Google グループ

小技(0.9): コミットと同時にリポジトリの情報を取得する | Redmine.JP Blog

バージョン管理システムとの連携 | Redmine.JP

メーリングリストで以下の問題を提起されている。

(引用開始)
実プロジェクトで問題が起きたので、相談させてください。

・環境
 Redmine 1.3.3 / Ruby 1.8.7

・設定
 管理→設定画面のリポジトリタグで「コミットを自動取得する」はOffになっています

・症状
 Subversionのリポジトリを表示させると、時間がかかる
 →270程度のリビジョンを含むリポジトリで、およそ6秒かかる(100 ms程度の誤差で再現性あり、何度開いても状況変わらない)
 →この6秒の間, topコマンドで監視するとsvnコマンドがCPU1コア分を持って行っている

 現在、SubversionのサーバとRedmineのサーバは物理的に別マシン

・なんとかしたい
 Subversionのリポジトリ表示に時間がかからないようにしたい

svnコマンドが動いていることから、「設定」にあるコミットの自動取得Offの設定がうまくいっていないのでは?と思います。
次に調査できそうな場所など、ご教示いただければ幸いです。
(引用終了)

この現象は、既存のSVNリポジトリが例えば1万リビジョン以上もあり新規プロジェクトに登録すると、タイムアウトエラーになってしまう場合でも現れる。
原因と対策は、丸山さんが説明してくれている。

(引用開始)
リポジトリツリーの表示に"svn ls"を、リビジョン一覧の表示に"svn log"を叩いています。
つまり、1つの画面の表示にsvnコマンドを2回叩いています。
おそらくSubversionのパスが"svn://"か"http://"に指定されていると思います。
"file://"に変えるとかなり早くなると思います。
(引用終了)

原因は、Web経由でSVNリビジョン情報をごっそり取得しようとするので、HTTPレスポンスが所定時間内にリターンせず、タイムアウトになるから。
対策としては、Redmineと同じサーバー上にSVNリポジトリを同期しておき、そこから接続するようにする。

SVNならsvnsyncで別サーバーにあるSVNリポジトリとリアルタイムで同期するようにすればいい。
GitやMercurialなら、別サーバーのmasterブランチをクローンした後に定期的にpullすればいい。

SVNの既存リポジトリが大きすぎて、新規プロジェクトへ既存SVNリポジトリに登録するとタイムアウトしてしまう場合は、fetch_changesetsスクリプトをバックグラウンドで実施する方法で解決できると@g_maedaさんから聞いた。

ruby script/runner "Repository.fetch_changesets" -e production

リポジトリ | Redmine.JP

この方法の仕組みは、既存のSVNリポジトリからRedmineのDBへバッチ処理で定期的に取り込む処理になる。
つまり、Jenkinsのような高機能化したビルド管理ツールを使って、定期的にSVNリポジトリと同期するバッチジョブを走らせればいい。

Redmineを業務システム化するアイデア~メトリクス集計の本質は集計バッチ処理: プログラマの思索

Redmineとバージョン管理リポジトリの連携機能は、チケット駆動開発の発端となった「No Ticket, No Commit」に由来する運用ルールと密接に関係するため、この機能が使えなくなるとチケット駆動の威力が半減する。
チケットで成果物の変更管理をするだけでなく、トレーサビリティという効果も現れる重要な機能だからだ。

先日のRxtStudyでも、@akahane92さんがRedmineの性能改善に関する発表でも、上記に関連する内容を説明されていた。
もう一度再認識してみる。

|

« 分散バージョン管理ツールにおけるブランチ戦略 | トップページ | 論文作成の技法part1~論文の構造 »

Git・構成管理」カテゴリの記事

Mercurial」カテゴリの記事

Redmine」カテゴリの記事

チケット駆動開発」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 分散バージョン管理ツールにおけるブランチ戦略 | トップページ | 論文作成の技法part1~論文の構造 »