テクニカルノート048  


ビュー、プロテクション、Maxresults、Maxscanrows、およびMaxlocktime
ビュー、プロテクション、maxresults、maxscanrows、およびmaxlocktimeを使用してパフォーマンスを最大にする

PERFORCEサーバのパフォーマンスは、ディポのサイズではなくユーザが単一のコマンド実行で操作しようとするファイルの数に依存します。例えば、30個のファイルを持つクライアント・ビューを300万個のファイルを持つディポと同期する場合と、30個のファイルを持つクライアント・ビューを30個のファイルを持つ ディポと同期する場合の速度はほぼ同じです。

単一のコマンドが影響を及ぼすファイルの数は、以下の要素によって決定されます。
  • p4コマンドライン引数(P4VまたはP4Winのコマンドの場合は選択されたフォルダ)。引数がない場合、コマンドはクライアント・ビューによってマッピングされたすべてのファイルに作用します。
  • クライアント・ビュー、ブランチ・ビュー、ラベル・ビュー、およびプロテクション。無制限のビューおよび無制限のプロテクションの場合は、コマンドはディポ内のすべてのファイルに作用します。

    ディポが非常に大きいサイトでは、無制限のビューや無資格のコマンドによって、PERFORCEサーバに必要以上に多くの負荷がかかります。PERFORCEサーバが要求に応答する際、サーバは計算フェーズの処理中にデータベースをロックします。通常の処理ではこの方法は適切であり、PERFORCEサーバは高速に処理を「開始して終了する」ため、要求が積み上がることはありません。しかし非常に大きい要求の場合、数秒あるいは数分を要することがあり ます。苛立ったユーザがCTRL-Cを押して再試行すると問題はさらに悪くなり、PERFORCEサーバは多くのメモリを使用し始め、さらに応答速度が遅くなります。

    PERFORCEユーザや管理者は、以下の方法で PERFORCE サーバの過負荷を避けることができます。
    • 「狭い」ビューを使用する
    • プロテクションを割り当てる
    • maxresultsを設定し、影響するデータ量を制限する
    • maxscanrowsを設定し、走査されるリビジョンの数を制限する
    • maxlocktimeを設定し、データ走査に費やす時間を制限する


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




    「狭い」ビューを使用する

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

    //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/...


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


    クライアント・ビュー、ブランチ・ビュー、およびラベル・ビューは、作成したユーザが p4 client、p4 branch、p4 labelの各コマンドを使用することにより定義されます。


    プロテクションを割り当てる

    プロテクションはビューの一種です。プロテクションはコマンドライン・インタフェース(CLI)のp4 protectを使用して設定され、ユーザの実行コマンドによって影響を受ける可能性のあるディポ・ファイルを制御します。ただしビューとは異なり、プロ テクションはスーパーユーザだけが設定可能です。(プロテクションではディポ・ファイルの読み取りおよび書き込みの許可も制御されますが、許可レベル自体はPERFORCEサーバのパフォーマンスに全く影響しません。)

    プロテクションはユーザまたはグループのどちらかに割り当てることができます。

    例:
    write user sam * //depot/admin/...
    write group rocketdev * //depot/rocket/main/...
    write group rocketrel2 * //depot/rocket/rel2.0/...


    グループはスーパーユーザにより CLI のp4 groupコマンドで作成されます。グループを使うとプロテクションの割り当てが容易になり、次に説明するmaxresults、maxscanrows、およびmaxlocktimeの各フォーマンス・チューニング・オプションを設定することができます。


    maxresultsを設定し、影響するデータの量を制限する

    各グループには、maxresults 値が関連付けられています。デフォルト値は「unlimited(無制限)」ですが、スーパーユーザがp4 groupを使用して特定のグループについての値を制限することができます。グループに属するユーザは、maxresults値の制限より多くのデータ ベース行に影響するコマンドを実行できません。(ほとんどのコマンドにおいて、影響を受けるデータベース行の数は影響を受けるファイルの数と概ね一致しま す。)

    例:
       Group: rocketdev
       Maxresults: 10000
       Users:
               bill
               ruth
               sandy
                  
                  


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


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


    一度に同期するファイル集合を小さくすることによって、これを回避できます。

    例:
    p4 sync //depot/projA/...
    p4 sync //depot/projB/...


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



    maxscanrowsを設定し、走査されるリビジョンの数を制限する

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

    例:
       Group: rocketdev
       MaxScanRows: 50000
       Users:
               bill
               ruth
               sandy
                  
                  


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


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


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


    範囲が狭められると、サーバへの影響は大幅に軽減されます。

    maxscanrowsの制限は以下のコマンドには影響しません。
    • integrate
    • labelsync
    • obliterate
    • resolve
    • revert
    • submit





    maxlocktimeの制限を設定してデータ走査の実行時間を制限し、サーバが長期にわたってテーブルをロックしないようにする

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


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


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


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







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


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