RedmineでSubversion リポジトリ表示を高速化する方法
RedmineでSubversion リポジトリ表示を高速化する方法について、丸山さんが回答されていたのでメモ。
【元ネタ】
Subversion リポジトリ表示に時間がかかる - Google グループ
小技(0.9): コミットと同時にリポジトリの情報を取得する | Redmine.JP Blog
メーリングリストで以下の問題を提起されている。
(引用開始)
実プロジェクトで問題が起きたので、相談させてください。
・環境
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
この方法の仕組みは、既存のSVNリポジトリからRedmineのDBへバッチ処理で定期的に取り込む処理になる。
つまり、Jenkinsのような高機能化したビルド管理ツールを使って、定期的にSVNリポジトリと同期するバッチジョブを走らせればいい。
Redmineを業務システム化するアイデア~メトリクス集計の本質は集計バッチ処理: プログラマの思索
Redmineとバージョン管理リポジトリの連携機能は、チケット駆動開発の発端となった「No Ticket, No Commit」に由来する運用ルールと密接に関係するため、この機能が使えなくなるとチケット駆動の威力が半減する。
チケットで成果物の変更管理をするだけでなく、トレーサビリティという効果も現れる重要な機能だからだ。
先日のRxtStudyでも、@akahane92さんがRedmineの性能改善に関する発表でも、上記に関連する内容を説明されていた。
もう一度再認識してみる。
| 固定リンク
「Redmine」カテゴリの記事
- Redmineのバージョン設定でプロジェクトの設定方法が違う(2024.06.23)
- ウクライナのRedmine開発者が作ったRedmineテーマやプラグイン(2024.06.18)
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- Redmineで持ち株管理する事例(2024.04.21)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
「廃止Mercurial」カテゴリの記事
- GitHubはオープンソースのプロセスを標準化した(2015.06.11)
- 「反復型ソフトウェア開発」はソフトウェア工学の良書(2013.02.09)
- Mercurialに取り込まれたコミュニティ由来の機能一覧(2013.01.12)
- WordやExcelから直接Mercurialへコミットできるアドオンmsofficehg(2012.12.07)
- RedmineでSubversion リポジトリ表示を高速化する方法(2012.11.23)
「構成管理・Git」カテゴリの記事
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- パッケージ設計の原則の意義は変化しているのか(2023.09.30)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 【資料公開】チケット駆動開発の解説~タスク管理からプロセス改善へ #redmine(2022.01.14)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
「チケット駆動開発」カテゴリの記事
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 知識は経験よりも大切か、経験は知識よりも勝るのか、SECIモデルは相互作用を語る(2022.04.26)
- プロジェクト管理の基本はテーラリング、Redmineはプロセスをテーラリングするツール(2022.04.21)
コメント