TSAUX

タスクが一時記憶域に対して無条件要求を行い、その要求が補助記憶域の不足が原因で処理されなかった場合、このタスクは強制的にTSAUXの待機状態になります。このタスクは、NOSUSPENDを指定せず、NOSPACE条件を処理するコードも含めずにEXEC CICS WRITEQ TSコマンドを発行しました。REWRITEオプションを指定したかどうかは、どちらでも問題ありません。このタスクに対して、CEDA DEFINE TRANSACTIONコマンドにSPURGE(YES)が定義されていて、デッドロック タイムアウト インターバルとして0以外が指定されている場合、その指定時間が経過したときにタスクがパージされます。それ以外の場合は、タスクはパージされず、永久に停止したままになります。

一時記憶域に対する条件付きWRITEQ TS要求を実行するタスクは(NOSUSPENDを指定した場合)、その要求を処理できない場合でも一時停止状態にはなりません。要求した補助記憶域を利用できない場合は、例外応答が返されます。ただし、別の理由でタスクが一時停止状態になる可能性があります。たとえば、CICSで記憶域不足が生じている場合、一時記憶域プログラム自体が、GETMAINの発行後に一時停止状態になることがあります。

無条件WRITEQ TS要求を発行したタスクが資源タイプTSAUXを待機して一時停止状態になる主な理由としては、次の2つが考えられます。

  1.  タスクが大きすぎる一時記憶域を要求した。

  2. タスクが要求した一時記憶域の容量はそれほど大きくないが、システム上で利用可能な容量がそれよりも小さい。この場合、補助記憶域の空き容量がなくなってきている可能性があります。また、大容量の補助記憶域が空いていても、記憶域があまりに細かく分断されているために、要求を処理できない場合があります。

まず、CICSシステム ダンプを作成し、フォーマット キーワードSMを使用してダンプをフォーマット化し、一時記憶域の制御ブロックを調べてください。必要に応じて、フォーマット化キーワードSMとKEも含めて、これらのコンポーネントの要約も参照してください。ダンプから前述の事態が実際に発生しているかどうかを分析する方法については、以下のセクションを参照してください。

タスクが大容量の一時記憶域を要求しているかどうか

タスクが一時停止状態になった場合、そのタスクが大きすぎる一時記憶域を要求していることが原因であるかどうかを確認するには、一時記憶域の一時停止待ち行列の要約を調べてください。この要約には、その他の情報と併せて、記憶域に対する要求を処理できないために一時停止状態になっているタスクごとに、要求されたバイト数が表示されます。この情報から、どのタスクが、大きすぎる一時記憶域の要求を発行したかがわかります。

一時停止状態のタスクが妥当な大きさの一時記憶域を要求していた場合は、一時記憶域の不足状態になっていないかどうかを確認する必要があります。

一時記憶域が不足しているかどうか

タスクが要求している記憶域の大きさが妥当な場合は、システム上の未割り振りスペースが不足していることが考えられます。

これが一時停止の原因かどうかを確認するには、フォーマット化したダンプで一時記憶域の要約情報を調べてください。現在の空きスペースが非常に小さい場合、これが、タスクが要求した一時記憶域を取得できない原因と考えられます。この場合は、データセットの2次エクステントを定義することを検討してください。

また、一時記憶域要求の要約も調べてください。タスクが極端に多くのWRITEQ TS要求を行っていた場合、ループが発生している可能性があります。ループ タスクはWRITE TS要求を繰り返し発行するため、各要求は妥当な大きさの記憶域を対象としていても、全体では非常に大きな要求をすることになります。ループが生じていた場合は、『CICS Problem Determination Guide』の「Dealing with loops」を参照してください。

タスクが要求した記憶域の大きさが妥当で、システムにも十分な未割り振りの一時記憶域がある場合は、次に、未割り振り記憶域の分断がWRITE TS要求が失敗する原因かどうかを確認する必要があります。

未記憶域の分断が原因でWRITEQ TS要求が失敗しているかどうか

未割り振りの一時記憶域が分断されているために、WRITE TSが失敗しているかどうかを確認するには、ダンプ中の一時記憶域サマリーを調べてください。

タスクが資源タイプTSAUXを待機して一時停止状態である場合、サマリー内の以下のフィールドを調べてください。

  • データセット内の制御インターバル数

  • 現在使用中の制御インターバル数

  • 1回の制御インターバルにつき使用可能なバイト数

4Kの制御インターバルの場合、1回の制御インターバルにつき使用可能なバイト数は4032です。

タスクが1回の制御インターバルにつき使用可能なバイト数(28バイトのレコード ヘッダーの長さも含む)以下のレコードを書き込もうとしている場合、要求を満たすために必要な連続するスペースを持つ制御インターバルがないことを意味します。

タスクが1回の制御インターバルにつき使用可能なバイト数より長いレコードを書き込もうとしている場合、CICSはこのバイト数と同じ長さのセクションにレコードを分割し、各セクションを空の制御インターバルに保存しようとします。レコードの残りの部分は、それに対応可能な連続するスペースのある制御インターバルに保存されます。タスクが1回の制御インターバルにつき使用可能なバイト数より長いレコードを書き込もうとしたあとで、資源タイプTSAUXを待機している状態の場合、以下のいずれかが発生しています。

  • すべてのセクションを保存可能な空の制御インターバルが不足している

      (データセット内の制御インターバル - 使用中の制御インターバル) < (レコード長/1回の制御インターバルにつき使用可能なバイト数)

  • 残りを保存可能な連続スペースのある制御インターバルがない