ヘッダーをスキップ

Oracle Workflow管理者ガイド
リリース12
E05663-01
目次へ
目次
前へ
前へ
次へ
次へ

Oracle Workflowのパフォーマンスの概念

この付録では、Oracle Workflowの実行時にパフォーマンス改善のために使用できる概念と技法について説明します。

この付録の内容は、次のとおりです。

Oracle Workflowのパフォーマンスの概念

Oracle Workflowのパフォーマンスは、複数の要因に依存します。設計したワークフロー・プロセスは、同期プロセス、非同期プロセス、強制同期プロセス、項目属性、メッセージ属性、サブプロセスおよび遅延アクティビティを効果的に使用することにより、パフォーマンスを向上させることができます。また、パーティション化およびパージを使用して、大量のランタイム・データに関連するパフォーマンスの問題を解決することもできます。 さらに、ビジネス・イベント・システムのパフォーマンスを向上させるには、最大キャッシュ・サイズを調整する方法と、カスタムPL/SQLファンクションに静的ファンクション・コールを使用可能にする方法があります。

詳細は、『Oracle Applications Tuning Handbook』、Andy Tremayne/Steve Mayze著(Oracle Press、ISBN 0-07-212549-7)および『Oracle Database概要』を参照してください。

パフォーマンス改善のためのワークフロー・プロセスの設計

効果的なプロセス設計により、ワークフロー・プロセスのパフォーマンスを向上させることができます。

同期ワークフロー、非同期ワークフローおよび強制同期ワークフロー

ワークフロー・プロセスの設計時に、同期プロセスとして実行するか、非同期プロセスとして実行するかまたは強制同期プロセスとして実行するかを決定する必要があります。プロセスの設計は、ワークフロー・エンジンからプロセスを開始したコール元のアプリケーションに制御が戻るまでの所要時間に影響します。

『Oracle Workflow APIリファレンス』のワークフロー・エンジンの概要の概要に関する項と、同期プロセス、非同期プロセスおよび強制同期プロセスに関する項を参照してください。

項目属性

項目タイプ属性はグローバル変数として機能し、ワークフロー・プロセス内のすべてのアクティビティから参照または更新できます。 項目属性の数は、作業項目の開始時間に直接影響します。新しい作業項目が作成されると、デフォルトでワークフロー・エンジンによってすべての項目属性のランタイム・コピーが作成されるためです。このため、項目属性の数は最小限に抑える必要があります。

必要な場合は、ワークフロー・エンジンでは必要時にのみ項目属性のランタイム・コピーを作成するように指定して、プロセスのパフォーマンスを向上させることができます。 そのためには、最上位レベルの実行可能プロセス・アクティビティに対して、#ONDEMANDATTRという特殊なアクティビティ属性を定義します。 この場合、ワークフロー・エンジンでは、プロセスにより項目属性の値が設定される場合にのみ、その項目属性のランタイム・コピーが作成されます。 それ以外の場合は、単に設計時ワークフロー定義で項目属性に対して指定されたデフォルト値が参照されます。 『Oracle Workflow開発者ガイド』の#ONDEMANDATTR属性に関する項を参照してください。

項目属性は、次の目的で使用します。

項目属性は、静的値(データベースにない値)を参照するため、値を同期する必要はありません(ただし、主キーの値は変わりません)。表内のすべての列を項目属性として実装しないでください。

『Oracle Workflow開発者ガイド』の項目タイプ属性に関する項、および項目タイプまたはアクティビティ属性の定義に関する項を参照してください。

次の項目属性タイプを使用すると、必要な属性の数を減らすことができます。

『Oracle Workflow開発者ガイド』の属性タイプに関する項を参照してください。

複数の項目属性が作成される場合やワークフローの処理中に複数の項目属性値が設定される場合は、ワークフロー・エンジンAPIのAdd Item AttributeおよびSet Item Attributeの配列(AddItemAttributeArrayとSetItemAttributeArray)を使用します。これらのAPIを使用すると、ワークフロー・エンジンAPIのコール数が大幅に減少し、バッチ処理中のパフォーマンスが大きく向上します。『Oracle Workflow APIリファレンス』のAddItemAttributeArrayに関する項およびSetItemAttributeArrayに関する項を参照してください。

メッセージ属性

パフォーマンスを向上させるには、メッセージ属性の数を最小限に抑える必要があります。グループの繰り返しなどのために行数が異なるメッセージの場合は、行ごとに項目属性およびメッセージ属性(LINE_INFO1、LINE_INFO2など)を作成しません。かわりに、「文書」タイプの項目属性およびメッセージ属性を使用して行を結合してください。

