機械制御/振動騒音
IR情報 会社情報

PERFORCEテクニカルノート048

image_toyo_ss_img_perforce_title_perforce.gif.gif
テクニカルノート048  
image_toyo_ss_img_all_line_yellow.gif.gif
image_toyo_common_spacer.gif.gif
ビュー、プロテクション、Maxresults、Maxscanrows、およびMaxlocktime
ビュー、プロテクション、maxresults、maxscanrows、およびmaxlocktimeを使用してパフォーマンスを最大にする
image_toyo_common_spacer.gif.gif
PERFORCEサーバのパフォーマンスは、ディポのサイズではなくユーザが単一のコマンド実行で操作しようとするファイルの数に依存します。例えば、30個のファイルを持つクライアント・ビューを300万個のファイルを持つディポと同期する場合と、30個のファイルを持つクライアント・ビューを30個のファイルを持つ ディポと同期する場合の速度はほぼ同じです。
image_toyo_common_spacer.gif.gif
単一のコマンドが影響を及ぼすファイルの数は、以下の要素によって決定されます。
image_toyo_common_spacer.gif.gif
  • p4コマンドライン引数(P4VまたはP4Winのコマンドの場合は選択されたフォルダ)。引数がない場合、コマンドはクライアント・ビューによってマッピングされたすべてのファイルに作用します。
  • クライアント・ビュー、ブランチ・ビュー、ラベル・ビュー、およびプロテクション。無制限のビューおよび無制限のプロテクションの場合は、コマンドはディポ内のすべてのファイルに作用します。
    image_toyo_common_spacer.gif.gif
    ディポが非常に大きいサイトでは、無制限のビューや無資格のコマンドによって、PERFORCEサーバに必要以上に多くの負荷がかかります。PERFORCEサーバが要求に応答する際、サーバは計算フェーズの処理中にデータベースをロックします。通常の処理ではこの方法は適切であり、PERFORCEサーバは高速に処理を「開始して終了する」ため、要求が積み上がることはありません。しかし非常に大きい要求の場合、数秒あるいは数分を要することがあり ます。苛立ったユーザがCTRL-Cを押して再試行すると問題はさらに悪くなり、PERFORCEサーバは多くのメモリを使用し始め、さらに応答速度が遅くなります。
    image_toyo_common_spacer.gif.gif
    PERFORCEユーザや管理者は、以下の方法で PERFORCE サーバの過負荷を避けることができます。
    image_toyo_common_spacer.gif.gif
    • 「狭い」ビューを使用する
    • プロテクションを割り当てる
    • maxresultsを設定し、影響するデータ量を制限する
    • maxscanrowsを設定し、走査されるリビジョンの数を制限する
    • maxlocktimeを設定し、データ走査に費やす時間を制限する

    image_toyo_common_spacer.gif.gif
    これらのオプションについて、以下でさらに詳しく説明します。

    image_toyo_ss_img_all_line_dot_526.gif.gif

    image_toyo_common_spacer.gif.gif
    「狭い」ビューを使用する
    image_toyo_common_spacer.gif.gif
    ユーザが必要なファイルにのみアクセスするように、クライアント・ビュー(およびブランチ・ビューおよびラベル・ビュー)を定義します。 例えば、以下の「狭い」クライアント・ビューは特定のディポ領域に制限されます。

    image_toyo_common_spacer.gif.gif
    //depot/main/svr/devA/... //ws/main/svr/devA/...
    //depot/main/dvr/lport/... //ws/main/dvr/lport/...
    //depot/rel2.0/svr/devA/bin/... //ws/rel2.0/svr/devA/bin/...
    //depot/qa/s6test/dvr/... //ws/qa/s6test/dvr/...

    image_toyo_common_spacer.gif.gif
    一方、以下のような無制限のビューは設定が容易ですが、ディポが非常に大きい場合に問題を引き起こします。
    image_toyo_common_spacer.gif.gif
    //depot/... //ws/...

    image_toyo_common_spacer.gif.gif
    クライアント・ビュー、ブランチ・ビュー、およびラベル・ビューは、作成したユーザが p4 client、p4 branch、p4 labelの各コマンドを使用することにより定義されます。
    image_toyo_common_spacer.gif.gif
    image_toyo_ss_img_all_line_dot_526.gif.gif
    プロテクションを割り当てる
    image_toyo_common_spacer.gif.gif
    プロテクションはビューの一種です。プロテクションはコマンドライン・インタフェース(CLI)のp4 protectを使用して設定され、ユーザの実行コマンドによって影響を受ける可能性のあるディポ・ファイルを制御します。ただしビューとは異なり、プロ テクションはスーパーユーザだけが設定可能です。(プロテクションではディポ・ファイルの読み取りおよび書き込みの許可も制御されますが、許可レベル自体はPERFORCEサーバのパフォーマンスに全く影響しません。)
    image_toyo_common_spacer.gif.gif
    プロテクションはユーザまたはグループのどちらかに割り当てることができます。
    image_toyo_common_spacer.gif.gif
    例:
    image_toyo_common_spacer.gif.gif
    write user sam * //depot/admin/...
    write group rocketdev * //depot/rocket/main/...
    write group rocketrel2 * //depot/rocket/rel2.0/...

    image_toyo_common_spacer.gif.gif
    グループはスーパーユーザにより CLI のp4 groupコマンドで作成されます。グループを使うとプロテクションの割り当てが容易になり、次に説明するmaxresults、maxscanrows、およびmaxlocktimeの各フォーマンス・チューニング・オプションを設定することができます。
    image_toyo_common_spacer.gif.gif
    image_toyo_ss_img_all_line_dot_526.gif.gif
    maxresultsを設定し、影響するデータの量を制限する
    image_toyo_common_spacer.gif.gif
    各グループには、maxresults 値が関連付けられています。デフォルト値は「unlimited(無制限)」ですが、スーパーユーザがp4 groupを使用して特定のグループについての値を制限することができます。グループに属するユーザは、maxresults値の制限より多くのデータ ベース行に影響するコマンドを実行できません。(ほとんどのコマンドにおいて、影響を受けるデータベース行の数は影響を受けるファイルの数と概ね一致しま す。)
    image_toyo_common_spacer.gif.gif
    例:
    image_toyo_common_spacer.gif.gif
       Group: rocketdev
       Maxresults: 10000
       Users:
               bill
               ruth
               sandy
                  
                  

    image_toyo_common_spacer.gif.gif
    ここでRuthが無制限のクライアント・ビューを持っているとします。彼女が次のコマンドを試みると、
    image_toyo_common_spacer.gif.gif
    p4 sync

    image_toyo_common_spacer.gif.gif
    ディポにあるファイルが1万個より多い場合、彼女の sync コマンドは拒否され、クライアント上に次のようなエラー・メッセージが表示されます。
    image_toyo_common_spacer.gif.gif
    Request too large (over 10000); see 'p4 help maxresults'.

    image_toyo_common_spacer.gif.gif
    一度に同期するファイル集合を小さくすることによって、これを回避できます。
    image_toyo_common_spacer.gif.gif
    例:
    image_toyo_common_spacer.gif.gif
    p4 sync //depot/projA/...
    p4 sync //depot/projB/...

    image_toyo_common_spacer.gif.gif
    など
    これでサーバがただ1つの非常に大きいコマンドの処理に忙殺されることなく、ファイルを取得することができます。

    image_toyo_ss_img_all_line_dot_526.gif.gif
    image_toyo_common_spacer.gif.gif
    maxscanrowsを設定し、走査されるリビジョンの数を制限する
    image_toyo_common_spacer.gif.gif
    また各グループには、maxscanrows値が関連付けられています。デフォルト値は「unlimited(無制限)」ですが、スーパーユーザがp4 groupを使用して特定のグループについての値を制限することができます。グループに属するユーザは、maxscanrows値の制限より多くのリビ ジョンを走査するコマンドを実行できません。このオプションは、それを使用しないとすべてのリビジョンを走査することになるような、 p4 files //...foo... などのワイルドカード付きのコマンドを制限するのに特に有用です。
    image_toyo_common_spacer.gif.gif
    例:
    image_toyo_common_spacer.gif.gif
       Group: rocketdev
       MaxScanRows: 50000
       Users:
               bill
               ruth
               sandy
                  
                  

    image_toyo_common_spacer.gif.gif
    すべてのディポに5万個を超えるリビジョンがあり、Billが次のコマンドを実行したとすると、
    image_toyo_common_spacer.gif.gif
    p4 files //...foo...

    image_toyo_common_spacer.gif.gif
    彼のコマンドは拒否され、クライアントに以下のメッセージが表示されます。
    image_toyo_common_spacer.gif.gif
    Too many rows scanned (over 50000); see 'p4 help maxscanrows'.

    image_toyo_common_spacer.gif.gif
    しかし、Billがコマンドの範囲を狭くして走査するリビジョンを5万個未満にすれば正常終了します。
    image_toyo_common_spacer.gif.gif
    p4 files //depot/main/...foo...
    //depot/main/foo#4986 - edit change 4994 (text)

    image_toyo_common_spacer.gif.gif
    範囲が狭められると、サーバへの影響は大幅に軽減されます。
    image_toyo_common_spacer.gif.gif
    maxscanrowsの制限は以下のコマンドには影響しません。
    image_toyo_common_spacer.gif.gif
    • integrate
    • labelsync
    • obliterate
    • resolve
    • revert
    • submit

    image_toyo_common_spacer.gif.gif
    image_toyo_ss_img_all_line_dot_526.gif.gif

    image_toyo_common_spacer.gif.gif
    maxlocktimeの制限を設定してデータ走査の実行時間を制限し、サーバが長期にわたってテーブルをロックしないようにする
    image_toyo_common_spacer.gif.gif
    また各グループには、 maxlocktime 値が関連付けられています。デフォルト値は「unlimited(無制限)」ですが、スーパーユーザがp4 groupを使用して特定のグループについての値を制限することができます。maxlocktimeの制限値はミリ秒単位で入力します。maxlocktimeは1番目のテーブルが(読み取り)ロックされるときにカウンタを始動させ、それ以降のテーブルの読み取りロックを待機しながらカウントを増やします。ある時点で実行中のユーザ数とコマンド数は各々異なるため、このオプションはサーバの負荷によって動作が異なります。読み取りロックがコマンドを保留または待 機する時間がグループのmaxlocktime値を超えると、コマンドは失敗します。
    image_toyo_common_spacer.gif.gif
       Group: rocketdev
       MaxLockTime: 30000
       Users:
               bill
               ruth
               sandy
                  

    image_toyo_common_spacer.gif.gif
    コマンドに取られる最初の読み取りロックの開始後、ロックがmaxlocktime値を超えて持続する(待機時間を含む)と、コマンドは失敗します。
    image_toyo_common_spacer.gif.gif
    p4 opened ...

    image_toyo_common_spacer.gif.gif
    取られる読み取りロックが30000ミリ秒(30秒)を超えると、次のように表示されます。
    image_toyo_common_spacer.gif.gif
    Operation took too long (over 30.00 seconds); see 'p4 help maxlocktime'.

    image_toyo_common_spacer.gif.gif
    サーバ・ログには、トレース出力内にコマンドの詳細情報が書き込まれます。
    image_toyo_common_spacer.gif.gif
    --- killed by MaxLockTime

    image_toyo_common_spacer.gif.gif

    image_toyo_common_spacer.gif.gif
    image_toyo_ss_img_all_line_dot_526.gif.gif

    image_toyo_common_spacer.gif.gif
    詳細情報:
    image_toyo_common_spacer.gif.gif
    • 2つ以上のグループに属するユーザについて maxresults、maxscanrows、および maxlocktime がどのように決定されるかに関しては、 テクニカルノート049を参照してください。
    • コマンドの有益な比較情報および影響を及ぼすデータ量を表示するには、 p4 help maxresultsを使用してください。
    • パフォーマンスとチューニングの問題、およびプロテクションとアクセス権限に関する解説は、 『PERFORCEシステム管理者ガイド』をご覧ください。
    • 上述したp4コマンドの使用方法および構文規則は、『PERFORCEコマンド・リファレンス』に記述されています。

    image_toyo_common_spacer.gif.gif
    その他のキーワード:ロード・バランシング、スループット、応答時間
    image_toyo_common_spacer.gif.gif
    image_toyo_ss_img_all_btn_yellow_bgwhite2.gif.gif戻る

PAGE TOP