次のような症状が出るシナリオは、高負荷であると判断できます。
ユーザー要求が失敗する
データベースで複数のタイムアウトが発生し、「トランザクションが異常終了した」というメッセージが表示される
履歴ファイルに「HIGH LOAD」警告が頻繁に出力される
障害が散発する
高負荷の問題が疑われる場合は、次の点を考慮してください。
多くの場合、これらの問題すべては、より多くの CPU パワーを利用できるようにすることで解決できます。
すべてのユーザー操作 (delete、insert、update) はタプルログに記録されて、実行されます。タプルログは、次の理由でいっぱいになる可能性があります。
CPU またはディスク入出力の競合が原因で実行速度が低下する
ミラーノードでログレコードを受信する速度が遅い。これには次のような原因があります。
ネットワーク競合のため、ログレコードをミラーノードに転送できない
ミラーノード側の CPU およびディスクの競合のため、受信済みのログレコードの処理速度が不十分 (履歴ファイルの「log throw due to...」メッセージ)。
タプルログの容量がなくなると、履歴ファイルにタプルログの HIGH LOAD を示すメッセージが出力されます。
「CPU 利用率の向上」の説明に従って、CPU の使用量をチェックします。
CPU の利用状況に問題がなければ、ディスク入出力をチェックします。ディスク競合の兆候がある場合は、hadbm set DataBufferPoolSize=... でデータバッファーサイズを大きくして、ログレコード処理中のページフォルトを回避します。ディスク競合が発生する場合は、「ディスクの競合はないか ?」で説明している解決法に従います。
ネットワーク競合の兆候がないかどうかチェックし、ボトルネックを解決します。
hadbm set LogBufferSize=... を使用して、タプルログバッファーを大きくします。
CPU またはディスク入出力に問題があると、スケジュールされても処理されない node-internal 操作が異常に増加します。
node-internal ログの容量がなくなると、履歴ファイルに node-internal ログの HIGH LOAD を示すメッセージが出力されます。
「CPU 利用率の向上」の説明に従って、CPU の使用量をチェックします。
CPU の利用状況に問題がなければ、ディスク入出力をチェックします。ディスク競合の兆候がある場合は、hadbm set DataBufferPoolSize=... でデータバッファーサイズを大きくして、ログレコード処理中のページフォルトを回避します。ディスク競合が発生する場合は、「ディスクの競合はないか ?」で説明している解決法に従います。
この状況を識別するための主な追加の症状は、次のとおりです。
エラーコード 2080 または 2096 がクライアントに配信される。
hadbm resourceinfo --locks で表示される割り当て済みのすべてのロックが、常時使用中である
ノード上で実行されるトランザクションで、そのノードに割り当てられたロックの 25% を超える数のロックを使用することはできません。「repeatable read」遮断レベルで実行される読み取りトランザクション、および更新/挿入/削除トランザクションでは、トランザクションが終了するまでロックが保持されます。したがって、長いトランザクションを小さいトランザクションに分割することをお勧めします。
hadbm set NumberOfLocks= を使用して、ロックの数を増やします。
ほとんどの状況では、負荷を減らすかリソースの可用性を高めることでホストのパフォーマンスを改善できます。次に示す手順はさらに広範囲に適用できます。
ハードウェアの性能が高い (大容量内部メモリー、高速プロセッサ、マルチプロセッサ) ホスト上でノードを実行します。
物理ディスクを追加し、複数のデータデバイスを使用します。1 台の物理ディスク上に複数のデバイスを配置しないようにします。
新しいホスト上にノードを追加し、新しいノードを活用できるようにデータを再断片化します。
設定変数を変更して、サイズの大きいメモリーセグメントまたは内部データ構造を割り当てます。
これに加え、『パフォーマンスチューニングガイド』の説明に従って次のリソースを調整することにより、「HIGH LOAD」の問題を改善できます。
表 3–1 HADB のパフォーマンスチューニングプロパティー
リソース |
プロパティー |
---|---|
データベースバッファーのサイズ |
hadbm attribute DataBufferPoolSize |
タプルログバッファーのサイズ |
hadbm attribute LogBufferSize |
ノード内部ログバッファーのサイズ |
hadbm attribute InternalLogBufferSize |
データベースロックの数 |
hadbm attribute NumberOfLocks |