『Oracle Workflow開発者ガイド』の属性タイプに関する項、送信および応答メッセージ属性に関する項、メッセージ属性の定義に関する項を参照してください。

サブプロセス

ワークフロー・プロセスを設計するときに、いくつかのアクティビティを1つのプロセス・アクティビティにまとめて、メイン・プロセス内のサブプロセスとして表すことができます。サブプロセスを適切に使用すると、ワークフロー・ダイアグラムがわかりやすくなり、ワークフローのモニタリングと管理が容易になります。ただし、サブプロセスを使用すると、ワークフロー表に追加のDML操作や追加のステータス情報が格納されます。このため、機能面の利点がない場合は不必要にサブプロセスを使用しないでください。

たとえば、次の「プロセス1」と「プロセス2」は、両方とも「関数1」という関数を実行するため、機能的には同じですが、ワークフロー表に格納されるステータス行の数が異なります。

「プロセス1」には、「開始」アクティビティ、「サブプロセス」アクティビティおよび「終了」アクティビティが含まれます。サブプロセスには、「開始」アクティビティ、「関数1」アクティビティおよび「終了」アクティビティが含まれます。このプロセスでは、7つのステータス行がワークフロー表に格納されます。

サンプル・プロセス1

本文の説明内容に関するイメージ

「プロセス2」には、「開始」アクティビティ、「関数1」アクティビティおよび「終了」アクティビティが含まれます。このプロセスでは、4つのステータス行がワークフロー表に格納されます。

サンプル・プロセス2

本文の説明内容に関するイメージ

「プロセス1」のような設計では、より多くの行がワークフロー表に格納されるため、「プロセス2」の設計よりもワークフローのスループットが遅くなり、ワークフローのランタイム表をより頻繁にパージする必要があります。

注意: このガイドラインは、サブプロセスの使用を禁止するものではありません。すべてのサブプロセスを解除すると、ワークフロー・ダイアグラムがわかりにくくなり、管理しにくくなることがあります。ここでは、サブプロセスを不必要に使用すると、パフォーマンスが低下する可能性があることを説明しています。

『Oracle Workflow開発者ガイド』のプロセス・アクティビティに関する項およびプロセス・アクティビティの作成に関する項を参照してください。

アクティビティの遅延

オンライン・ユーザーの応答時間を最も簡単かつ効果的に向上させるには、関数アクティビティを遅延します。完了までに大量の処理リソースや時間が必要になるアクティビティを遅延できます。Oracle Workflowでは、このようなコストの高いアクティビティをバックグラウンド・タスクとして実行する補助エンジンを設定して、ワークフロー・エンジンの負荷とユーザーの応答時間を管理できます。このような場合、コストの高いアクティビティはワークフロー・エンジンによって遅延され、後でバックグラウンド・エンジンによって実行されます。

アクティビティが遅延すると、メインのワークフロー・エンジンは、次に使用可能なアクティビティに進むことができますが、これによりプロセスの別の並列する分岐が発生する可能性があります。実行可能なアクティビティがなくなると、ワークフロー・エンジンはコール元のアプリケーションにすぐに制御を返します。実行時間が短くなるため、ユーザーは処理が実行中であることを意識する必要がありません。

アクティビティを遅延するには、設計時にアクティビティのコストをデフォルトのしきい値コストより高く設定します。しきい値コストはPL/SQLパッケージ変数の1つで、デフォルト値は50/100秒です。遅延しないアクティビティのコストにはすべて、このしきい値より高い値を設定します。

ワークフロー・エンジンがしきい値より高いコストのアクティビティを実行時に検出すると、それらのスレッドを遅延してバックグラウンドに回します。バックグラウンド・エンジンは、そのプロセスを遅延として識別し、実行を続行します。

バックグラウンド・エンジンは、遅延アクティビティの他に、タイムアウトになったアクティビティと停止しているプロセスも処理します。バックグラウンド・エンジンは必要な数だけ実行できます。バックグラウンド・エンジンは、タイムアウトになったアクティビティをチェックし、遅延アクティビティを処理し、停止しているプロセスに対応するためにそれぞれ1つ以上必要です。少なくとも、タイムアウト/遅延アクティビティ用に1つ、停止しているプロセス用に1つは設定する必要があります。

