2.10.1 pdbufmodの形式と規則
(1) 機能
HiRDBの稼働中に,グローバルバッファの追加,削除,及び変更をします。
pdbufmodの変更は,ユニット又はサーバの正常終了後は引き継がれません。したがって,次回のHiRDBの正常開始までに,システム定義のpdbufferオペランドにpdbufmodでの変更を反映しておく必要があります。なお,pdchgconfコマンドを使用すると,HiRDBを終了しなくてもシステム定義を変更できます。
pdbufmodコマンドは,HiRDB Advanced High Availabilityを組み込んでいる場合に使用できます。
(2) 実行者
HiRDB管理者が実行できます。
(3) 形式
pdbufmod -k 変更種別 -a グローバルバッファ名 〔{-r RDエリア名〔,RDエリア名〕…|-b RDエリア名〔,RDエリア名〕… |-o|-i 認可識別子.インデクス識別子}〕 〔-n バッファ面数 〔-l バッファサイズ〕〕 〔-m 同時実行最大プリフェッチ数〕 〔-p 一括入力最大ページ数〕 〔-w デファードライトトリガ時の更新ページ出力比率〕 〔-y デファードライトトリガ契機の更新バッファ面数〕 〔-W 実行監視時間〕
(4) オプション
(a) -k 変更種別
変更種別を指定します。
- add:
-
グローバルバッファを新規に追加する場合,又は既存のグローバルバッファに新たにグローバルバッファを追加する場合に指定します。
新規にグローバルバッファを追加する場合,-nオプションを必ず指定してください。また,新規にグローバルバッファを追加する場合に-r,-b,又は-iオプションを指定するときは,指定するRDエリア,又はインデクスは先に定義されていなければなりません。
既存の共用メモリセグメントに空きがない場合,新規のグローバルバッファは,新規の共用メモリセグメントに作成されます。
- del:
-
グローバルバッファを削除する場合,又はグローバルバッファの特定のRDエリアを削除したい場合に指定します。
特定のRDエリアを削除する場合は,-r又は-bオプションでそのRDエリアを指定します。
削除するグローバルバッファに割り当てられているRDエリア,及びグローバルバッファから削除するRDエリアは,事前に閉塞クローズ状態にしておく必要があります。
インメモリRDエリアに割り当てているグローバルバッファは削除できません。このグローバルバッファを削除する場合は,インメモリ化を解除した後にグローバルバッファを削除してください。
- upd:
-
グローバルバッファの定義を変更する場合に指定します。グローバルバッファの定義とは,バッファ面数,バッファサイズ,同時実行最大プリフェッチ数,一括入力最大ページ数,デファードライトトリガ時の更新ページ出力比率,及びデファードライトトリガ契機の更新バッファ面数を指します。
グローバルバッファの定義を変更した後は,グローバルバッファのキャッシュ内容は破棄されます。
グローバルバッファの定義を変更して,グローバルバッファのメモリサイズが増加した場合,既存の共用メモリセグメントに空きがないと,定義を変更したグローバルバッファは新規の共用メモリセグメントに作成されます。
変更種別とそのほかのオプションとの関係を次に示します。
そのほかのオプション |
-k 変更種別 |
||
---|---|---|---|
add |
del |
upd |
|
-a |
◎ |
◎ |
◎ |
-r |
○ |
○ |
× |
-b |
○ |
○ |
× |
-o |
○※1 |
× |
× |
-i |
○※1 |
× |
× |
-n |
○※1※2 |
× |
○ |
-l |
○※1 |
× |
○ |
-m |
○※1 |
× |
○ |
-p |
○※1 |
× |
○ |
-w |
○※1 |
× |
○ |
-y |
○※1 |
× |
○ |
- (凡例)
-
◎:必ず指定します。
○:任意に指定できます。
×:指定できません。
- 注※1
-
新規にグローバルバッファを追加する場合に指定できます。
- 注※2
-
新規にグローバルバッファを追加する場合,必ず指定してください。
(b) -a グローバルバッファ名 〜<識別子>((1〜16))
追加,削除,又は変更をするグローバルバッファの名称を指定します。
-k add(既存のグローバルバッファへのRDエリアの追加),-k del,及び-k updの場合は,既に定義されているグローバルバッファの名称を指定してください。-k add(新規のグローバルバッファの追加)の場合は,サーバ内で一意となるグローバルバッファの名称を指定してください。
このオプションにはインメモリデータバッファを指定できません。
(c) -r RDエリア名〔,RDエリア名〕… 〜<識別子>((1〜30))
グローバルバッファに割り当てるRDエリア,又はグローバルバッファから削除するRDエリアの名称を指定します。
- <規則>
-
-
RDエリアを指定する場合の規則については,「運用コマンド,ユティリティでのRDエリアの指定」を参照してください。
-
同時に-nオプションでバッファ面数を指定して,一つのグローバルバッファに複数のRDエリアを指定した場合,RDエリアのページサイズの中で最も大きいページサイズがバッファ長となります。そのため,ページサイズが近いRDエリアを同じグローバルバッファに割り当てることをお勧めします。ただし,同じページサイズでも用途の異なる表があるRDエリア,ランダムアクセスが多いRDエリア,及び順次アクセスが多いRDエリアは,別グローバルバッファとして割り当てた方がバッファリングの効果が向上します。
-
ユーザ用RDエリアを指定する場合は,データディクショナリ用RDエリアが次のどちらかの状態でなければなりません。
・オープン状態,かつ閉塞解除状態
・オープン状態,かつコマンド閉塞状態
-
(d) -b RDエリア名〔,RDエリア名〕… 〜<識別子>((1〜30))
グローバルバッファに割り当てるLOB用RDエリア,又はグローバルバッファから削除するLOB用RDエリアの名称を指定します。
- <効果的な指定方法>
-
次に示すようなLOB用RDエリアを指定します。
-
プラグインインデクスを格納するLOB用RDエリア
-
データ量が少なく,アクセス頻度が高いデータを格納するLOB用RDエリア
なお,一つのLOB用グローバルバッファには,一つのLOB用RDエリアを割り当てることをお勧めします。
-
- <規則>
-
-
RDエリアを指定する場合の規則については,「運用コマンド,ユティリティでのRDエリアの指定」を参照してください。
-
指定できるRDエリアは,データディクショナリLOB用RDエリア,ユーザLOB用RDエリア,及びレジストリLOB用RDエリアです。これ以外のRDエリアを指定した場合はエラーとなります。
-
-bオプションを指定した場合,-m,-p,及び-wオプションは指定できません。
-
-oオプション指定のグローバルバッファを割り当てていない場合,-rに指定しているLOB用RDエリアは,-bにも指定する必要があります。
-
ユーザLOB用RDエリアを指定する場合は,データディクショナリ用RDエリアが次のどちらかの状態でなければなりません。
・オープン状態,かつ閉塞解除状態
・オープン状態,かつコマンド閉塞状態
-
(e) -o
-rオプションで指定していないすべてのRDエリアに,グローバルバッファを割り当てる場合に指定します。-oオプションは1回だけ指定できます。2回以上指定した場合は最初の指定を有効とします。
(f) -i 認可識別子.インデクス識別子
認可識別子:〜<識別子>((1〜30))
インデクス識別子:〜<識別子>((1〜30))
インデクス用グローバルバッファを割り当てるインデクスの名称(認可識別子.インデクス識別子)を指定します。
- <効果的な指定方法>
-
使用頻度の高いインデクスを指定してください。使用頻度の高いインデクスにグローバルバッファを割り当てると,インデクスページのメモリ常駐度が上がるため,入出力回数が削減できます。
特に,クラスタキー又はユニークキーに定義したインデクスをグローバルバッファに割り当てると効果が大きいです。なお,クラスタキーのインデクス識別子はHiRDBが決めるため,表を定義した後にディクショナリ表(SQL_INDEXES表のINDEX_NAME列)を検索してインデクス識別子を確認してください。
また,すべてのインデクスをインデクス用のグローバルバッファに割り当てると,グローバルバッファ全体の使用効率が悪くなります。したがって,メモリ量に応じてグローバルバッファに割り当てるインデクスを厳選してください。
- <規則>
-
-
認可識別子及びインデクス識別子を引用符(")で囲んだ場合は,英字の大文字と小文字が区別されますが,引用符(")で囲まない場合はすべて大文字として扱われます。また,インデクス識別子に空白を含む場合は,引用符(")で囲んでください。なお,sh(Bourneシェル),csh(Cシェル),及びksh(Kシェル)の場合は,更にアポストロフィ(’)で囲む必要があります。
-
認可識別子.インデクス識別子を指定する場合,データディクショナリ用RDエリアは次のどちらかの状態でなければなりません。
・オープン状態,かつ閉塞解除状態
・オープン状態,かつコマンド閉塞状態
-
(g) -n バッファ面数
32ビットモードの場合:〜<符号なし整数>((4〜460000))
64ビットモードの場合:〜<符号なし整数>((4〜1073741824))
グローバルバッファの面数を指定します。
- <指定値の目安>
-
-
必要以上に大きな値を指定すると,入出力回数は減るがバッファを検索するためのオーバヘッドが増えます。
-
グローバルバッファは共用メモリに確保されます。そのため,必要以上に大きくするとほかのメモリの使用時にページングが多発し,性能が悪くなります。
-
シンクポイント取得のタイミング,及びグローバルバッファ内の更新ページの比率によっては,データベースへの出力が集中します。そのため,入出力回数のバランスも考慮する必要があります。
-
バッファ面数が大き過ぎると,共用メモリを確保できないことがあるため,注意してください。
-
グローバルバッファの面数は,次の表から求めてください。
条件
グローバルバッファ面数の求め方
-r又は-oオプション指定のグローバルバッファの場合
HiRDB/シングルサーバの場合
同時に発生するSQL処理要求の数×1SQLで使用するページ数(3〜6程度)
HiRDB/パラレルサーバの場合
同時実行ユーザ数×1トランザクション内の平均同時アクセス表数×3×n※1
-bオプション指定のグローバルバッファの場合
LOB用RDエリアの総ページ数×常駐度※2(%)
-iオプション指定のグローバルバッファの場合
インデクスの格納ページ数×常駐度※3(%)
- 注※1
-
n=1として見積もったバッファ面数では,バッファのヒット率を高くできません。このため,係数としてどれくらいの余裕をバッファに持たせるか(バッファのヒット率をどのくらいにするか)を検討して指定してください。
- 注※2
-
常駐度は1(100%)が望ましいが,メモリ容量,データのアクセス頻度などを考慮して設定します。ユーザLOB用RDエリアの総ページ数,及びレジストリ用RDエリアの総ページ数については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
- 注※3
-
常駐度は1(100%)が望ましいが,メモリ容量,インデクスの重要度などを考慮して設定します。インデクスの格納ページ数については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
-
バッファのヒット率がHiRDB稼働業務で80%以上となるように設定してください。バッファのヒット率は次に示す方法で確認できます。
・統計解析ユティリティ(グローバルバッファに関する統計情報)の「更新バッファヒット率」及び「参照バッファヒット率」で確認できます。
・pdbuflsコマンドのヘッダ名HITで確認できます。
-
(h) -l バッファサイズ 〜<符号なし整数>((4〜30の偶数))
グローバルバッファのバッファサイズをキロバイト単位で指定します。このオプションは-nオプションと一緒に指定します。
- <指定値の目安>
-
通常,このオプションは省略してください。このオプションを省略すると,このグローバルバッファに割り当てたRDエリアの最大ページサイズが,バッファサイズとして仮定されます。ただし,次に示す場合は指定値の変更を考えてください。
-
将来,このオプションで指定した値を超えるページ長のRDエリアを追加したり,再初期化してRDエリアのページ長を大きくしたりすることがある場合,このオプションの指定値を大きめに設定しておくことをお勧めします。ただし,HiRDBを終了できる場合は,HiRDBの次回開始時にはバッファサイズに最大ページ長が仮定されるため,このオプションの指定値を大きめに設定しておく必要はありません。
-
- <規則>
-
-
このオプションの指定値がRDエリアの最大ページサイズより小さい場合,RDエリアの最大ページサイズがバッファサイズとなります。
-
このオプションに奇数を指定した場合,バッファサイズは指定した値に1を加算した値となります。
-
(i) -m 同時実行最大プリフェッチ数 〜<符号なし整数>((0〜95000))《0》
同時にプリフェッチ機能を使用する最大数を指定します。プリフェッチ機能は,キャラクタ型スペシャルファイルを使用して大量検索をする場合に入出力時間を削減する効果があります。
このオプションに0を指定するか,又は省略した場合は,プリフェッチ機能は動作しません。プリフェッチ機能を動作させるには,1以上を指定してください。
- <指定値の目安>
-
指定値の設定は,このグローバルバッファに割り当てられたRDエリアの表の中で,プリフェッチ機能が適用されるSQLを同時に実行する回数を指定します。プリフェッチ機能が適用されるSQLを次に示します。ただし,3.に関しては実行数を2として算出します。
-
インデクスを使用しないSELECT,UPDATE,DELETE文(=条件,IN条件を除く)
-
インデクスを使用した昇順検索※をするSELECT,UPDATE,DELETE文(=条件,IN条件を除く)
-
クラスタキーを使用した昇順検索※をするSELECT,UPDATE,DELETE文(=条件,IN条件を除く)
注※ 複数列インデクスの場合はインデクス定義で指定した順序
-
- <規則>
-
プリフェッチ機能を使用する場合,グローバルバッファ用の共用メモリからグローバルバッファとは別に一括入力専用のバッファが確保されるため,再度共用メモリを見積もる必要があります。
プリフェッチ機能,及びグローバルバッファが使用する共用メモリの計算式については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
(j) -p 一括入力最大ページ数 〜<符号なし整数>((2〜256))《32》
プリフェッチ機能の一括入力最大ページ数を指定します。この指定は,-mオプションで1以上を指定したときだけ有効になります。
- <指定値の目安>
-
共用メモリ量と削減効果のコストパフォーマンスから,指定の目安として次に示す計算式を満足するように指定します。
a×b=64〜128 (単位:キロバイト) a:プリフェッチ対象表のデータ,又はインデクスが格納されているRDエリアのページ長 b:一括入力最大ページ数
(k) -w デファードライトトリガ時の更新ページ出力比率
〜<符号なし整数>((0〜100))《20》
デファードライトトリガでの更新ページ出力比率をパーセントで指定します。デファードライトトリガについては,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
このオペランドに0を指定した場合は,デファードライトトリガでの更新ページ出力をしません。
- <指定値の目安>
-
-
グローバルバッファごとの入出力回数,及び更新ページのヒット率などを統計解析ユティリティで確認し,指定値を決めてください。更新ページのヒット率が高いグローバルバッファでは出力比率を低く,ヒット率の低いグローバルバッファでは出力比率を高く指定してください。
-
必要以上に大きい値を指定すると,更新の頻度が多い場合,入出力が多発します。また,遅延書き込み時にデータベースに書き込むページ数が増え,スループットが低下します。反対に,少な過ぎる値を指定すると,シンクポイントダンプ出力時にデータベースに書き出すページ数が多くなることがあります。このため,できるだけ,シンクポイントダンプ出力間隔の間に同じページがデータベースに書き出される回数が少なくなるようにしてください。
-
すべてのページがグローバルバッファ上にあり,複数トランザクションで同一ページの更新が多く発生する場合は0を指定してください。0を指定すると,シンクポイント間隔内でデータベースに書き出す総ページ数を減らすことができます。
-
(l) -y デファードライトトリガ契機の更新バッファ面数
〜<符号なし整数>((2〜2147483647))
デファードライト処理を実行するときの,更新バッファ面数を指定します。更新バッファ面数が指定値に達すると,デファードライトトリガによってディスクに書き込まれます。
なお,-yオペランドの指定を省略した場合,デファードライトトリガ契機の更新バッファ面数は,pd_dbbuff_rate_updpageオペランド,pdbuffer -yオペランドの組み合わせによって次のようになります。
pd_dbbuff_rate_updpageオペランドの指定有無 |
pdbuffer -yオペランドの指定有無 |
デファードライトトリガ契機の更新バッファ面数 |
---|---|---|
あり |
あり |
pdbuffer -yオペランド指定値 |
なし |
グローバルバッファ面数×pd_dbbuff_rate_updpageオペランド指定比率 |
|
なし |
あり |
pdbuffer -yオペランド指定値 |
なし |
HiRDBが自動計算します。 |
- <指定値の目安>
-
通常はこのオペランドを省略してください。デファードライト処理がシンクポイント間隔内で終了しない場合など,更新バッファ面数を減らし,更新バッファヒット率を多少抑えてでも書き込み時間を短縮したいときに,このオペランドを指定します。指定する場合は,50%(HiRDBが設定する初期値)を目安にし,マニュアル「HiRDB システム運用ガイド」の「デファードライト処理適用時のシンクポイント処理時間のチューニング」を参照して,オペランドの値を決定してください。
- <規則>
-
-yオプションにグローバルバッファ面数より大きい値を指定した場合は,グローバルバッファ面数と同じ値が適用されます。
- <注意事項>
-
-yオプションの指定値が小さ過ぎると,デファードライト処理の回数が増えてしまい,デファードライト処理による負荷を高めるおそれがあります。このため,指定値の目安に従った設定をお勧めします。
(m) -W 実行監視時間 〜<符号なし整数>((0〜3600))
pdbufmodコマンドの実行時間を監視する場合に,その監視時間を分単位で指定します。このオプションに指定する値の目安や動作については,マニュアル「HiRDB システム定義」のシステム共通定義pd_cmd_exec_timeオペランドの説明を参照してください。
なお,このオプションに0を指定した場合は,監視を行いません。
また,このオプションを省略した場合は,システム共通定義のpd_cmd_exec_timeオペランドの指定値に従います。
(5) 規則
-
pdbufmodコマンドは,HiRDBが稼働中のときだけ実行できます。
-
pdbufmodコマンドは,シングルサーバ又はシステムマネジャがあるサーバマシンで実行してください。
-
pdbufmodコマンドを実行すると,関連するRDエリア及びRDエリア状態に対してEXモードで排他を掛けます。そのため,関連するRDエリアを他トランザクション又はユティリティがアクセスする場合は待ち状態になります。
-
pdbufmodコマンドは,次の場合は実行できません。
-
高速系切り替え機能,又はスタンバイレス型系切り替え機能を使用している場合
-
システム定義でpd_dbbuff_modify=Yを指定していない場合
-
-
pdbufmodコマンドは,複数同時には実行できません。
-
定義できるグローバルバッファ数,及び新たに追加できる共用メモリセグメント数の上限は,システム定義のpd_max_add_dbbuff_no及びpd_max_add_dbbuff_shm_noオペランドの指定値で決まります。
-
pdbufmodコマンドは,pdbufferオペランドに-Dを指定しているグローバルバッファを操作できません。
(6) 注意事項
-
グローバルバッファの削除に伴う共用メモリセグメントの削除は,コマンドの終了契機によって遅延したりします。すぐに削除したい場合は,pdpfreshコマンドを実行してください。
-
pdbufmodコマンド実行中に,ユニットが終了,又はHiRDBを強制終了した場合は,再開始後にpdbufls -k defコマンドで前回実行していた操作が完了しているか確認してください。完了していない場合は,再度pdbufmodコマンドを実行してください。
-
pdbufmodコマンドのリターンコードを次に示します。
0:正常終了
4:警告終了(一部のサーバの処理が異常終了)
8:異常終了
12:異常終了(エラーメッセージを出力できない事象が発生)
リターンコードが12の場合は,シングルサーバ又はディクショナリサーバがあるホストのsyslogfileのエラーメッセージを参照し,エラーの要因を取り除いた後,再度pdbufmodコマンドを実行してください。syslogfileにエラーメッセージが出力されていない場合は,保守員に連絡してください。
(7) 使用例
- 例1:
-
グローバルバッファ(gbuf01)を追加して,そのグローバルバッファに追加したRDエリア(RDAREA1)を割り当てます。
pdbufmod -k add .................1 -a gbuf01 ..............2 -r RDAREA1 .............3 -n 1000 ................4
- [説明]
-
-
グローバルバッファを追加する場合に指定します。
-
追加するグローバルバッファの名称を指定します。
-
割り当てるRDエリアを指定します。
-
グローバルバッファのバッファ面数を指定します。
-
- 例2:
-
RDエリアを割り当てていないグローバルバッファ(gbuf01)を削除します。
pdbufmod -k del .................1 -a gbuf01 ..............2
- [説明]
-
-
グローバルバッファを削除する場合に指定します。
-
削除するグローバルバッファの名称を指定します。
-
- 例3:
-
グローバルバッファ(gbuf01)のバッファ面数を1000から2000に変更します。
pdbufmod -k upd .................1 -a gbuf01 ..............2 -n 2000 ................3
- [説明]
-
-
グローバルバッファの定義を変更する場合に指定します。
-
定義を変更するグローバルバッファの名称を指定します。
-
変更後のバッファ面数を指定します。
-