メッセージ・サイズに関連した MQ 属性および MFT プロパティーを設定するためのガイダンス

IBM® MQ 属性および Managed File Transfer プロパティーを変更して、さまざまなサイズのメッセージの読み取りまたは書き込み時の Managed File Transfer の動作に影響を与えることができます。

ソース・キューから読み取るメッセージのサイズ、または宛先キューに書き込むメッセージのサイズが 1048576 バイト (1 MB) を超える場合は、Managed File Transfer AgentプロパティーmaxInputOutputMessageLengthの値を、読み取りまたは書き込みを行う最大メッセージ・サイズ以上の値に増やす必要があります。

ソース・キューのメッセージが 1048576 バイトより大きい場合は、ソース・エージェントでmaxInputOutputMessageLengthプロパティーを設定する必要があります。 宛先キューのメッセージが 1048576 バイトより大きい場合は、宛先エージェントでmaxInputOutputMessageLengthプロパティーを設定する必要があります。 maxInputOutputMessageLengthプロパティーについて詳しくは、拡張エージェント・プロパティー: ファイルからメッセージ、およびメッセージからファイルへのエージェントを参照してください。

  • エージェントが書き込みまたは読み取りを行うキューがエージェント・キュー・マネージャーに対してローカルである場合は、IBM MQキュー・マネージャー、キュー、およびチャネルのMAXMSGL属性を変更する必要がある場合があります。

    ソース・キューまたは宛先キューの最大メッセージ・サイズの値が、maxInputOutputMessageLengthエージェント・プロパティーの値以上であることを確認してください。

    以下の各 IBM MQ 属性の値 (バイト単位) を確認します。
    • エージェント・キュー・マネージャーの最大メッセージ・サイズ
    • SYSTEM.FTE.STATE.agent_name キューの最大メッセージ・サイズ
    • クライアント・チャネルの最大メッセージ・サイズ (使用中のエージェントがクライアント・モードでキュー・マネージャーに接続している場合)
    次の計算の結果以上であることを確認します。

    (3 * maxInputOutputMessageLength) + 1048576 の値

    (この計算は、1 つの状態メッセージに 3 つのチェックポイントを保管でき、各チェックポイントはデータのメッセージ量の最大サイズまでバッファーに入れる必要があるかもしれない、という事実から導き出されたものです。)

  • エージェントの書き込み先のキューがリモート・キューである場合は、IBM MQキュー・マネージャー、キュー、およびチャネルのMAXMSGL属性の変更が必要になることがあります。

    以下のIBM MQ属性のそれぞれの値が、maxInputOutputMessageLengthエージェント・プロパティーの値以上であることを確認します。
    • エージェント・キュー・マネージャーのリモート・キュー・マネージャー伝送キューの最大メッセージ・サイズ
    • エージェント・キュー・マネージャーからリモート・キュー・マネージャーへのチャネルの最大メッセージ・サイズ
    • リモート・キュー・マネージャーの宛先キューの最大メッセージ・サイズ
    • リモート・キュー・マネージャーの最大メッセージ・サイズ
    以下の各 IBM MQ 属性の値 (バイト単位) を確認します。
    • エージェント・キュー・マネージャーの最大メッセージ・サイズ
    • SYSTEM.FTE.STATE.agent_name キューの最大メッセージ・サイズ
    • クライアント・チャネルの最大メッセージ・サイズ (使用中のエージェントがクライアント・モードでキュー・マネージャーに接続している場合)
    次の計算の結果以上であることを確認します。

    (3 * maxInputOutputMessageLength) + 1048576 の値

    この計算は、1 つの状態メッセージに 3 つのチェックポイントを保管でき、各チェックポイントがメッセージ・データの最大サイズまでバッファーに入れなければならない場合があるという事実から派生したものです。

