プログラムの設計をセグメント化または非セグメント化のどちらにするかを決定するときに、2 つの問題に注意する必要があります。
最初の問題は、競合リソースに対するトランザクションの効果です (ストレージやプロセッサー使用など)。2 番目の問題は、排他使用リソース (レコードとリカバリー可能データ・セット、リカバリー可能一時データ・キュー、エンキュー項目など) に対する効果です。
非セグメント化プログラムでは、同等のセグメント化プログラム内のトランザクションの合計より実行時間が長くなるため、ストレージに対する影響が大きくなります。ただし、トランザクションごとに 1 つではなく、1 つのみのプログラムが開始されるため、プロセッサー・オーバーヘッドは小さくなります。
非セグメント化プログラムでは、同等のセグメント化プログラムとは異なり、リソースの排他使用を保持する時間が長くなります。この理由で、セグメント化プログラムでは応答時間が速くなりますが、リカバリーおよび保全性に関する考慮事項のため、非セグメント化プログラムを好む場合があります。
呼び出し側プログラムに書式がある場合、または converse 実行中にデータベースをロックする必要がある場合は、非セグメント化モードで実行するようにプログラムを設計する必要があります。
次のリストには、セグメント化プログラムと非セグメント化プログラムに関する考慮事項が含まれています。
- セグメント化モードでは、CICS® がトランザクションの開始と終了に費やす時間が長くなるため、使用するプロセッサー時間が長くなります。
- 非セグメント化モードでは、ユーザーの思考時間でもトランザクションはアクティブであるため、使用する仮想ストレージが多くなります。ただし、動的トランザクション・ルーティングを使用することにより、CICS は、最初の領域が制約されると自動的に次の領域を開始してトランザクションを次の領域に送ることができます。
- 非セグメント化モードでは、ユーザーの思考時間にデータベースのロックなどの他のリソースを使用することもできます。(これは、システム変数 converseVar.commitOnConverse を 1 に設定することにより解決できます。)
- 非セグメント化トランザクションでは、多数の小さいトランザクションではなく少数の大きいトランザクションを使用するため、CICS のアカウンティングとセキュリティーの細分度が小さくなります。
- 多数の非セグメント化トランザクションがあると、CICS シャットダウンが困難になる可能性があります。ユーザーが非セグメント化トランザクションの途中で作業を中断している可能性があるため、シャットダウンの前にトランザクションの終了が必要になる可能性があります。(これは、指定された時間を経過してもユーザーが Enter を押さない場合にトランザクションをタイムアウトさせることにより解決できます。)
- 非セグメント化プログラムでは、以下を行うことができるため、プログラミングが簡単になる可能性があります。
- 呼び出し先プログラムでテキスト書式を使用する。
- converse にわたってロックとカーソル位置をデータベースに保持する。
- IMS™ 環境では、セグメント化プログラムのみを生成できます。
ストレージ競合が問題ではないシステムでプログラムを実行する場合、セグメント化モードでの実行と非セグメント化モードでの実行の間の良い妥協点は、converseVar.commitOnConverse 変数を 1 に設定して非セグメント化モードで実行することです。このアプローチを使用すると、メインプログラムからの各 converse で強制的にコミットし、非セグメント化モードの良好なパフォーマンス特性を示しますが、ユーザーの思考時間中はファイルやデータベース・リソースを保持しません。