Hitachi

ノンストップデータベース HiRDB Version 9 システム運用ガイド(UNIX(R)用)


23.1.1 pdbuflsコマンドで統計情報を取得した場合

〈この項の構成〉

(1) グローバルバッファプールのヒット率(HIT)を確認してください

確認する目的

この情報は,グローバルバッファプールのバッファ面数が適切かどうかを判断するために取得します。グローバルバッファプールのチューニングでは,最も大切な項目です。

解析結果の妥当性を判断する方法

グローバルバッファプールのヒット率(HIT)が80%以上であるかどうかを確認してください。

対策方法
●グローバルバッファプールのヒット率が80%未満の場合

pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。

●グローバルバッファプールのヒット率が80%以上の場合

特に問題はありません。さらに,ヒット率を向上するには,グローバルバッファの面数を増やしてください。

(2) 更新要求ヒット率(HIT(UPD))を確認してください

確認する目的

これらの情報は,グローバルバッファの面数やHiRDBの内部で処理する遅延書き込み処理(デファードライト)の妥当性を判断するために取得します。

データベースに対してデータの挿入,更新,及び削除を要求した場合,グローバルバッファプールのデータを更新します。このため,データを更新する更新GET回数に対して,グローバルバッファプールで何回データを見付けられたかが,スループットに影響を及ぼします。

解析結果の妥当性を判断する方法

統計解析ユティリティで出力したUAPに関する情報の,INSERT,UPDATE,及びDELETE文発行回数の合計に比べて,更新要求ヒット率が高いか低いかを判断してください。

  1. 更新要求ヒット率は低くないか確認してください。

  2. 更新要求ヒット率は高いが,参照バッファヒット率が極端に低くなっていないか確認してください。

なお,更新要求ヒット率は,次の計算式で求めています。

更新要求ヒット率(%)=(更新GET要求のヒット回数÷更新GET回数)×100

対策方法
●更新要求ヒット率が低い場合
  1. pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。

  2. pdbufferオペランドの指定値を見直してください。一つのグローバルバッファに複数のRDエリアを割り当てている場合は,更新する表と参照する表を別々のRDエリアに分け,それぞれにグローバルバッファを割り当ててください。一つのグローバルバッファに一つのRDエリアを割り当てている場合は,インデクスと表を別々のRDエリアに格納して,インデクス専用のグローバルバッファを割り当ててください。又は,表を横分割してください。

  3. デファードライト処理をする場合(pd_dbsync_pointオペランドにsyncを指定するか又は省略した場合)は,pdbufferオペランドの-wオプションの値(デファードライト処理で出力するページの比率)を小さくしてください。

●更新要求ヒット率が高い場合

特に問題はありません。

(3) 参照要求ヒット率(HIT(REF))を確認してください

確認する目的

これらの情報は,参照要求ヒット率の妥当性を判断するために取得します。必要とするデータがグローバルバッファにない場合,システムはデータベースのデータをRDエリアからバッファに取り出してきます。このため,グローバルバッファプールを確保した領域に,該当するデータが見付かる回数が少ない場合,入出力回数が増加し,トランザクションの処理性能に影響を及ぼします。

解析結果の妥当性を判断する方法

参照要求ヒット率が80%に近いかどうかで判断してください。なお,参照要求ヒット率は次に示す計算式で求めています。

参照要求ヒット率(%)=(参照要求ヒット回数÷参照GET回数)×100

対策方法
●参照要求ヒット率が80%を超えていない場合
  1. pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。

  2. pdbufferオペランドの指定値を見直してください。一つのグローバルバッファに複数のRDエリアを割り当てている場合は,特にアクセス頻度が高い表は,一つのグローバルバッファに割り当ててください。一つのグローバルバッファに一つのRDエリアを割り当てている場合は,表を横分割してください。

  3. 更新要求ヒット率に対して極端に参照要求ヒット率が低く,参照ページフラッシュ回数が多い場合は,システム共通定義でpd_dbbuff_lru_option=MIXを指定してください。

  4. デファードライト処理をする場合(pd_dbsync_pointオペランドにsyncを指定するか又は省略した場合)は,pdbufferオペランドの-wオプションの値(デファードライト処理で出力するページの比率)を大きくしてください。

●参照要求ヒット率が80%を超えている場合

特に問題はありません。

(4) 更新バッファフラッシュ回数(UPFLS)を確認してください

確認する目的

この情報は,更新バッファフラッシュ回数の妥当性を判断するために取得します。処理件数に対して,更新されたバッファをHiRDBファイルに出力してから新しいページを入力するための空きバッファを作成した回数(更新バッファフラッシュ回数)が多くなると,ディスクへの入出力回数が増加します。このため,トランザクションの処理性能に影響を及ぼします。

解析結果の妥当性を判断する方法

