2.74.1 pdmemdbの形式と規則
(1) 機能
pdmemdbコマンドで次に示すことができます。
-
RDエリアのインメモリ化
-
インメモリ化の解除
-
インメモリデータバッファへのデータの再読み込み
-
インメモリデータバッファ上のデータの破棄
なお,pdmemdbコマンドの実行結果は,pddbls -Mコマンドで確認できます。
(2) 実行者
HiRDB管理者が実行できます。
(3) 形式
pdmemdb -k 処理種別 {-r RDエリア名〔,RDエリア名〕…|-r ALL} 〔-p ページ指定種別〕〔-d〕〔-W 実行監視時間〕
(4) オプション
(a) -k 処理種別
pdmemdbコマンドで実行する処理を指定します。
- stay:
-
-rオプションで指定したRDエリアをインメモリ化する場合に指定します。
- rels:
-
-rオプションで指定したインメモリRDエリアのインメモリ化を解除します。
- reload:
-
-rオプションで指定したインメモリRDエリア内のデータをインメモリデータバッファに再読み込みします。
- cancel:
-
-rオプションで指定したインメモリRDエリアに割り当てられているインメモリデータバッファ上の更新情報を破棄します。
各オプションの指定によって,pdmemdbコマンド実行後のインメモリデータバッファ及びRDエリアの状態が異なります。詳細については,表「pdmemdbコマンド実行時の前提条件(インメモリデータバッファと対象RDエリアの状態)」を参照してください。
(b) -r RDエリア名〔,RDエリア名〕… 〜<識別子>((1〜30))
処理対象のRDエリアの名称を指定します。
次に示すRDエリアを指定した場合,pdmemdbコマンドがエラーになります。
-
ユーザ用RDエリア,ユーザLOB用RDエリア,及びリスト用RDエリア以外のRDエリアを指定した場合
-
RDエリア名の一括指定時,ユーザ用RDエリア,ユーザLOB用RDエリア,及びリスト用RDエリア以外のRDエリアが対象になった場合
-
オープン属性がSCHEDULEのRDエリアを指定した場合
-
共用RDエリアを指定した場合
-
グローバルバッファを割り当てていないRDエリアを指定した場合
- <規則>
-
RDエリアを指定する場合の規則については,「運用コマンド,ユティリティでのRDエリアの指定」を参照してください。
(c) -r ALL
このオプションを指定した場合,-kオプションで指定した処理を実行できるすべてのRDエリアを処理対象にします。
全インメモリRDエリアのインメモリ化を一度に解除するときなどに,このオプションを指定します。
なお,RDエリアをインメモリ化するときにこのオプションを指定すると,必要のないRDエリアをインメモリ化するおそれがあるため,インメモリ化するときはこのオプションを指定しないことをお勧めします。
- 注意事項
-
監査証跡表及び改竄防止表に定義したインデクスがある場合,-r ALL指定をしないでください。-r ALL指定をすると,監査証跡表又は改竄防止表を格納しているRDエリアもインメモリ化されます。監査証跡表又は改竄防止表を格納しているRDエリアをインメモリ化してはいけない理由については,注意事項を参照してください。
次に示すRDエリアは,-r ALL指定時に処理対象となりません。
-
ユーザ用RDエリア,ユーザLOB用RDエリア,及びリスト用RDエリア以外のRDエリア
-
オープン属性がSCHEDULEのRDエリア
-
共用RDエリア
-
グローバルバッファを割り当てていないRDエリア
-
インメモリデータバッファ及びRDエリアの状態が正しくないRDエリア(正しい状態については,表「pdmemdbコマンド実行時の前提条件(インメモリデータバッファと対象RDエリアの状態)」を参照)
(d) -p ページ指定種別《free》
このオプションは-kオプションにstayを指定した場合に指定できます。
インメモリデータバッファが使用する共用メモリを実メモリ上にページ固定するかどうかを指定します。
- free:
-
インメモリデータバッファが使用する共用メモリを実メモリ上にページ固定しません。
- fixed:
-
インメモリデータバッファが使用する共用メモリを実メモリ上にページ固定します。なお,Windowsのバージョンによってはページ固定できない場合があります。使用しているWindowsがページ固定できるかどうかについては,pdntenv -osコマンドで確認できます。
インメモリデータバッファが使用する共用メモリを実メモリ上にページ固定(fixed指定)すると,共用メモリのページングを防止できるため,共用メモリに対するアクセス性能が向上します。
インメモリデータバッファが使用する共用メモリサイズとサーバマシンの実メモリから,メモリを固定するかどうかを決定してください。実メモリに比べて大きなメモリをページ固定すると,ページングの多発や仮想メモリ不足の原因になります。したがって,実メモリや全仮想メモリに対する共用メモリプールの占める割合を検討する必要があります。インメモリデータバッファが使用する共用メモリの計算式については,マニュアル「HiRDB Version 9 システム導入・設計ガイド」を参照してください。
ページ固定は,実メモリサイズからページ固定する共用メモリサイズを減算したサイズが,スワップ領域サイズからページ固定する共用メモリサイズを減算したサイズの1/2以上にならないことを目安にしてください。
(e) -d
このオプションは-kオプションにrelsを指定した場合に指定できます。
インメモリ化を強制解除する場合にこのオプションを指定します。インメモリ化を強制解除すると,インメモリデータバッファ上の更新データはインメモリRDエリアに反映されません。
(f) -W 実行監視時間 〜<符号なし整数>((0〜3600))
pdmemdbコマンドの実行時間を監視する場合に,その監視時間を分単位で指定します。このオプションに指定する値の目安や動作については,マニュアル「HiRDB Version 9 システム定義」のシステム共通定義pd_cmd_exec_timeオペランドの説明を参照してください。
なお,このオプションに0を指定した場合は,監視を行いません。
また,このオプションを省略した場合は,システム共通定義のpd_cmd_exec_timeオペランドの指定値に従います。
(5) リターンコード
pdmemdbコマンドのリターンコードを次に示します。
-
0:正常終了
-
4:警告
-rオプションで複数のRDエリアを指定した場合,一部のRDエリアの処理が正常に終了しなかったときのリターンコードです。
-
8:異常終了
-
12:異常終了
エラーメッセージを表示できない場合にリターンコード12が表示されます。この場合,イベントログのエラーメッセージを参照してください。HiRDB/パラレルサーバの場合はディクショナリサーバを定義したサーバマシンのイベントログを参照してください。エラーの要因を取り除いた後に,再度pdmemdbコマンドを実行してください。イベントログにエラーメッセージが出力されていない場合は,保守員に連絡してください。
(6) 規則
-
HiRDBが稼働中のときにpdmemdbコマンドを実行できます。
-
HiRDB/パラレルサーバの場合,システムマネジャを定義したサーバマシンでpdmemdbコマンドを実行してください。
-
データディクショナリ用RDエリアが次に示すどちらかの状態のときに,pdmemdbコマンドを実行できます。
-
オープン状態,かつ閉塞解除状態
-
オープン状態,かつコマンド閉塞状態
-
-
pdmemdbコマンドは,HiRDB Acceleratorが正しくインストールされていて,かつpd_max_resident_rdarea_noオペランドに1以上が指定されている場合に実行できます。
-
pdmemdbコマンドを実行する前に,インメモリデータバッファと対象RDエリアの状態を確認してください。正しい状態になっていないとpdmemdbコマンドを実行できません。pdmemdbコマンド実行時の前提条件(インメモリデータバッファと対象RDエリアの状態)を次の表に示します。
表2‒12 pdmemdbコマンド実行時の前提条件(インメモリデータバッファと対象RDエリアの状態) pdmemdbコマンドの-kオプションの指定
コマンド実行時の前提条件
コマンド実行後の状態
インメモリデータバッファの状態
RDエリアの状態
インメモリデータバッファの状態
RDエリアの状態
stay
未使用状態
コマンド閉塞かつクローズ状態
DB同期状態
コマンド閉塞かつクローズ状態
reload
バッファ障害状態
障害閉塞かつクローズ状態
rels
-dオプション指定なし
DB同期状態
コマンド閉塞かつクローズ状態
未使用状態(インメモリ化の解除)
コマンド閉塞かつクローズ状態
-dオプション指定あり
DB非同期状態
コマンド閉塞かつオープン状態
障害閉塞かつクローズ状態
バッファ障害状態
障害閉塞かつクローズ状態
RDエリア障害状態
コマンド閉塞かつオープン状態
バッファ障害状態かつRDエリア障害状態
障害閉塞かつクローズ状態
cancel
DB非同期状態
コマンド閉塞かつオープン状態
バッファ障害状態
障害閉塞かつオープン状態
(7) 注意事項
-
RDエリアの容量に比例してpdmemdbコマンドの処理時間が長くなります。その間,シンクポイントが有効化されないため,注意してください。
-
-kオプションにstay,reload,relsのどれかを指定してコマンドを実行したときにコマンドプロセスをkillすると,HiRDB(HiRDB/パラレルサーバの場合はユニット)が異常終了することがあるため,コマンドプロセスをkillしないでください。
-
インメモリRDエリアがある場合にHiRDBが強制終了又は異常終了すると,インメモリデータバッファ上の更新情報はインメモリRDエリアに反映されません。このとき,インメモリRDエリアが障害閉塞することがあります。
-
ユーザ用RDエリア,及びユーザLOB用RDエリアの場合
DB同期状態以外のときは,ユーザ用RDエリア,及びユーザLOB用RDエリアが障害閉塞します。
-
リスト用RDエリアの場合
RDエリア障害状態又は両系障害状態(バッファ障害状態かつRDエリア障害状態)のときは,リスト用RDエリアが障害閉塞します。
このため,インメモリ化を行った場合は,必ずバックアップを取得してください。バックアップは,次の場合に必要となります。
-
両系障害状態(バッファ障害状態かつRDエリア障害状態)となった場合
-
最新の状態に回復する場合
-
関連するRDエリアをインメモリ化していない場合(インメモリRDエリアに対して定義系SQLを実行する場合を含む)
バックアップ取得の運用については,マニュアル「HiRDB Version 9 バッチ高速化機能」を参照してください。
-
-
インメモリRDエリアがあるディスクのペアボリューム操作を行わないことをお勧めします。インメモリデータバッファとインメモリRDエリアの同期状態(DB同期状態なのかDB非同期状態なのか)を正しく認識しないでペアボリューム操作を行うと,データの不整合が発生するおそれがあります。
-
インメモリ化の処理中(pdmemdbコマンドの実行からインメモリ化を完了するまでの間)は,pdstop,pdchgconf,又はpdprgrenewコマンドを実行しないでください。実行して両方のコマンドが正常終了した場合,インメモリデータバッファを割り当てた共用メモリセグメントが解放されない可能性があります。この場合は,OSの機能を使って共用メモリセグメントの使用状況を調べて,必要に応じて共用メモリセグメントの解放を行ってください。
-
HiRDBが強制終了又は異常終了すると,インメモリデータバッファ上の更新情報がインメモリRDエリアに反映されません。このため,監査証跡表又は改竄防止表を格納しているRDエリアをインメモリRDエリアにしないでください。
監査証跡表又は改竄防止表も,ほかの表と同様にデータベース回復ユティリティを使用すれば,更新情報を反映してインメモリRDエリアを最新の状態に回復できますが,セキュリティ上の観点から,インメモリデータ処理の適用はお勧めしません。
また,監査証跡表の自動データロード機能は更新前ログ取得モードで動作するため,自動データロード機能を使用している場合は,監査証跡表に更新情報を反映できなくなるおそれがあります。
-
pdmemdbコマンドは,指定したRDエリアに対してEXモードで排他制御をします。そのため,指定したRDエリアにほかのトランザクションがアクセス中の場合は,そのトランザクションの終了までpdmemdbコマンドは待ち状態になります。
-
-rオプションで複数のRDエリアを指定した場合(複数のRDエリアに対して一度に処理を行う場合),一部のRDエリアに対する処理でエラーが発生すると,すべてのRDエリアの処理を無効化します。
なお,HiRDB/パラレルサーバの場合は,バックエンドサーバごとにこの仕組みが適用されます。HiRDB/パラレルサーバのときの例を次に示します。
(例)
pdmemdb -k stay -r RD01,RD02,RD03,RD04
RD01とRD02はバックエンドサーバ1で,RD03とRD04はバックエンドサーバ2で管理されています。RD02のインメモリ化に失敗した場合,RD01もインメモリ化されません。RD03とRD04はインメモリ化されます。
なお,このとき,pdmemdbコマンドのリターンコードに4が返されます。
- 参考
-
この規則は,一括指定の場合や,ALL指定の場合も適用されます。
直接指定及び一括指定の場合と,ALL指定の場合の,エラー処理の差異を次に示します。
pdmemdbコマンド実行時の条件又はエラー発生時の条件
直接指定及び一括指定の場合
ALL指定の場合
指定したRDエリアに,共用RDエリアなどのインメモリデータ処理の適用外となるRDエリアがある場合
pdmemdbコマンドがエラーになります。指定したRDエリアは一つもインメモリ化されません。
インメモリデータ処理の適用外となるRDエリアはインメモリ化されません。残りのRDエリアはすべてインメモリ化されます。
指定したRDエリアのうち,共用メモリ不足などで一部のRDエリアに対する処理でエラーが発生した場合
注意事項8で説明した処理が行われます。