記事
· 2024年12月24日 3m read

Interoperability(Ensemble)の大量にたまったイベントログやメッセージをAPIを利用して削除する方法

これは InterSystems FAQ サイトの記事です。

イベントログの削除には、Ens.Util.LogクラスのPurge()メソッドを使用します。実行時以下の引数を指定します。

第1引数:削除数(参照渡し)

第2引数:保持日数(デフォルト7)

 

メッセージの削除には、2種類の方法があります。

1) 2022.1.2以降の導入されたマルチプロセスで削除する方法

Ens.Ens.Util.MessagePurgeクラスのPurge()メソッドを使用します。実行時以下の引数を指定します。

第1引数:削除数(参照渡し)

第2引数:保持日数(デフォルト7)

第3引数:1を指定(Completeではないメッセージの削除を防止するための指定)

第4引数:メッセージボディも一緒に削除する場合は1を指定

第5引数:デフォルトは500(秒)が設定されていますが、大量のメッセージをパージするとクリアされたビットマップの最適化に時間を要して最適化が完了しない場合があるため、大量削除の場合は 10000000000など大きな値を指定します。

2) Ens.MessageHeaderクラスのPurge()メソッドを使用する方法。

実行時以下の引数を指定します。

第1引数:削除数(参照渡し)

第2引数:保持日数(デフォルト7)

第3引数:1を指定(Completeではないメッセージの削除を防止するための指定)

第4引数:メッセージボディも一緒に削除する場合は1を指定

 

上記パージ用メソッド実行時、ログ削除の内容もジャーナルに記録されますので、Purge()メソッド実行中プロセスのジャーナルファイルへの書き込みを無効にする設定を使用します。

※ジャーナルファイルへの書き込みが無効化されるのは、以下ユーティリティを実行しているプロセスのみのため、システム全体に影響はありません。

※注意※ ミラーリングを使用している環境でミラーデータベースへの更新ではこのジャーナル無効化の影響を受けず、ジャーナルが記録されますのでご注意ください。

以下実行例です。

//使用中プロセスのジャーナルファイルへの書き込み無効化
do DISABLE^%NOJRN
//イベントログを直近7日分を保持して削除
set st=##class(Ens.Util.Log).Purge(.cnt,7,1)
//削除数確認
write cnt,!

//マルチスレッド対応のメッセージヘッダとボディを直近7日分を保持して削除する
set st=##class(Ens.Util.MessagePurge).Purge(.cnt2,7,1,1,10000000000)
//削除数確認
write cnt2,!

//メッセージヘッダとボディを直近7日間分を保持して削除
set st=##class(Ens.MessageHeader).Purge(.cnt3,7,1,1)
//削除数確認
write cnt3,!

//使用中プロセスのジャーナルファイルへの書き込み有効化
do ENABLE^%NOJRN
ディスカッション (0)1
続けるにはログインするか新規登録を行ってください