次に示す要因で更新したグローバルバッファが増加し,更新バッファフラッシュ回数や,同じデータを再度取り込むためのバッファ回数(参照GET回数)が増加していると考えられます。

  • グローバルバッファプールの面数が少なくなっています。

  • 処理件数中に占める更新比率が高くなっています。

このため,処理件数に対して,更新バッファフラッシュ回数が多いか少ないかを判断してください。

対策方法
●更新バッファフラッシュ回数が多い場合
  1. pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。

  2. pdbufferオペランドの指定値を見直してください。一つのグローバルバッファに複数のRDエリアを割り当てている場合は,更新する表と参照する表を別々のRDエリアに分け,それぞれにグローバルバッファを割り当ててください。一つのグローバルバッファに一つのRDエリアを割り当てている場合は,インデクスと表を別々のRDエリアに格納して,インデクス専用のグローバルバッファを割り当ててください。又は,表を横分割してください。

  3. デファードライト処理をする場合(pd_dbsync_pointオペランドにsyncを指定するか又は省略した場合)は,pdbufferオペランドの-wオプションの値(デファードライト処理で出力するページの比率)を大きくしてください。

  4. デファードライト処理をする場合(pd_dbsync_pointオペランドにsyncを指定するか又は省略した場合)は,デファードライトトリガの要求比率(pd_dbbuff_rate_updpageオペランド)の値を小さくします。

●更新バッファフラッシュ回数が少ない場合

特に問題はありません。

(5) 参照バッファフラッシュ回数(RFFLS)を確認してください

確認する目的

この情報は,参照バッファフラッシュ回数の妥当性を判断するために取得します。処理件数に対して,参照されたバッファの内容を無効にしてから,新しいページを入力するための空きバッファを作成した回数(参照バッファフラッシュ回数)が多くなると,入力回数が増加し,トランザクションの処理性能に影響を及ぼします。

解析結果の妥当性を判断する方法
●処理件数に対して参照バッファフラッシュ回数が多い場合

次に示す要因で,参照バッファ数が増加していると考えられます。

  • グローバルバッファプールの面数が少ないです。

  • 処理件数中に占める参照の比率が高くなっています。

このため,メモリ上で無効にするバッファや,同じデータを再度取り込むためのバッファが頻繁に発生しています。

●参照要求ヒット率が低く,参照バッファフラッシュ回数が多い場合

次に示す要因で,更新バッファ数が増加していると考えられます。

  • グローバルバッファプールの面数が少ないです。

  • 処理件数中に占める更新の比率が高くなっています(pd_dbbuff_lru_option=SEPARATEを指定しているか,又はこのオペランドを省略している場合)。

更新するバッファが増加すると,参照要求ヒット率が低下します。このため,メモリ上で無効になるバッファや,同じデータを再度取り込むための入出力が頻繁に発生しています。

対策方法
●参照バッファフラッシュ回数が多い場合

参照要求ヒット率が高い場合は,特に問題ありません。参照要求ヒット率が低い場合は,次に示す処置をしてください。

  • pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。

  • pd_dbbuff_lru_optionオペランドにMIXを指定してください。

●参照バッファフラッシュ回数が少ない場合

特に問題はありません。

(6) 実READ回数(READ),実WRITE回数(WRITE)を確認してください

確認する目的

この情報は,ディスクへの入出力回数の妥当性を判断するために取得します。

処理する件数に対して,ディスクへの入出力回数(HiRDBファイルに対する入出力回数)が多いと,トランザクションの処理性能及びスループットに影響を及ぼします。なお,データベースアクセスに関するHiRDBファイルの統計から,各RDエリアの情報と一緒に検討すると,効率良く入出力回数を削減できます。

解析結果の妥当性を判断する方法
●入力回数が多い場合
  1. 同じグローバルバッファを使用するRDエリアの数が多く,各々のRDエリアに対するアクセス頻度が高い状態のときは,バッファヒット率を高くできないために,入力が頻繁に発生していると考えられます。

  2. 参照要求ヒット率が低いときは,次に示す要因によってページ入力が頻繁に発生していると考えられます。

  • グローバルバッファプールの面数が少ないです(pd_dbbuff_lru_option=MIXを指定している場合)。

  • 処理件数中に占める更新の比率が高いため,参照バッファを圧迫しています(pd_dbbuff_lru_option=SEPARATEを指定しているか,又はこのオペランドを省略している場合)。

●出力回数が多い場合
  1. 参照要求ヒット率よりも更新バッファヒット率を重視している場合は,該当するグローバルバッファに対する処理要求は,更新が多いと考えられます。

  2. 更新GET回数が参照GET回数よりも多い場合は,「更新バッファフラッシュ回数(UPFLS)を確認してください」で示した更新バッファフラッシュによる影響が出ていると考えられます。

