【IRIS/Cache】ジャーナル(初級編)

本記事はグローバル・ジャーナル(初級編)についての解説になります。

※この記事は下記の方向けになります。
  • IRIS/Cacheの初心者の方
  • ジャーナルについてあまり詳しくない方

はじめに

ジャーナルと聞くと、2つのジャーナルを想定します(もっとあったらゴメンナサイ)。

  1. ライト・イメージ・ジャーナリング(WIJ)
  2. グローバル・ジャーナリング

①に関しては、「IRIS.WIJ or CACHE.WIJ」ファイルを使用して、メモリとDBの中間に居てDBへの書き込みを行っています。
これは別の記事で触れたいと思います。

本記事は、②のグローバル・ジャーナリング(以下ジャーナル)についての解説になります。

ジャーナルは、データベースで実行されるすべてのグローバル更新処理を記録します。
また、バックアップと組み合わせて、リストアする際に使用します。

つまり、システムが突然停止・クラッシュした際、ジャーナリングの設定が行われていれば、直前の状態を復旧する事が可能になります。
便利ですよね。

本記事では、ジャーナルの基本概念や仕組みを解説します。
適切な設定や活用方法を理解することで、データの保全性を高め、より安定したシステム運用が可能になります。

それでは、ジャーナルの解説を行います。

ジャーナルとは?

ジャーナルとは?
と聞かれると、簡単な回答としては「DBへの更新時ログ」になります。

ジャーナル・ファイル

ジャーナルの実態は、物理ファイル「ジャーナル・ファイル」に記録されます。
 ※グローバルではありません。

また、ジャーナル・ファイルに関しては、下記2種のファイルが存在しています。

項目ファイル名説明
ジャーナルファイルYYYYMMDD.NNNzDB更新時のログ
ジャーナル履歴ログmgr\journal.logジャーナルファイルを記録するログ

ジャーナル・ファイル

ファイルの名称は、デフォルトでは「YYYYMMDD.NNNz」となっています。
NNNの部分は、001~から項番が振られていきます。

ジャーナル・ファイルに一定量の書き込みが行われると、新しいジャーナル・ファイルが作成されます。※この時項番(NNN)が1増加します。

ジャーナル・ファイルは、タスクスケジュール「ジャーナルファイル削除」によって、定期的に削除されます。

ジャーナル履歴ログ

新しいジャーナル・ファイルが作成されると、ジャーナル履歴ログ「<install dir>mgr\journal.log」にジャーナルファイルの情報が書き込まれます。

Version=1.0
Host=WIN-NT0LPCE55LQ,d:\iris\mgr\
Edition=416,,2025-04-12 00:30:00
Base=53613547
<EndOfHeader>
,d:\iris\mgr\journal\test20250315.001,1-7,0D76C1B0-89BF-48A9-B5C3-8F9C8A54AF5A,FBB1E015-7098-4E6F-952A-4C1D9F105EDF,2025-03-14 15:00:01,6,53622223
,d:\iris\mgr\journal\test20250315.002,1-7,AF32AAA0-DEEB-488A-8B13-158047BFA5CE,0D76C1B0-89BF-48A9-B5C3-8F9C8A54AF5A,2025-03-14 15:30:00,7,53630932

ジャーナル履歴ログにファイル情報が記録されるため、手順を踏まずにジャーナルファイルを削除するのは控えた方が良いです。

色々と説明しましたが、百聞は一見にしかず。
次から、ジャーナルの内容を確認していきたいと思います。

SET文を確認する

下記をターミナルで実行します。(操作対象DB=D:\IRISDB\SAMPLE-DATA)

s ^test="ジャーナル確認"

入力が終わったら、管理ポータルを起動し、[システムオペレーション] > [ジャーナル]をクリックします。

ジャーナル画面が起動したら、作成日時が最新のファイルの「参照」をクリックします。

画面右の「マッチ」を、[プロセス], [等しい], [ターミナルのプロセス番号]で絞り込み「検索」ボタンをクリックすると、目的のデータが表示されます。

グローバルノード「^test」にSET文(タイプ=SET)を実行したログが表示されました。

また、オフセット値「23474336」をクリックすると、ジャーナルの詳細が表示されます。

セットした値が分かりますね。

KILL文を確認する

次はKILL文を試してみます。

同じターミナルで、下記コマンドを実行してみます。

k ^test

検索条件を変えず、再度「検索」ボタンをクリックすると、グローバルを削除した操作が表示されます。