上記のプロパティーのいずれかの値を超えた場合、エージェントは停止し、次のエラーがエージェント・イベント・ログに記録されます。
BFGUT0002E: An internal error has occurred. Product failure data was captured in file 
"FFDC.FTE.20100928170828514.8172766022149157013.log". 
BFGSS0025E: An internal error has occurred.  The exception is: cc=2 rc=2010 op=put - MQPUT to SYSTEM.FTE.STATE.agent_name
BFGAG0061E: The agent ended abnormally 
エージェント・イベント・ログのこのメッセージには、以下の IBM MQ 理由コードが含まれている可能性があります。
  • rc=2010この理由コードは MQRC_DATA_LENGTH_ERROR にマップされ、クライアント・チャネルの最大メッセージ・サイズの値を超えたことを示します。 この問題を解決するには、エージェント・キュー・マネージャーのクライアント・チャネルの最大メッセージ・サイズが次の計算の結果以上であることを確認します。
    3 * (maxInputOutputMessageLength) + 1048576
  • rc=2030この理由コードは MQRC_MSG_TOO_BIG_FOR_Q にマップされ、SYSTEM.FTE.STATE.agent_name キューの最大メッセージ・サイズの値を超えたことを示します。 この問題を解決するには、SYSTEM.FTE.STATE.agent_name キューの最大メッセージ・サイズが次の計算の結果以上であることを確認します。
    3 * (maxInputOutputMessageLength) + 1048576
  • rc=2031この理由コードは MQRC_MSG_TOO_BIG_FOR_Q_MGR にマップされ、エージェント・キュー・マネージャーの最大メッセージ・サイズの値を超えたことを示します。 この問題を解決するには、エージェント・キュー・マネージャーの最大メッセージ・サイズが次の計算の結果以上であることを確認します。
    3 * (maxInputOutputMessageLength) + 1048576

小さいメッセージを多数転送する場合

エージェントがキューとの間で読み書きするメッセージの平均サイズが 1310 バイト未満であり、エージェントが 10000 を超えるメッセージを読み書きする場合、キュー・マネージャーの非コミット・メッセージの最大数属性を大きくするか、チェックポイント間隔のデータ量を削減する必要があります。

エージェントがキューとの間でメッセージを読み書きする場合、対応する GET または PUT は、まとめてトランザクションにグループ化されます。 トランザクション内の GET または PUT の数は、チェックポイント間隔内のすべてのデータを処理するために必要な数によって決定されます。 チェックポイント間隔のデータの概算の量は、次の計算を使用して、エージェント・プロパティーから決定されます。
Checkpoint interval data size (in bytes) = agentCheckpointInterval  * agentFrameSize *
                                           agentWindowSize  * agentChunkSize.
デフォルトのチェックポイント・データ・サイズは、1 * 5 * 10 * 262144 バイト = 13107200 バイト (12.5 MB) です。 キュー・マネージャーがサポートするトランザクション内のコミットされていないメッセージの最大数は、MaxUncommittedMsgsキュー・マネージャー属性によって制御されます。 この属性のデフォルト値は 10000 メッセージです。 平均メッセージ・サイズが約 1310 バイトより小さい場合、10000 を超すメッセージが書き込まれると、非コミット・メッセージのデフォルトの最大数を超えます。
MaxUncommittedMsgsの制限を超えると、エージェント・イベント・ログに以下のエラーが記録されてエージェントが停止します。
BFGSS0024E: The agent has received a reason code of '2024' from the message queue interface (MQI). 
The agent cannot continue processing and will now end.
BFGAG0139I: The agent has suspended its current transfers and is now stopping.
理由コード 2024 は MQRC_SYNCPOINT_LIMIT_REACHED に対応します。
この問題を解決するには、以下のいずれかの処置を行います。
  • キューとの間で読み取りまたは書き込みを行うエージェントが接続するキュー・マネージャーのMaxUncommittedMsgsキュー・マネージャー属性の値を増やします。 MaxUncommittedMsgs(MQLONG)を参照のこと。
  • チェックポイント間隔のデータ量を削減します。 削減のためには、以下の 1 つ以上のエージェント・プロパティーの値を減らします。
    • agentCheckpointInterval
    • agentFrameSize
    • agentWindowSize
    • agentChunkSize
    これらのエージェント・プロパティーについては、 拡張エージェント・プロパティーを参照してください

メッセージを永続的にキューに書き込む場合

メッセージをキューに転送し、永続的にキューに書き込む場合は、チェックポイント間隔のすべてのデータをログに記録できるように、キュー・マネージャーのログ・ファイル・スペースのサイズを増やさなければならない場合があります。

キュー・マネージャーのログ・ファイル・スペースを超えた場合、エージェントは停止し、次のエラーがエージェント・イベント・ログに記録されます。
BFGSS0024E: The agent has received a reason code of '2102' from the message queue interface (MQI). 
The agent cannot continue processing and will now end.
BFGAG0062E: The agent has received MQI reason code '2102'.  The agent cannot continue processing and will now end.
BFGAG0061E: The agent ended abnormally
理由コード '2102' は MQRC_RESOURCE_PROBLEM に対応します。

この問題を解決するには、宛先エージェント・キュー・マネージャーのログ・ファイル・スペースのサイズを増やします。