スケーラブルデータベースサーバ HiRDB Version 8 システム運用ガイド(UNIX(R)用)

[目次][索引][前へ][次へ]

22.1.2 統計解析ユティリティで統計情報を取得した場合

<この項の構成>
(1) グローバルバッファプールのヒット率(GBHIT)を確認してください
(2) 更新バッファフラッシュ回数(UPFLS)を確認してください
(3) 参照バッファフラッシュ回数(RFFLS)を確認してください
(4) 実READ回数(READ),実WRITE回数(WRITE)を確認してください
(5) 出力待ち発生回数(WAITW)を確認してください
(6) バッファ排他待ち回数(WAITL)を確認してください
(7) 最大同時要求バッファ面数(MAXB),バッファ不足発生回数(BFINS)を確認してください
(8) プリフェッチ入力ページ数(PRRED),プリフェッチヒット回数(PRHIT),プリフェッチヒット率(HIT)を確認してください
(9) プリフェッチバッファ不足発生回数(PRINS)を確認してください
(10) シンクポイント出力ページ数(SYNCW)を確認してください
(11) グローバルバッファの排他処理の排他競合待ち発生率(SLEPR)を確認してください
(12) スリープ処理実行での,バッファの排他処理のスリープ処理実行回数の平均値(SLEPA)を確認してください
(13) シンクポイント時のバッファプール排他占有時間(SYNCL)を確認してください
(14) シンクポイント時の参照要求ヒットによるデータベース書き込み処理代行回数(ALTRW)を確認してください

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

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

解析結果の妥当性を判断する方法
グローバルバッファプールのヒット率(GBHIT)が80%以上であるかどうかを確認してください。

対策方法
●グローバルバッファプールのヒット率が80%未満の場合
pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。
●グローバルバッファプールのヒット率が80%以上の場合
特に問題はありません。さらに,ヒット率を向上するには,グローバルバッファの面数を増やしてください。

(2) 更新バッファフラッシュ回数(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オペランド)の値を小さくします。
●更新バッファフラッシュ回数が少ない場合
特に問題はありません。

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

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

解析結果の妥当性を判断する方法
●処理件数に対して参照バッファフラッシュ回数が多い場合
次に示す要因で,参照バッファ数が増加していると考えられます。
  • グローバルバッファプールの面数が少ないです。
  • 処理件数中に占める参照の比率が高くなっています。
このため,メモリ上で無効にするバッファや,同じデータを再度取り込むためのバッファが頻繁に発生しています。
●参照要求ヒット率が低く,参照バッファフラッシュ回数が多い場合
次に示す要因で,更新バッファ数が増加していると考えられます。
  • グローバルバッファプールの面数が少ないです。
  • 処理件数中に占める更新の比率が高くなっています(pd_dbbuff_lru_option=SEPARATEを指定しているか,又はこのオペランドを省略している場合)。
更新するバッファが増加すると,参照要求ヒット率が低下します。このため,メモリ上で無効になるバッファや,同じデータを再度取り込むための入出力が頻繁に発生しています。

対策方法
●参照バッファフラッシュ回数が多い場合
参照要求ヒット率が高い場合は,特に問題ありません。参照要求ヒット率が低い場合は,次に示す処置をしてください。
  • pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。
  • pd_dbbuff_lru_optionオペランドにMIXを指定してください。
●参照バッファフラッシュ回数が少ない場合
特に問題はありません。