オフセット値「24004924」をクリックすると、ジャーナルの詳細が表示されます。

KILL文なので、グローバルの更新は「<値なし>」ですね。

ジャーナルには、データベースに対する各種操作の詳細が逐次記録されます。
このジャーナルを活用することで、システム障害の発生時や誤操作によるデータの損失にも、迅速かつ正確なデータ復旧が可能となります。

ジャーナルの設定

ジャーナルの設定画面は、管理ポータルで[システム管理] > [構成] > [システム構成] > [ジャーナル設定]の順にクリックする事で表示します。

下記がジャーナルの設定画面になります。

項目名説明
プライマリのジャーナル・ディレクトリジャーナルファイルを格納するメインディレクトリ
セカンダリのジャーナル・ディレクトリ現在のディレクトリに書き込めなくなった場合の切り替え先ディレクトリ
プライマリとは別のドライブが良い
新しいジャーナルファイルに切り替えるサイズ単位はMB
規定サイズに達すると、新しいジャーナル・ファイルに切り替わる
ジャーナル量が多いシステムの場合、値を増やした方が良いと思う
ジャーナル・ファイルのプレフィックス入力した値が、ジャーナルファイルのファイル名に付与される
例)「hoge_」 ファイル名「hoge_20250204.003」
ジャーナルファイルの削除(この日数よりも前)タスク「ジャーナルファイル削除」にて、指定日数以前のファイルを削除する
ジャーナルファイルの削除(この回数のバックアップ成功後)指定した回数、連続でバックアップが成功したら、上記タスクにて削除される
エラー時に凍結ON:エラー時にシステムが凍結し、データの損失を守る
OFF:システムは凍結しないが、データが損失する可能性あり
※システムの性格に合わせて判断する事

理想論的には、WIJファイル・プライマリ・セカンダリの3つの設定値は、安全面から別のストレージに配置する方が良いそうです。

DB単位でのジャーナル出力制御

システムを運用する上でジャーナルは必用不可欠だと考えています。
トランザクションのロールバックもジャーナルがあってからこそです。

ただ、それでもジャーナル出力を止めたいケースが存在する時があります。
 ※私も開発環境では、ジャーナルを止めているケースがあります。

では、ジャーナルの出力をDB単位で停止してみましょう。

停止方法

管理ポータルを起動し、[システム管理] > [構成] > [システム管理] > [ローカルデータベース]の順にクリックします

ローカルデータベース画面を表示すると、今回対象とする「SAMPLE-DATA」をクリックします。

DB「SAMPLE-DATA」の詳細設定画面が表示されるので、「グローバルジャーナル状態」のチェックボックスをOFFにすると、ジャーナルが出力されなくなります。

チェックボックスをOFFにした状態。
警告が表示されます。

「保存」ボタンをクリックすると、ジャーナルが出力されなくなります。
念のため、グローバル操作を行って試してみてください。

たとえジャーナルの停止の設定を行っても、object操作「%Save()、%DeleteId()」等々は、ジャーナルが必ず出力されます。

例)ジャーナル停止状態で、%Save()を行った際のジャーナルレコード。
  インデックスとデータグローバルの変更がジャーナルに出力されている。

速度検証

ジャーナルが出力される状態と停止している状態で、どの程度処理速度に影響があるか検証してみたいと思います。

検証には、下記コマンドをターミナルに張り付け、ジャーナルの停止・出力を切り替えて実行します。

Search(cnt)	;
	k ^test
	
	s start=$zh
	f pos=1:1:cnt {
		s ^test(pos)="処理速度の検証"
	}
	w "処理時間:",$zh-start

d Search(1000000) // 実行コマンド

【実行結果(100万回実行)】
ジャーナルあり: 0.764575 
ジャーナルなし: 0.594104 

検証サンプルが少ないので一概に言えませんが、ジャーナルのOn/Offの差はあまり感じられないですね。
 ※検証中にジャーナルファイル切り替えは発生せず。

おわりに

いかがだったでしょうか。
今回は、ジャーナルの初級編をお送りいたしました。

ジャーナル初級編として、管理ポータルで操作する事を中心にお送りいたしました。

ジャーナルは、データの安全性を確保し、障害時の復旧を可能にする重要な機能です。
本記事では、以下の点を解説しました。

  • データ操作の履歴を保存と参照方法について
  • ジャーナルの設定とファイルの自動切換えについて
  • ジャーナル出力の制御とオブジェクト操作時の出力について

次回は、ジャーナルについてもう少し深掘りしていきたいと思います。