データベースへのクエリを制限する
各Helixサーバグループには、相互に関連するmaxresults、maxscanrows、maxlocktimeという値があります。それぞれデフォルトでは、unset
に設定されていますが、superユーザは、p4 group
コマンドを用いて特定グループに対してこれらの値を制限することができます。
MaxResultsは、コマンド実行中にバッファリングされるデータの量を制限することにより、サーバがメモリを過剰に使用しないようにします。制限されたグループのユーザは、そのグループのMaxResults
の制限値より多くデータベース行をバッファリングするようなコマンドを実行することはできません。(ほとんどのサイトでは、MaxResults
を各ユーザのクライアントワークスペースで想定されるファイルの最大数よりも大きく設定する必要があります。)
MaxResults
と同様に、MaxScanRows
もサーバへ過度の要求がなされるような特定のユーザコマンドを制限します。(通常、1回の操作でスキャンされる行の数は、ディポ内のファイルの平均リビジョン数をMaxResults
に積算した数とほぼ等しくなっています。)
最後に、MaxLockTime
を使用して、特定のコマンドによってデータベースが長時間ロックされないようにします。ミリ秒単位の数値でMaxLockTime
を設定し、データベースのロックを許容する最大時間を指定します。
これらの制限を設定するには、p4
group
のフォーム内の当該フィールドに数値を入力します。1人のユーザが複数のグループに登録されている場合、それらのグループのMaxResults
(またはMaxScanRows
もしくはMaxLockTime
)制限値の最大値(unlimited
を含むがデフォルトのunset
設定を除く最大値)がそのユーザのMaxResults
(またはMaxScanRows
もしくはMaxLockTime
)値とみなされます。
例maxresults、maxscanrowsおよびmaxlocktimeの動作
管理者として、グループrocketdev
のメンバーの操作を20,000ファイル以下に、さらにスキャンを100,000リビジョン以下に、そしてデータベーステーブルを30秒以上ロックしないように制限するものとします。
Group: rocketdev MaxResults: 20000 MaxScanRows: 100000 MaxLockTime: 30000 Timeout: 43200 Subgroups: Owners: Users: bill ruth sandy
ここで、クライアントビューが無制限、loose(「ゆるい」)に設定されているルースが
$ p4 sync
とコマンド入力すると、ディポにファイルが20,000以上ある場合、このsync
コマンドは拒否されます。この制限を回避するには、ルースのクライアントビューを限定するか、あるいはクライントビューで全ファイルが必要であるようなら、次のようにファイルを小セットに分けて同期させます。
$ p4 sync //depot/projA/...
$ p4 sync //depot/projB/...
いずれの方法でも、サーバを極端に負荷の大きい1つのコマンド処理に専念させることなく、ルースは目的のファイルを自分のワークスペースに同期させることができます。
次のように、ルースが全ファイルの全リビジョンをスキャンするようなコマンドを試行したと仮定します。
$ p4 filelog //depot/projA/...
このとき、ファイル数が20,000より少なく、リビジョン数が100,000より多い場合(例えば、projA
のディレクトリにファイルが1,000存在し、その各ファイルにリビジョンが20未満で、それぞれに50を超えるブランチが存在するとき)、MaxResults
の制限は適用されませんが、MaxScanRows
の制限が適用されます。
また、どちらの制限が有効であるかにかかわらず、30,000ミリ秒のMaxLockTime
を超えてデータベースをロックするようなコマンドの実行は許可されません。
特定のグループについて、結果として処理される行数(またはスキャンされるデータベースの行数、もしくはデータベースロック時間を示すミリ秒)の制限を解除するには、そのグループのMaxResults
、MaxScanRows
、またはMaxLockTime
の値をunlimited
に設定します。
これらの制限はユーザに不便を強いることになる可能性があるため、特定の操作がサーバの動作を遅くしているのでない限りは使用しないでください。Helixサーバアプリケーションの中には大規模な処理を行うものもあるため、通例MaxResults
の値を10,000より小さくすることはありません。また、MaxScanRows
は50,000より小さくせず、MaxLockTime
の値は1,000から30,000(1秒から30秒)の範囲内に設定します。
各Helixサーバコマンドで影響を受けるファイル数などの詳細については、コマンドラインで以下を実行してください。
$ p4 help maxresults
$ p4 help maxscanrows
$ p4 help maxlocktime
複数グループに含まれるユーザを対象とする場合のMaxResults、MaxScanRowsおよびMaxLockTime
前述のように、ユーザが複数のグループに登録されている場合、所属するすべてのグループのMaxResults
の制限値のうち最大値がそのユーザに適用されます。
デフォルト値unset
は数値上の制限ではありません。MaxResults
がunset
に設定されているグループに属するユーザであっても、他のグループに所属していればそのグループのMaxResults
(またはMaxScanRows
もしくはMaxLockTime
)値の最大値によって制限されます。
ユーザのコマンドが実際に無制限になるのは、そのユーザがどのグループにも属さないとき、あるいは、そのユーザが属するすべてのグループのMaxResults
がunlimited
に設定されている場合に限られます。