Cosminexus V9 アプリケーションサーバ Cosminexus Reliable Messaging

[目次][用語][索引][前へ][次へ]

2.3.4 メッセージの削除

Reliable Messagingは,アプリケーションによるメッセージの取り出しなどで不要になったキュー内のメッセージを削除します。

<この項の構成>
(1) メッセージの削除方法
(2) キューの種類と利用できる削除方法

(1) メッセージの削除方法

メッセージを削除する方法には,遅延削除と即時削除の二つ方法があります。それぞれの方法について説明します。

(a) 遅延削除

遅延削除は,メッセージが不要になった時点で削除せず配信済みの状態にしておき,RMSweepTimerIntervalプロパティ指定値の間隔で一括に削除する方法です。遅延削除はメッセージの取り出しの延長でメッセージを削除しないため,即時削除よりもスループットが優れる場合があります。

なお,非永続リソースアダプタの場合,遅延削除は利用できません。

遅延削除を利用したメッセージの削除の概要を次の図に示します。

図2-16 遅延削除を利用したメッセージの削除の概要

[図データ]

永続キューで遅延削除を使用する場合の注意事項
永続キューで遅延削除を使用する場合,以下に注意する必要があります。
  • 遅延削除処理中1にDB側に高負荷がかかっていないか
  • RMSweepTimerIntervalの値
  • HiRDBクライアント環境変数「PDCWAITTIME」の値(HiRDBを使用する場合)
これは運用上,以下の問題が発生するのを防止するためです。

【問題】
キュー内の遅延削除対象のメッセージが削除されず,滞留し続ける。滞留が発生した場合,永続キューへのメッセージ送受信処理のスループットが低下する可能性がある2

【原因】
  • 遅延削除対象のメッセージが滞留し続ける問題について
    多量のメッセージを一括削除する場合,削除実行時にDB側で多量の行削除が行われます。
    このときDB側に一時的に高負荷がかかり,遅延削除のDB更新完了に時間がかかる場合があります。DB更新完了に時間が掛かることにより,タイムアウトし,ロールバックが行われると,メッセージが削除されずキュー内に遅延削除対象メッセージが滞留することとなります3
    更に次回以降の遅延削除処理でも,前回の遅延削除で削除できなかったメッセージと新しく削除対象となるメッセージが削除対象となるため,再度タイムアウトが発生し,メッセージの削除ができない可能性が高く,その結果削除対象のメッセージが滞留し続けることとなります。
  • 永続キューへのメッセージ送受信処理のスループットが低下する問題について
    遅延削除対象のメッセージが滞留し続ける場合,遅延削除処理中にはDB側に高負荷がかかります。そのため,遅延削除処理中に永続キューに対するメッセージ送受信を行うと,送受信のDB更新完了に時間がかかる可能性があり,送受信処理のスループットが低下する可能性があります。
    上記の問題を発生させないためには,DBサーバへ高負荷が発生しないように,RMSweepTimerIntervalをチューニングし,多量のメッセージが一括削除されないようにする必要があります4
    また,HiRDBを使用する場合,遅延削除処理でタイムアウトが発生しないように,HiRDBクライアント環境変数「PDCWAITTIME」の値をチューニングする必要があります5
    ただしRMSweepTimerIntervalの値を短くし,プロパティに指定できる最小値を指定しても問題が発生する場合は,即時削除の使用を推奨します。

注※1
遅延削除処理実行中かどうかはDBのSQLトレースより確認できます。
以下に,Reliable Messagingが遅延削除で発行する削除SQLを示します。
DELETE FROM <DBへの接続ユーザ名>.<RMSystemNameプロパティ指定値>_MSG_<キュー名称> 
                                           WHERE GROUP_NAME=' ' AND DELETE_FLAG=?

注※2
キュー内の削除対象のメッセージ数,および未配信のメッセージ数が多いほど,またメッセージのサイズが大きいほど発生するリスクは高まります。

注※3
遅延削除処理がロールバックしたかどうかは,キュー内の遅延削除対象のメッセージ数が減少しているかで判断できます。「hrmlsqueコマンド」のオプションに-qオプションを指定し実行した後,「total message count」の値から「message count」の値を引いた値が遅延削除対象のメッセージ数となります。遅延削除対象のメッセージ数が減少しない場合は,遅延削除処理がロールバックしている可能性があります。

注※4
チューニングは本番稼動環境と同等の環境で行う必要があります。
更に遅延削除処理にかかる時間が最大となるように,以下の環境でチューニングを行う必要があります。
  • システムへの負荷(メッセージの送受信処理など)が最大となるような環境
  • キュー内の遅延削除対象となるメッセージ数,配信済み状態ではないメッセージ数,メッセージのサイズが最大となる環境

注※5
PDCWAITTIMEのチューニングについては,「3.4.1(2)(b) HiRDBの環境変数グループの登録」を参照してください。
(b) 即時削除

即時削除は,メッセージが不要になった時点で削除する方法です。そのため,遅延削除よりも一時的に使用するメモリの量を削減できます。即時削除は,アプリケーションによるメッセージの取り出しでのコミット時や,hrmdelmsgコマンド実行時のタイミングで実施されます。

ローカルキューまたはデッドメッセージキュー内のメッセージに即時削除を利用する場合,RMDeleteMessageImmediatelyプロパティにtrueを指定します。

即時削除を利用したメッセージの削除の概要を次の図に示します。

図2-17 即時削除を利用したメッセージの削除の概要

[図データ]

(2) キューの種類と利用できる削除方法

キューの種類によって利用できる削除方法が異なります。

キューの種類と利用できる削除方法を次の表に示します。

表2-2 キューの種類と利用できる削除方法

項番 キューの種類 遅延削除 即時削除
1 ローカルキュー ※1※2
2 転送キュー ×
3 受信用共用キュー ×
4 送信用共用キュー
5 デッドメッセージキュー ※1

(凡例)
○:利用できます。
×:利用できません。
−:対象外です。

注※1
RMDeleteMessageImmediatelyプロパティにtrueを指定した場合だけ即時削除を行います。

注※2
キュー間転送では,メッセージの順序を保証するため,アプリケーションによって受信されたメッセージでも削除できないことがあります。そのため,キュー間転送で受信したメッセージは即時削除を行いません。