対策方法
●参照要求ヒット率が低いときに,入力回数が多い場合
  1. pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。

  2. pdbufferオペランドの指定値を見直してください。一つのグローバルバッファに複数のRDエリアを割り当てている場合は,特にアクセス頻度の高い表には,一つのグローバルバッファプールを割り当ててください。インデクスと表を同じグローバルバッファプールに割り当てている場合は,インデクス専用のグローバルバッファプールを割り当ててください。一つのグローバルバッファに一つのRDエリアを割り当てている場合は,表を横分割してください。

  3. デファードライト処理をする場合(pd_dbsync_pointオペランドにsyncを指定するか又は省略した場合)は,pdbufferオペランドの-wオプションの値(デファードライト処理で出力するページの比率)を大きくしてください。

  4. pd_dbbuff_lru_optionオペランドにMIXを指定してください。

●出力回数が多い場合
  1. pd_dbsync_point=commitを指定している場合

    更新要求ヒット率が高い場合は特に問題ありません。低い場合は,pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。

  2. pd_dbsync_point=syncを指定しているか,又はこのオペランドを省略した場合

  • pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。

  • デファードライト処理をする場合(pd_dbsync_pointオペランドにsyncを指定するか又は省略した場合)は,pdbufferオペランドの-wオプションの値(デファードライト処理で出力するページの比率)を大きくしてください。また,シンクポイントの間隔を長くしてください。

(7) バッファ排他待ち回数(WAITL)を確認してください

確認する目的

RDエリアにグローバルバッファプールを割り当てるときの妥当性を判断するために取得します。同時実行するトランザクション数が増加すると,同一のグローバルバッファプールにアクセスする処理で競合し,排他待ちが発生します。

バッファの排他待ち回数が増えると,トランザクションの処理時間が長くなるため,グローバルバッファプールの割り当て方法を検討する必要があります。

解析結果の妥当性を判断する方法
  1. 処理件数に対して,バッファの排他待ち回数が多い場合,同一のグローバルバッファプールを同時に実行しているユーザの数が多いため,バッファアクセスの負荷が高くなっていると考えられます。

  2. 処理件数に対して,バッファの排他待ち回数が多い場合,同一のグローバルバッファを使用する表が複数定義されているため,バッファへのアクセスが集中していると考えられます。

対策方法
  1. 複数の表を一つのRDエリアに格納している場合は,表を複数のRDエリアに分けて格納し,それぞれのRDエリアを別々のグローバルバッファに割り当ててください。

  2. 一つのグローバルバッファプールに複数のRDエリアを割り当てている場合,一つのグローバルバッファプールに割り当てるRDエリアの数を少なくしてください。

  3. 表とインデクスを同じRDエリアに格納している場合,表とインデクスを別々のRDエリアに格納し,インデクス専用のグローバルバッファを割り当ててください。

(8) バッファ不足発生回数(INSB)を確認してください

確認する目的

これらの情報はグローバルバッファプールのバッファ面数の妥当性を判断するために取得します。HiRDBでは,アクセスするページを読み込むために使用するグローバルバッファがすべて使用中の場合,トランザクションを無効にします。このため,バッファ面数が少ないと,トランザクション集中時に実行できないトランザクションが発生するおそれがあります。

解析結果の妥当性を判断する方法

次に示す項目に該当する場合は,バッファ面数が少ないと判断できます。

  • バッファ不足発生回数が0以外の場合

対策方法
  1. pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。

  2. 特に,入出力の集中するRDエリアは,一つのグローバルバッファプールを複数のRDエリアで共用するのをやめて,専用のグローバルバッファプールを割り当ててください。

(9) プリフェッチ入力ページ数(PRRED),プリフェッチヒット率(PRHIT)を確認してください

確認する目的

これらの情報は,プリフェッチ機能の妥当性を判断するために取得します。全件検索や範囲検索などの場合,プリフェッチ機能を使用することで処理時間が短縮できます。プリフェッチ機能は,大量検索をする場合に処理時間の短縮に影響を及ぼします。

解析結果の妥当性を判断する方法

プリフェッチヒット率が8割以下の場合,検索対象表のデータ又はインデクスの格納ページが不連続であると考えられます。

対策方法

検索対象表の再編成をしてください。表の再編成ができない状況で,極端にヒット率が悪い場合は,プリフェッチ機能の使用をやめてください(pdbufferオペランドの-mオプションを省略するか,又は-mオプションに0を指定してください)。

(10) プリフェッチバッファ不足発生回数(PRINS)を確認してください

確認する目的

この情報は,プリフェッチ機能の妥当性を判断するために取得します。プリフェッチのためのバッファが不足すると,一括入力ができないユーザはプリフェッチの効果が得られません。

解析結果の妥当性を判断する方法

プリフェッチバッファ不足発生回数が0の場合は問題ありません。0以外の場合は,同時実行最大プリフェッチ数がpdbufferオペランドの-mオプションの値よりも多いことが考えられます。

対策方法

pdbufferオペランドの-mオプションの値(同時実行最大プリフェッチ数)を大きくしてください。ただし,この指定を大きくするとグローバルバッファプール用共用メモリが増加するため,メモリ所要量を見積もり直してください。