3.5 複数のRDエリアを一度にインメモリ化する場合の注意事項

複数のRDエリアをインメモリ化する場合,一度にまとめてインメモリ化する方法と,個別にインメモリ化する方法があります。運用が煩雑になるのを防ぐため,関連するRDエリアはまとめてインメモリ化することをお勧めしますが,その場合は次のことに注意してください。

<この節の構成>
(1) インメモリ化に失敗したとき
(2) セグメントの割り当てについて

(1) インメモリ化に失敗したとき

複数のRDエリアのうち,一つでもインメモリ化に失敗した場合は,一緒に指定したそのほかのRDエリアもインメモリ化しません。この場合は,pdmemdb -k stayコマンドを再実行してください。

なお,HiRDB/パラレルサーバの場合は,バックエンドサーバごとにこの仕組みが適用されます。

(例)
pdmemdb -k stay -r RD01,RD02,RD03,RD04
RD01とRD02はバックエンドサーバ1で,RD03とRD04はバックエンドサーバ2で管理されています。RD02のインメモリ化に失敗した場合,RD01もインメモリ化しません。RD03とRD04はインメモリ化します。
注意
インメモリ化時だけではなく,インメモリ化の解除,再読み込み,インメモリデータバッファの破棄を行うときにも,この仕組みが適用されます。pdmemdbコマンドで複数のRDエリアを操作したときに,一部のRDエリアに対する処理でエラーが発生すると,すべてのRDエリアの処理を無効化します。

(2) セグメントの割り当てについて

インメモリデータバッファもグローバルバッファと同様に,共用メモリセグメント上に割り当てられます。

インメモリデータバッファに割り当てられる共用メモリセグメントを効率的に使用するために,複数のRDエリアをまとめてインメモリ化した場合は,インメモリ化を解除するときもまとめて解除してください。共用メモリセグメントの割り当ての仕組みを次に示す例を使って説明します。

(例)
  • 共用メモリセグメントの最大サイズ:1GB
  • RDエリア(RD01)のサイズ:1.5GB
  • RDエリア(RD02)のサイズ:0.4GB
  • RDエリア(RD03)のサイズ:0.7GB
この条件下での共用メモリセグメントの割り当ての仕組みを次の図に示します。

図3-5 共用メモリセグメントの割り当ての仕組み

[図データ]
[説明]
  1. RD01とRD02をまとめてインメモリ化し,それとは別にRD03をインメモリ化しました。
    RD01のインメモリデータバッファはセグメント1およびセグメント2に割り当てられます。RD02のインメモリデータバッファはRD01と同じセグメント2に割り当てられます。
    RD03のインメモリデータバッファはRD01,RD02とは別のセグメント(セグメント3)に割り当てられます。
  2. RD01のインメモリ化を解除すると,セグメント1は解放されて利用できますが,セグメント2のRD01のインメモリデータバッファに割り当てられた領域は解放されません。そのため,このメモリ領域がむだになります。
  3. RD01を再度インメモリ化すると,新しいセグメント(セグメント1とセグメント4)が割り当てられます。
    ポイント
    メモリ領域がむだになるのを防ぐため,複数のRDエリアをまとめてインメモリ化した場合は,インメモリ化の解除もまとめて行うようにしてください。