Page History
[ |../../index.htm#lansa/set_session_value.htm]
現在地:
| Anchor | ||||
|---|---|---|---|---|
|
注意: 9.1 組み込み関数の規則 &<a href="bifcat4_01.htm"&>利用オプション&</a&>利用オプション
この組み込み関数を使用すると、Visual LANSAのセッション値を実行アプリケーションによって動的に変更することができます。
セッション値への変更は、そのセッション(X_RUNコマンド)が実行を完了すると無効になることに注意してください。
詳細は、&<a href="depb3_0005.htm"&>「標準X_RUNパラメータ」&</a&>を参照してください。 「標準X_RUNパラメータ」を参照してください。
引数
番号 | タイプ | 必須/任意 | 記述 | 最小長 | 最大長 | 最小小数桁数 | 最大小数桁数 |
1 | A | 必須 | 設定またはリセットされるセッション値の名前。現在、この組み込み関数によって次のセッション値を設定またはリセットすることができます。 | 1 | 50 |
|
|
2 | A | 必須 | セッション値が設定またはリセットされる値。詳細については、以下の「技術上の注記」を参照してください。 | 1 | 256 |
|
|
...
- このセッション値は、このジョブ(現在実行中のジョブ)から投入されたジョブの待ち行列の優先順位を制御するために使用します。x_run環境が起動している場合、このデフォルトは5に設定されます。この値は、IBM iのバッチ・ジョブ待ち行列とサブシステムのエミュレーションでのみ使用してください。また、これ以外のコンテキストで使用しても意味がありません。
- JOBPTY =に指定する値は、0 -> 9の範囲の整数値である必要があります。最も低いJOBPTY値で投入されたジョブが、エミュレートされたジョブ待ち行列から最初に実行されます。 JOBPTY値が等しいジョブは、到着順に実行されます。
- この機能を使用する前に、『Visual LANSA アプリケーションの配布ガイド』の&<a href="depb7_0005.htm"&>「IBM i ジョブ待ち行列エミュレーション」&</a&>をお読みください。「IBM i ジョブ待ち行列エミュレーション」をお読みください。
セッション値CONNECT_PARTITION=に関する技術上の注記
...
- セッション値DBMS_OPTIMIZEは、大量または複雑なDBMSトランザクションを最適化する方法を指定するために使用します。 このオプションを適切に使用することによって、大量または複雑なDBMSアクティビティのパフォーマンスを大幅に向上することができます。 この値パラメータは、大文字で指定する必要があり、次のように設定されます。 DBMS_OPTIMIZEの使用法は、例をもとに説明します。
BEGIN_SYNC_nnnn
複雑なDBMSアクティビティの開始を指定し、DBMS最適化モードをオンに切り替えます。「ハード」コミットは、"nnnn"回の「ソフト」同期ポイントの呼び出しごとに実行されます。
SYNC_POINT
複雑なDBMSアクティビティの「ソフト」同期ポイントを指定します。ソフト同期ポイントは、「最適化された」コミット制御の境界に相当します。
END_SYNC
複雑なDBMSアクティビティの終了を指定し、DBMS最適化モードをオフに切り替えます。
次の単純なRDMLファンクションについて考えてみます。
begin_loop from(1) to(2000)
insert fields(......) to_file(testfile)
end_loop
通常の環境では、このファンクションは自動コミットを使用し、1回の挿入ごとにDBMSコミット操作を実行します。
通常、多くのDBMSコミット操作は非常に低速です。コミットは、このようなアプリケーション(すなわち、同じ操作を5回や10回ではなく数千回も繰り返すアプリケーション)のパフォーマンスに非常に大きく影響する可能性があります。
ファンクションを次のように変更します。
use set_session_value ( DBMS_OPTIMIZE BEGIN_SYNC_100 )
begin_loop from(1) to(2000)
insert fields(......) to_file(testfile)
use set_session_value ( DBMS_OPTIMIZE SYNC_POINT )
end_loop
use set_session_value ( DBMS_OPTIMIZE END_SYNC )
これによって、このファンクションは以前より速く実行される可能性があります。DBMS_OPTIMIZE操作によって、基となるOAM(オブジェクト・アクセス・モジュール)がトランザクションをより適切に解析し、それによってトランザクションを最適化できるようになります。
パフォーマンスが向上する最大の理由は、「ソフト」SYNC_POINTが100回実行されるごとに、「ハード」、つまり実際のDBMSコミット操作が発行されるためです。このため、BEGIN_SYNC_100という値が使用されています。これによって、DBMSトランザクション全体の処理が速くなります。
もう1つの例として、次の「バッチ」形式のファンクションを挙げます。
select fields(.....) from_file(customer) where(.......)
select fields(.....) from_file(orders) with_key(customer)
call *direct calculate
select fields(.....) from_file(items) with_key(orderno)
update fields(.....) in_file(items)
endselect
update fields(.....) in_file(orders)
endselect
endselect
このバッチ形式のプログラムを次のように変更することによって、そのパフォーマンスを向上させることができます。
use set_session_value ( DBMS_OPTIMIZE BEGIN_SYNC_20 )
select fields(.....) from_file(customer) where(.......)
select fields(.....) from_file(orders) with_key(customer)
call *direct calculate
select fields(.....) from_file(items) with_key(orderno)
update fields(.....) in_file(items)
endselect
update fields(.....) in_file(orders)
endselect
use set_session_value ( DBMS_OPTIMIZE SYNC_POINT ) endselect
use set_session_value ( DBMS_OPTIMIZE END_SYNC )
次に、DBMS_OPTIMIZEを使用するときに理解しておく必要がある項目および従う必要があるルールを示します。
BEGIN_SYNC_nnnn - 大文字で指定する必要があります。
- BEGIN_SYNC_nnnn が現在のジョブですでにアクティブな場合、異常終了します。BEGIN_SYNC_nnnn操作をネストすることはできません。
- 指定された"nnnn"値に同期「トリガー」を設定します。"nnnn"は、1から1000までの有効な整数でなければなりません。 "nnnn"を1に設定すると、パフォーマンスが向上する可能性は低くなります。それは、SYNC_POINTが実行されるごとにコミット操作が発行されるためです。
- 同期ポイントの「カウンター」をゼロに設定します。
- DBMS 最適化モードをオンに切り替えます。
- すべての「自動コミット」オプションをオフに切り替えます。すべてのDBMSテーブルは、そのテーブルの定義に関係なく、完全に手動コミットによって制御されます。手動コミットは、次の場合に発行されます。
- · SYNC SYNC_POINT がトリガー・レベルに到達した場合
- · END END_SYNC が実行された場合
- · RDML RDML ファンクションによってCOMMIT操作が発行された場合
- DBMS トランザクションの正常終了を示すために必ず実行されるEND_SYNC操作が必要です。
- コミット制御の境界のポイントを指定するSYNC_POINT操作を指定することができます。SYNC_POINTが指定されていない場合、END_SYNC操作が1つのコミット制御の境界として機能します。
- 通常、"nnnn" の値が大きくなるほど、パフォーマンスが向上します(DBMSおよびジャーナルの制限内で)。ただし、500を超える値は一般的ではありません。値が大きくなるほど、保持/ロックされるシステム・リソースが増え、ロールバック・イベントが発生したときに失われるデータの量が増加します。
- コミット境界を確定するため、およびパフォーマンスを最適化するために、単純かつ適切な方法でSYNC_POINTとEND_SYNCを使用してください。BEGIN_SYNC、SYNC_POINT、およびEND_SYNC操作を複数のファンクションにまたがって、複雑な呼び出しスタックで使用することは避けてください。すべての操作を1つのファンクションに限定し、単純で適切に区切られた境界を維持するようにしてください。
- 複数の異なるRDMLファンクションとファンクション呼び出しが伴う複雑な呼び出しスタックで使用しないでください。この主な理由は、呼び出されたファンクションがCOMMITを発行(またはコミットが実行される原因となるアクションを実行)することによって、このオプションによって得ることができるパフォーマンスの利点が失われる可能性が高いためです。
- LANSA SuperServerモードで使用した場合、効果は何もありません。
- 16 個以上のテーブルに同時にアクセスするジョブでは、この機能を使用しないことをお勧めします。
...
LANSA SuperServerモードで使用された場合でも、コミットを発行します。
[ |../../index.htm#lansa/set_session_value.htm]