(4) 実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回数よりも多い場合は,「(2)更新バッファフラッシュ回数(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オプションの値(デファードライト処理で出力するページの比率)を大きくしてください。また,シンクポイントの間隔を長くしてください。

(5) 出力待ち発生回数(WAITW)を確認してください

確認する目的
RDエリアにグローバルバッファを割り当てるときの妥当性を判断するために取得します。同一ページに対するアクセス要求が競合した場合,次に示す要因でデータの入出力処理に関する待ちが発生します。
  • HiRDBファイルに出力するときに,更新要求が競合すると,HiRDBファイルへの出力完了待ちが発生します。

解析結果の妥当性を判断する方法
次に示す要因で,出力待ち発生回数が多くなっていることが考えられます。
  1. 該当するページに対して,デファードライト処理で出力する比率が高いために,HiRDBファイルへの出力処理と競合しています。
  2. データベース作成ユティリティのデータロードやデータベース再編成ユティリティのリロード処理で,グローバルバッファプールを大量に使用しているため,グローバルバッファプール中の更新バッファ数が増加しています。

対策方法
  1. 大量のデータを持つ表の場合は,表又はインデクスの分割を検討してください。
  2. 一つ又は複数のRDエリアを構成するHiRDBファイルを別々のディスクに分けてください。
  3. データベース作成ユティリティのデータロードやデータベース再編成ユティリティのリロード処理で大量のデータを使用する場合,一括出力ページ数(−nオプション)を使用してください。なお,データベース再編成ユティリティを適用するときは,該当するデータがFIX属性の表のときです。
  4. 出力待ち発生回数が多い場合でデファードライト処理をするとき(pd_dbsync_pointオペランドにsyncを指定するか又は省略したとき)は,デファードライトトリガの要求比率(pd_dbbuff_rate_updpageオペランド)の値を小さくします。

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

確認する目的
RDエリアにグローバルバッファプールを割り当てるときの妥当性を判断するために取得します。同時実行するトランザクション数が増加すると,同一のグローバルバッファプールにアクセスする処理で競合し,排他待ちが発生します。
バッファの排他待ち回数が増えると,トランザクションの処理時間が長くなるため,グローバルバッファプールの割り当て方法を検討する必要があります。

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

対策方法
  1. 複数の表を一つのRDエリアに格納している場合は,格納するRDエリアを別々のグローバルバッファに割り当ててください。
  2. 一つのグローバルバッファプールに複数のRDエリアを割り当てている場合,一つのグローバルバッファプールに割り当てるRDエリアの数を少なくしてください。
  3. 表とインデクスを同じRDエリアに格納している場合,表とインデクスを別々のRDエリアに格納し,インデクス専用のグローバルバッファを割り当ててください。

(7) 最大同時要求バッファ面数(MAXB),バッファ不足発生回数(BFINS)を確認してください

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

解析結果の妥当性を判断する方法
次に示す項目に該当する場合は,バッファ面数が少ないと判断できます。
  1. 最大同時要求バッファ面数が,グローバルバッファ面数に近い値又は同じ値になっている場合に,バッファ不足発生回数が0のとき(ただし,参照バッファヒット率や更新バッファヒット率が高い場合を除きます。参照バッファヒット率や更新バッファヒット率が高いときは,最大限の性能を引き出していると考えられます)
  2. 最大同時要求バッファ面数が,グローバルバッファ面数に近い値又は同じ値になっている場合に,バッファ不足発生回数が多いとき
  3. バッファ不足発生回数が0以外の場合

対策方法
  1. pdbufferオペランドの-nオプション(グローバルバッファのバッファ面数)の値を大きくしてください。
  2. 特に,入出力の集中するRDエリアは,一つのグローバルバッファプールを複数のRDエリアで共用するのをやめて,専用のグローバルバッファプールを割り当ててください。

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

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

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

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

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

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

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

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

(10) シンクポイント出力ページ数(SYNCW)を確認してください

確認する目的
この情報はシンクポイントダンプの出力間隔の妥当性を判断するために取得します。通常,シンクポイント時にグローバルバッファプールのすべての更新ページをデータベースに出力するため,トランザクションの性能が低下する要因になります。これを防止するため,HiRDBでは内部処理(プレシンク処理とデファードライト処理)で,シンクポイント時の出力ページ数を削減しています。このため,グローバルバッファをチューニングすると,シンクポイントダンプの出力間隔に影響を及ぼします。

解析結果の妥当性を判断する方法
シンクポイント時の出力ページ数が,グローバルバッファ面数の50%よりも多くなっていないか確認してください。

対策方法
pdbufferオペランドの-wオプションの値(デファードライト処理で出力するページの比率)を大きくしてください。

(11) グローバルバッファの排他処理の排他競合待ち発生率(SLEPR)を確認してください

確認する目的
グローバルバッファの排他獲得処理がどの程度競合しているかが分かります。競合度が高いとグローバルバッファの排他獲得処理の処理待ちが発生する可能性が高く性能低下の一因になります。

解析結果の妥当性を判断する方法
「グローバルバッファの排他処理の排他競合待ち発生率(SLEPR)」の値が1以上の場合は,グローバルバッファの排他獲得処理の競合度が高いと判断できます。

対策方法
pd_dbbuff_lock_release_detectオペランドの値を確認して,次に示すどれかの対策をしてください。
●pd_dbbuff_lock_release_detect=interval又はswitchの場合
  1. CPU使用率が70%以下であり,かつ運用上の許容範囲内で次のことをしてください。
    ・pd_dbbuff_lock_spn_countオペランドの値を大きくしてください。
    ・pd_dbbuff_lock_intervalオペランドの値を小さくしてください。
    Linux(IPF)版を使用している場合で,前記の対策で効果が出ないときは,更に次の対策を行ってください。
    pd_dbbuff_interval_unitオペランドにusecを指定して,pd_dbbuff_lock_intervalオペランドで指定する排他獲得待ち処理中のインターバル時間の単位をミリ秒からマイクロ秒に変更してください(排他獲得待ち処理中のインターバル時間を更に短くしてください)。
    最初は,pd_dbbuff_lock_intervalオペランドに900マイクロ秒程度の値を指定してトランザクション性能を評価してください。さらに,性能向上したい場合は,pd_dbbuff_lock_intervalオペランドの値を小さくしてください。
    なお,排他獲得待ち処理中のインターバル時間の単位をミリ秒からマイクロ秒に変更したり,この時間を短くしたりすると,CPUに負荷が掛かるため,CPU使用率を確認しながらこの対策を実施してください。
  2. グローバルバッファの割り当て方を見直してください。
    アクセス頻度が高い表を格納しているRDエリアには専用のグローバルバッファを割り当ててください。既に専用のグローバルバッファを割り当てている場合は,表を横分割して各RDエリアに専用のグローバルバッファを割り当てるか,又はアクセス頻度が高い表を別のRDエリアに格納してそのRDエリアに専用のグローバルバッファを割り当ててください。
●pd_dbbuff_lock_release_detect=pipe(省略値)の場合
  1. pd_dbbuff_lock_release_detectオペランドにintervalを指定してください。そして,前記の1の対策を行ってください。
  2. 前記の2の対策を行ってください。

(12) スリープ処理実行での,バッファの排他処理のスリープ処理実行回数の平均値(SLEPA)を確認してください

確認する目的
ジョブの多重実行中に,極端に処理時間が長いジョブがある場合,グローバルバッファの排他獲得処理の遅延によるものなのかどうかを判断できます。

解析結果の妥当性を判断する方法
次の条件を満たす場合,グローバルバッファの排他獲得処理時間を短縮できる可能性があります。
  • 「スリープ処理実行での,バッファの排他処理のスリープ処理実行回数の平均値(SLEPA)」の値が1以上2未満
  • スリープ処理を1回以上実行した場合と,1回も実行しなかった場合とで,グローバルバッファの排他獲得処理の処理時間に差がない

対策方法
pd_dbbuff_lock_release_detectオペランドの値を確認して,次に示すどちらかの対策をしてください。
●シンクポイント時にトランザクションの沈み込みがない場合
  1. pd_dbbuff_lock_release_detectオペランドにinterval又はswitchを指定してください。
  2. CPU使用率が70%以下であり,かつ運用上の許容範囲内で次のことをしてください。
    ・pd_dbbuff_lock_intervalオペランドに10を指定してください。
    ・pd_dbbuff_lock_spn_countオペランドに100を指定してください。
    上記の設定をしても,SLEPAの値が2以上の場合は,2未満になるまでpd_dbbuff_lock_spn_countオペランドの値を増やしてください。
  3. グローバルバッファの割り当て方を見直してください。
    アクセス頻度が高い表を格納しているRDエリアには専用のグローバルバッファを割り当ててください。既に専用のグローバルバッファを割り当てている場合は,表を横分割して各RDエリアに専用のグローバルバッファを割り当てるか,又はアクセス頻度が高い表を別のRDエリアに格納してそのRDエリアに専用のグローバルバッファを割り当ててください。
●シンクポイント時にトランザクションの沈み込みがある場合
(13)シンクポイント時のバッファプール排他占有時間(SYNCL)を確認してください」を参照してください。

(13) シンクポイント時のバッファプール排他占有時間(SYNCL)を確認してください

確認する目的
シンクポイント時にトランザクションの沈み込みが発生している場合,シンクポイントの対象となるバッファのサーチ処理と,トランザクションのバッファアクセスとで,グローバルバッファの排他が競合していることが考えられます。競合している場合,「シンクポイント時のバッファプール排他占有時間(SYNCL)」の間,トランザクションのバッファアクセスが待たされます。

解析結果の妥当性を判断する方法
シンクポイント時にトランザクションの沈み込みが発生している場合,「シンクポイント時のバッファプール排他占有時間(SYNCL)」が排他待ち時間として長過ぎないかを判断してください。

対策方法
pd_dbsync_lck_release_countオペランドの値を小さくし,「シンクポイント時のバッファプール排他占有時間(SYNCL)」が排他待ち時間として許容できる範囲になるよう調整してください。

(14) シンクポイント時の参照要求ヒットによるデータベース書き込み処理代行回数(ALTRW)を確認してください

確認する目的
シンクポイント時に参照トランザクションの沈み込みが発生している場合,シンクポイントの対象となるバッファの参照要求のバッファヒット時に,トランザクションの延長で代行出力していることが考えられます。

解析結果の妥当性を判断する方法
シンクポイント時に参照トランザクションの沈み込みが発生している場合,「シンクポイント時の参照要求ヒットによるデータベース書き込み処理代行回数(ALTRW)」が,沈み込みの要因になっていないかどうかを確認してください。

対策方法
pd_dbsync_altwrite_skipオペランドにYを指定すると,シンクポイント時の参照要求ヒットによるデータベース書き込み処理を抑止できます。ただし,この場合,シンクポイント取得処理時間が長くなるため,デファードライト書き込み処理の並列WRITE機能を使用して,書き込み処理に掛かる負荷を分散させることをお勧めします。デファードライト書き込み処理の並列WRITE機能については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。