作業割当てでは、ジョブを実行する場所と日時についての制約や、ジョブの実行に使用できるリソース量を定義できます。このプロセスには、作業割当ての作成と、作業割当てとリクエスト・プロセッサのバインディングが含まれます。
作業割当ては、特殊化ルールと1つ以上の稼働シフトで構成されます。特殊化ルールは、ジョブの処理に関する制約を定義します。稼働シフトは、ジョブを実行できる時間枠とその期間に使用できるリソースを定義します。稼働シフトで定義されるリソースには、リクエスト・プロセッサのローカル・リソースであるスレッドと、グローバル・リソースである非同期ワーカーがあります。非同期ワーカーの数を指定し、データベース・ジョブなどの共有グローバル・リソースの使用を制限できます。
バインディングにより作業割当てがサーバー上のリクエスト・プロセッサに関連付けられ、ジョブの実行可能場所が決まります。排他的バインディング・モードがサポートされているため、ジョブの実行日時の決定だけでなく、ジョブが他の場所で実行されないようにすることもできます。
デフォルトで、作業割当てはバインドされていません。バインドされている、またはアクティブな作業割当てがない場合、仮想的なデフォルトの作業割当てが開始され、使用可能なすべてのリソースを使用してすべてのジョブが処理されます。このデフォルトの作業割当ては、プロセッサに対して構成されているスレッド数に制限されていますが、非同期ワーカー数に対するデフォルトの制限はありません。非同期ワーカー数を制限するには、1つ以上の作業割当てを作成してバインドする必要があります。
この項では、次の項目について説明します。
作業割当てでは、ジョブ・リクエストの処理について次のような制御が可能です。
実行時に作業割当てをリクエスト・プロセッサにバインドし、特定のタイプのジョブ・リクエストを実行できる期間を制限できます。
実行時にリクエスト・プロセッサを構成し、すべてのジョブ・リクエストの処理に使用できるスレッドを制限できます。
バインドされた作業割当ては、有効化されていて、アクティブな稼働シフトがあり、作業割当て定義に有効化フラグが設定されている場合にアクティブになります。稼働シフトがアクティブになるのは、割当てが0より大きく現在のスケジュールが含まれている(現在時間がスケジュールと期間で定義される時間枠内である)か、稼働シフトが常時の稼働シフトである場合です。バインドされた作業割当てがサーバーにない場合、デフォルトの作業割当てがアクティブになり、すべてのスレッドが使用され非同期ワーカーの制限は適用されません。
すべてのアクティブな作業割当ての割当てを満足させるために必要なスレッドの合計数が構成済のスレッド数を超えていなければ、アクティブな作業割当てには、アクティブな稼働シフトによって指定されたスレッド割当てが割り当てられます。この場合、Oracle Enterprise Schedulerは、全作業割当てのスレッド割当て総数に占める稼働シフトの割当てスレッドの割合に基づいて、スレッド割当てを評価します。
たとえば、作業割当て1のスレッド割当てが70、作業割当て2のスレッド割当てが30で、構成されているプロセッサ・スレッドが20あるとします。要求される割当ての合計は100であるため、作業割当て1の重みは70パーセント、作業割当て2の割当ては30パーセントになります。Oracle Enterprise Schedulerによって、作業割当て1に14スレッド、作業割当て2に6スレッドが割り当てられます。
デフォルトの作業割当てがアクティブの場合、作業割当てに割り当てられるスレッド数は、構成されているスレッド数と同じになります。
注意:
アクティブな作業割当てには、少なくとも1つのスレッドが割り当てられます。
作業割当てとスレッド割当てが決定された後、Oracle Enterprise Schedulerによって各アクティブ作業割当てのスレッド・プールが開始されます。スレッドは、その作業割当てに特殊化されたジョブ・リクエストの処理を担当します。ただし、排他的作業割当てに特殊化されているジョブ・リクエストは除外されます。除外は、デフォルトの作業割当てを含むすべての作業割当てに対して有効です。排他的作業割当てがグループ内のいずれかのサーバーにバインドされた場合、排他的作業割当てに特殊化されているジョブ・リクエストを他の作業割当てが処理することはできません。
注意:
無効の作業割当てを含め、排他的モードでバインドされている作業割当てはすべて除外されます。排他的バインドは、バインド先のサーバーが使用できない状態である場合も適用されます。除外されないようにするには、排他的作業割当てのバインドを解除する必要があります。
作業割当てには、リクエスト・プロセッサの制約を定義する2つの主要コンポーネントがあります。
特殊化ルール: リクエスト・プロセッサでのジョブ・リクエスト処理に対する制約を定義します。
稼働シフト: ジョブ・リクエストを処理する時間枠を指定します。つまり、リクエスト・プロセッサでジョブ・リクエストを処理できるスケジュールを指定します。
特殊化ルールや稼働シフトを含めたこれらの作業割当て制御の組合せにより、処理するジョブ・リクエストを選択し、リクエスト・プロセッサのリソースの割当て方法を決定できます。たとえば、日中シフトと夜間シフトという2つの稼働シフトを定義し、これらの期間に処理を割り当てるとします。日中シフトのピーク使用時期間にはより多くのリソースを割り当て、夜間シフトのリソース割当てには別の組合せを指定することが考えられます。
デフォルトでリクエスト・プロセッサに作業割当てはバインドされておらず、リクエスト・プロセッサは準備完了のジョブ・リクエストをすべて処理します。デフォルトの動作は、特殊化ルールのない、常時の稼働シフトを持つリクエスト・プロセッサを使用している場合と同じであり、構成されているスレッドはすべて使用され、非同期ジョブの数に制限はありません。
表5-7に、特殊化ルールに定義できるプロパティを示します。
表5-7 特殊化ルールに使用できる特殊化プロパティ
特殊化プロパティ | 説明 |
---|---|
アプリケーション |
ジョブ・リクエストに関連付けられたアプリケーションの名前を指定します。 |
製品 |
アプリケーション内の製品名を指定します。 |
送信者 |
ジョブ・リクエストを送信したユーザーを指定します。 |
ジョブ定義 |
特定のジョブ・リクエスト名を指定します。 |
リクエスト・カテゴリ |
システム管理者が定義したラベルを指定し、管理者が独自の要件に応じてジョブ・リクエストをグループ化できるようにします。デリミタ文字で区切って複数のラベルを含めることができます。 |
論理クラスタ名 |
論理クラスタの名前を指定します。 |
次の演算子は条件を作成するために使用されます: equals
、not equals
、contains
、starts with
、ends with
およびNOT
(単項)。
次の演算子は、ルールの条件を結合するために使用できます: AND
およびOR
(両方とも二項タイプ)
例5-1に、作業割当てで使用できるサンプルの特殊化ルールを示します。
ジョブ・リクエストが2つの異なる作業割当てに特殊化されている場合、ジョブ・リクエストはリソースの使用可能状況に応じて、いずれかの作業割当てによって処理されます。同様に、同じ作業割当てが2つの異なるサーバーに割り当てられている場合、ジョブ・リクエストはいずれか一方のサーバーによって処理されます。実際、前処理とジョブの実行が別のサーバーで行われるなど、同じリクエストの異なるステージが異なるサーバーで処理されることがあります。
requestCategoryの値には、カンマで区切って複数のラベル用語を指定できます。このようにして、ラベルの組合せに基づいた特殊化によって、タグの動作を模倣するラベルを指定できます。
たとえば、次のようなラベルを定義できます。
これらのラベルの場合、次の例のようなrequestCategory式を記述することが考えられます。
カンマを使用して用語を区切る場合は、例5-2に示されているように、各ラベル用語の前後にカンマを付ける必要があります。requestCategory式では、例5-3に示されているように、カンマを付けた完全なラベルを指定する必要があります。そうすることで、指定した用語を含む別の用語が選択されることを回避できます。
作業割当てを作成または編集するには:
例5-1 サンプルの特殊化ルール
application = 'EssDemoApp' AND (definition = 'JobDefinition://mypackage/Job_essdemo1' OR definition = 'JobDefinition://mypackage/LongRunningJob') requestCategory ='Priority' user = 'sam' (requestCategory ='LongRunning') AND NOT (definition = 'JobDefinition://mypackage/LongRunningJob')
例5-2 複数の用語を組み合せたリクエスト・カテゴリ・ラベル
",NODE1,CRITICAL," ",NODE1,STANDARD," ",NODE1,IMPORTANT,"
例5-3 複数のラベルを組み合せて使用するrequestCategory式
(requestCategory contains ',NODE1,') AND (requestCategory contains ',CRITICAL,') (requestCategory contains ',STANDARD,') OR (requestCategory contains ',IMPORTANT,') OR (requestCategory contains ',CRITICAL,')
稼働シフトは、リクエスト・プロセッサが動作するアクティブな時間を示すものです。つまり、稼働シフトでは、ジョブ・リクエストの処理でリソースまたはスレッドを使用できる一連の時間枠を定義します。作業割当てがリクエスト・プロセッサにバインドされるとき、その作業割当てに1つ以上の稼働シフトが関連付けられます。実行時にOracle Enterprise Schedulerは、その作業割当て内の稼働シフトのリソース割当てを判別します。
それぞれ異なる時間枠およびリソースの制限を持つ複数の稼働シフトを使用することで、様々なタイミングで異なる量のリソースを使用できます。たとえば、午前8時からの日中の稼働シフトを作成し、日中のスレッド割当てと非同期ジョブの制限を設定したり、午後6時からの夜間の稼働シフトを作成し、夜間のスレッド割当てと非同期ジョブの制限を設定したりすることが可能です。
稼働シフトはオーバーラップする可能性がありますが、Oracle Enterprise Schedulerでは、現在の稼働シフトとして1つの稼働シフトが選択されることに注意してください。
特定の作業割当てに対して現在アクティブな稼働シフトは1つのみですが、すでにアクティブでない稼働シフトに対するアクティブなリクエストが存在する可能性があります。実行が開始された稼働シフトで定義済の動作時間枠を超えてリクエストが実行されると、このような状況が発生する場合があります。たとえば、日中の稼働シフトがアクティブなときにリクエストの実行が開始され、夜間の稼働シフトが開始されたときにそのリクエストがまだ実行されているような場合です。Oracle Enterprise Schedulerは、現在のアクティブな稼働シフトの制限を使用し、作業割当ての稼働シフト内に開始されたすべてのアクティブなリクエストの数を制御します。アクティブなリクエストの数が現在の制限を超えた場合、アクティブなリクエストの数がその制限を下回るまで、それ以上のリクエストは実行されません。
稼働シフトは次のリソースを定義します。
スレッド割当て
非同期JavaジョブおよびPL/SQLジョブの非同期ジョブ制限
スレッド割当てでは、リクエスト・プロセッサで使用できるスレッドの数を指定します。これらのスレッドは、同期ジョブの処理、非同期ジョブの開始と終了、ジョブ・リクエストの前後処理、イベントの更新など、ローカル・タスクの実行に使用されます。作業割当て内の稼働シフトがアクティブのとき、その作業割当ての各リクエスト・プロセッサは指定されたスレッド数を使用できます。たとえば、スレッド割当てが15の常時の稼働シフトが作業割当てに含まれているとします。その作業割当てが3つのリクエスト・プロセッサにバインドされている場合、各リクエスト・プロセッサが15スレッドを使用できるため、3サーバーの合計は45スレッドになります。
非同期ジョブ、PL/SQLジョブおよび非同期Javaジョブは、システム全体で共有する必要があるグローバル・リソースです。稼働シフトを使用して、作業割当てに対してアクティブにするPL/SQLジョブおよび非同期Javaジョブの数を制限できます。この制限はシステム内でその作業割当てを使用するすべてのリクエスト・プロセッサにわたって適用されます。たとえば、PL/SQLジョブ制限が10の常時の稼働シフトが作業割当てに含まれているとします。その作業割当てが3つのリクエスト・プロセッサにバインドされている場合、10個のPL/SQL非同期ワーカーが3つのリクエスト・プロセッサによって共有され、最大で10個のPL/SQLジョブがその作業割当てでアクティブになります。
非同期ジョブは、前処理の開始からファイナライズの前に、非同期ワーカーを予約および保持します。前処理が遅延した場合、非同期ワーカーは、遅延中はリリースされ、遅延が終了したときに予約されます。サブリクエストを発行して一時停止したリクエストでは、非同期ワーカーがリリースされ、リクエストが再開されたときに非同期ワーカーが予約されます。BLOCKEDのリクエストでは、非同期ワーカーは保持されません。
稼働シフトのスレッド割当てと非同期ジョブ制限を決める際は、その稼働シフトを使用する作業割当てに特殊化されるジョブのタイプに注意してください。
この項では、次の項目について説明します。
稼働シフトの作成には、次が含まれます。
スケジュール: スケジュールを稼働シフトに関連付けます。
期間: 稼働シフトの期間を入力します。
スレッド割当て: 稼働シフトに割り当てるスレッド数を指定します。
非同期ジョブ制限: 作業割当てのためにアクティブにできる非同期のJavaジョブおよびPL/SQLジョブの数の制限を指定します。
稼働シフトを作成または編集するには:
ナビゲーション・ペインで、「スケジューリング・サービス」フォルダを展開し、Oracle Enterprise Schedulerアプリケーションを選択します。
「スケジューリング・サービス」メニューから、「作業割当て」→「稼働シフト」を選択します。
「稼働シフト」ページが表示されます。
「作成」または「編集」ボタンをクリックして、稼働シフトを作成または編集します。
「稼働シフトの作成(または編集)」ページが表示されます。
稼働シフトの次の情報を入力します。
スケジュール名: 稼働シフトの名前を入力します。
スケジュールの説明: 稼働シフトの説明を入力します。
「アクティブな期間」セクションで、稼働シフトのアクティブな期間として次のいずれかを選択します。
常時アクティブ: 稼働シフトを常に有効にする場合に選択します。このオプションを選択すると、「期間」テキスト・フィールドが無効になります。
既存のスケジュールの使用: 以前に作成したスケジュールを使用して稼働シフトを有効化する場合に選択します。「参照」ボタンをクリックして「スケジュールの選択」ウィンドウを表示し、「名前」および「パッケージ」フィールドを使用してスケジュールを検索します。
「期間」テキスト・フィールドに稼働シフトの期間を分単位で入力します。
スケジュールの指定: 稼働シフトのスケジュールを作成する場合に選択します。表示されたテキスト・フィールドにスケジュールの名前と説明を入力します。
「頻度」ドロップダウン・リストから頻度を選択します。選択した頻度のアイテムに基づいて、異なるオプションが表示されます。
「タイムゾーン」ドロップダウン・リストからスケジュールのタイムゾーンを選択します。
「開始日」フィールドで、「カレンダ」ボタンをクリックして日時を選択します。
「期間」テキスト・フィールドに稼働シフトの期間を分単位で入力します。
「拡張」リージョンを展開します。スレッド割当てと非同期ジョブ制限を指定します。
「スレッド割当て」フィールドに、稼働シフトがアクティブのときにプロセッサに割り当てるスレッド数を入力します。アクティブな稼働シフトのスレッド割当ての合計が、使用可能なスレッド数を超える場合、スレッドは比例配分でこの稼働シフトに割り当てられます。
「非同期ジョブ制限」リージョンに、作業割当てに対してアクティブにすることができる非同期JavaジョブおよびPL/SQLジョブの数を入力します。この制限は、この作業割当てがバインドされているすべてのプロセッサにわたって適用されます。
「OK」をクリックして、稼働シフトを保存します。
スケジュールを使用して、開始時間および終了時間に加え、作業割当て、パージ・ポリシーの頻度を構成します。
注意:
スケジューリングされたジョブ・リクエスト実行の詳細は、「事前定義ジョブ・スケジュールの作成または編集」を参照してください。
この項では、次の項目について説明します。
ジョブ・スケジュールは、実行の事前定義済の時間または繰返しを指定します。作業割当ておよびパージ・ポリシーのスケジュールは、ジョブ・スケジュールとは別に定義されます。ジョブ・スケジュールは、1つまたは複数のジョブに関連付けることができます。
スケジュールを作成する手順は、次のとおりです。