通常、停止しているプロセスをチェックするバックグラウンド・エンジンは、遅延アクティビティを処理するバックグラウンド・エンジンと別個に設定する必要があります。ただし、実行頻度は少なくてもかまいません(通常は、1日に1度以下)。システムの負荷が低いときにバックグラウンド・エンジンを実行して、停止しているプロセスをチェックします。

『Oracle Workflow APIリファレンス』の遅延処理に関する項、『Oracle Workflow開発者ガイド』のアクティビティ・コストに関する項、「バックグラウンドのワークフロー・エンジンの設定」および「エンジンのしきい値の設定」を参照してください。

パフォーマンス改善のためのランタイム・データの管理

ワークフロー・エンジンが強制同期プロセス以外のワークフローを実行すると、ステータス情報がランタイム表に格納されます。これらの表に格納されるデータの量は、実行されるワークフローの複雑さと数に応じて増加します。

大量のランタイム・データに関連するパフォーマンスの問題は、次の方法で解決できます。

パフォーマンス改善のためのパーティション化

大きな表や索引を使用するときの主要な問題を解決するには、パーティションと呼ばれる管理しやすい小さな単位に表を分割(パーティション化)します。パーティション表にアクセスするためにSQL問合せとDML文を変更する必要はありませんが、パーティションを定義すると、DDL文は表または索引全体ではなく、個々のパーティションにアクセスして操作できるようになります。このように、パーティション化により、大きなデータベース・オブジェクトの管理を簡素化できます。また、パーティション化はアプリケーションに対して完全に透過的です。

スクリプトを実行して、ランタイム・ステータス・データを格納する特定のワークフロー表をパーティション化することもできます。パフォーマンス改善のため、このステップを実行することをお薦めします。スクリプトを実行する前に、パーティション化する表をバックアップし、スクリプトの実行に必要な空き領域と時間を確保していることを確認してください。 スクリプト名はwfupartb.sqlで、$FND_TOPのadmin/sqlサブディレクトリに格納されています。「ワークフロー表のパーティション化」を参照してください。

パフォーマンス改善のためのパージ

Workflow PURGE APIを使用して、完了作業項目に関する不要なランタイム・データ、作業項目に関連付けられていない不要なランタイム情報、および不要な設計情報を削除できます。このような廃止データをシステムから定期的に削除することで、パフォーマンスが向上します。Workflow PURGE APIは、WF_PURGEというPL/SQLパッケージに定義されています。

ランタイム・データをパージできるかどうかは、項目タイプの維持タイプによって決まります。維持タイプにより、項目タイプのインスタンスごとに維持される実行ステータス情報の期間を制御します。

また、特定の項目タイプのランタイム・データを削除する場合は、管理スクリプトwfrmtype.sqlを使用します。このスクリプトを実行すると、削除する項目タイプを有効な値リストから選択するように求めるプロンプトが表示されます。次に、指定した項目タイプに関連したすべてのランタイム・データを削除するか、または指定した項目タイプの完了したアクティビティと項目のランタイム・データのみ削除するかが確認されます。「Wfrmtype.sql」を参照してください。

関連項目

『Oracle Workflow APIリファレンス』のWorkflow PURGE APIに関する項

『Oracle Workflow開発者ガイド』の維持タイプに関する項

ビジネス・イベント・システムのパフォーマンス管理

ビジネス・イベント・システムでは、サブスクリプション処理中のパフォーマンスを向上させるために、イベント、サブスクリプションおよびエージェントの定義がキャッシュされます。 キャッシュのデフォルトの最大サイズは50レコードです。 必要に応じて最大キャッシュ・サイズを大きくして、ビジネス・イベント・システムにより実行されるデータベース問合せ数を減らしたり、最大キャッシュ・サイズを小さくして、キャッシュに使用されるメモリーの量を減らすことができます。 「ビジネス・イベント・システムの最大キャッシュ・サイズの変更」を参照してください。

ビジネス・イベント・システム内でイベント・データ生成ファンクション、イベント・サブスクリプション・ルール・ファンクション、キュー・ハンドラ・エンキューAPIおよびキュー・ハンドラ・デキューAPIなどのカスタムPL/SQLファンクションを使用する場合、Oracle Workflowではこれらのファンクションのコールにデフォルトで動的SQLが使用されます。 ただし、Oracle Workflowでカスタム・ファンクションを静的にコールできるようにして、パフォーマンスを向上させることができます。 「カスタムPL/SQLファンクションに対する静的ファンクション・コールの有効化」を参照してください。