トランザクション割り当て
トランザクション割り当てを使用すると、さまざまなタイプのトランザクションのクォータポリシーを定義できます。トランザクションクォータは、ポリシーに違反しているすべてのトランザクションをキャンセルし、ユーザーにキャンセルを通知します。
アドミニストレーターは、パフォーマンスの低いクエリーやスクリプトがシステムリソースを消費するのを防ぐために、トランザクション割り当てを設定できます。これにより、他のトランザクションが実行できないほど大量のリソースを消費するトランザクションがなくなります。アドミニストレーターは、キャンセルログメッセージを表示して、過度のリソースを消費する可能性のあるトランザクションを特定することもできます。
このトランザクション割り当てプラグインは、新規およびアップグレードされたすべてのインスタンスでデフォルトでアクティブになっています。
トランザクション割り当ての仕組み
トランザクションはクォータマネージャーを使用します。クォータマネージャーは、トランザクションクォータのルールに従ってトランザクションをキャンセルするバックグラウンドスレッドです。クォータマネージャーは次のアクションを実行します。
- 次のリストと類似したアクティブなトランザクションのリストを取得します .
- 各トランザクションを順に巡り、トランザクションに一致する条件ですべてのクォータルールをチェックします。クォータ制限を超過すると、その最初の発生がトランザクションのキャンセルをトリガーします。トランザクションが変更された場合、または新しいクォータルールがある場合、クォータマネージャーはトランザクションを再評価します。注:クォータルールの [順番 (Order)] フィールドは、クォータルールがチェックされる順番に影響を与えます。クォータマネージャーは下位ルールから先にチェックしますが (順番 80 の後に順番 90 など)、最終的にはすべてのルールをチェックします。関連するルールの条件によっては、これがパフォーマンスに多少の影響を与える可能性があります。
- 指定されたクォータの最大値よりも長く実行されている場合は、トランザクションをキャンセルします。
- 実行中のトランザクションをログに記録します。
- 次のハートビートまでスリープします。これはglide.quota.manager.heartbeat システムプロパティによって制御されます。
クォータ超過によるトランザクションのキャンセル
トランザクションがクォータルールで指定された最大期間よりも長く実行されると、キャンセルと理由がユーザーに通知されます。
さらに、クォータの超過によりトランザクションがキャンセルされるたびに、トランザクションキャンセルログに警告が記録されます。トランザクションキャンセルログを表示するには、 .
トランザクションのキャンセルの例
トランザクションは複数の理由でキャンセルされる可能性があります。次のインジケーターを探します。
- 最大実行時間を超えました (maximum execution time exceeded):このメッセージは、glide.quota.manager スレッドがトランザクションをキャンセルしたときに表示されます。
- 他のトランザクションによってキャンセルされました (canceled by other transaction):このメッセージは、トランザクションが glide.quota.manager スレッドではなく、最初にこのトランザクションを発行したセッションスレッドによってキャンセルされた場合に表示されます。
- ユーザー要求によりキャンセルされました (canceled by user request):このメッセージは、ユーザーが赤い [X] ボタンを選択して実行中のトランザクションをキャンセルしたときに表示されます。
glide.quota.manager によってキャンセルされたトランザクションを検索する場合は、 [メッセージ] [次の値を含む] [最大実行時間を超えました (maximum execution time exceeded)] の組み合わせを検索します。例:
Cancelling transaction /home.do - Default-thread-11.0 (maximum execution time exceeded): Thread Default-thread-11.0 (Default-thread-11.0, F530DD111B11111111FC031767DA158E), after 30000ms。