Sun Java System Application Server Enterprise Edition 8.2 トラブルシューティングガイド

HADB のパフォーマンスの問題

HADB へのトランザクションが遅延したり異常終了したりすると、パフォーマンスが影響を受けます。一般にこうした状況は、システムリソースの不足が原因です。待機時間が 5 秒を超えると、トランザクションの異常終了を引き起こします。ノードの障害も、クラッシュ時にそのノード上のアクティブトランザクションが異常終了する原因となります。二重障害 (両方のミラーの障害) が発生すると、HADB が使用不能になります。障害の原因は、通常、HADB の履歴ファイルに記録されています。

問題を特定するには、次の点を考慮します。

CPU またはメモリーのリソースが不足していないか、あるいはスワッピングが多すぎないか ?

説明

Process blocked for x sec, max block time is 2.500000 sec 」というエラーが原因で、ノードの再起動または二重障害が発生します。この場合、x はプロセスがブロックされた時間の長さで、それが 2.5 秒を超えました。

HADB ノードスーパーバイザプロセス (NSUP/clu_nsup_srv) では、前回、プロセスで何らかの監視操作を実行した時刻からの経過時間を追跡しています。その時間が指定された最大値 (デフォルトでは 2500ms) を超えると、NSUP は、ブロックされた時間が長すぎると判断しノードを再起動します。

NSUP が 2.5 秒より長くブロックされると、ノードの再起動が引き起こされます。ミラーノードが同じホスト上に配置されていると、二重障害の恐れが高まります。ミラーホスト上でブロッキングが同時に発生するときも、二重障害になる可能性があります。

こうした状況が発生する恐れが特に高いのは、共存構成の場合のように、システム内に CPU やメモリーの使用で競合するほかのプロセスが存在する場合です。プロセスが再スケジュールされるたびに、大規模なスワッピングや複数のページフォルトが発生するからです。

システムクロックの負の調整も NSUP がブロックされる原因になります。

解決法

HADB ノードに十分なシステムリソースが割り当てられるようにします。また、時刻同期デーモンで 2 秒を超える大幅な調整が行われないようにします。

ディスクの競合はないか ?

説明

ディスクの競合は、ディスク装置に対するユーザーデータの読み取り/書き込み、および HADB から履歴ファイルへの書き込みに悪影響を与えることがあります。重度のディスク競合は、ユーザートランザクションの遅延や異常終了の原因となります。履歴ファイルへの書き込みが遅延すると、ノードの再起動が発生することがあり、最悪の場合、二重障害になります。

ディスクの競合は、データ、ログデバイス、および履歴ファイル用に使用しているディスクのディスク入出力を OS から監視することで識別できます。履歴ファイルへの書き込み遅延は、HADB 履歴ファイルに記録されます。「NSUP BEWARE timestamp Last flush took too long (x msecs).」というメッセージが遅延を表しています。

この警告は、ディスク入出力に要した時間が異常に長いという意味です。遅延が 10 秒を超えると、ノードスーパーバイザによって trans プロセスが再起動され、次のようなエラーメッセージが表示されます。

Child process trans0 10938 does not respond.
Child died - restarting nsup.
Psup::stop: stopping all processes.

このメッセージは、trans (clu_trans_srv ) プロセスが、ほかの動作 (たとえば、履歴ファイルへの書き込みの待機中) のためにビジー状態になったままで、trans プロセスのハートビートをチェックするノードスーパーバイザの要求に応答できないことを示しています。このため、nsuptrans が終了していると判断され、プロセスが再起動されます。

プロセスが多すぎる (多くの HADB ノードはほかのプロセスと共存している) ためにオペレーティングシステムがオーバーロード状態になると、入出力動作のスケジューリングに遅延が生じることがあります。HADB 関連の入出力処理が遅延すると、HADB ノードから履歴ファイルに「HADB warning: Schedule of async <read,write\> operation took ...」というメッセージが書き込まれます。

この問題は特に、Red Hat AS 2.1 で複数の HADB ノードが同じホスト上に配置され、すべてのノードでデバイスの配置に同じディスクを使用する場合に生じることが報告されています。

解決法

ノードで使用するデバイスの配置には、ノードごとに 1 つのディスクを使用します。ノードに複数のデータデバイスがあってディスクの競合が生じている場合は、1 つのデータデバイスを別のディスクに移動します。履歴ファイルにも同じ方法を適用できます。

すべてのデータおよびログデバイス、またすべての履歴ファイルが、NFS マウントディスクやほかのリモートマウントディスクではなく、ローカルディスク上に存在することを確認してください。

監視ツールで HADB ディスクの競合がなくならない場合は、データバッファープールサイズを大きくすることができます。

HADB データデバイス空間が不足していないか ?

説明

トランザクションが失敗する 1 つの理由として、データデバイス空間の不足も考えられます。このような状況が生じると、HADB から履歴ファイルに警告が書き込まれ、データを挿入したり更新したりするトランザクションが異常終了します。

通常、次のようなメッセージが表示されます。

HIGH LOAD: about to run out of device space, ...
HIGH LOAD: about to run out of device space on mirror node, ...

一般には、データデバイスにはユーザーデータの 4 倍以上の空き容量が必要とされています。詳しくは、『パフォーマンスチューニングガイド』を参照してください。

解決法 1

次のコマンドを使用して、データデバイスのサイズを大きくします。

hadbm set DeviceSize=size

この解決法は、すべてのノードで HADB データデバイス用に使用されている物理ディスクに空き容量がある場合にのみ適用できます。

HADBM により、データベースの各ノードが自動的に再起動されます。

解決法 2

HADB を停止して削除し、ノード数を増やしたり、データデバイスのサイズを大きくしたり、ノードごとに複数のデータデバイスを配置したりした、新しいインスタンスを作成します。ただし、この解決法では、Application Server で作成したすべての持続データおよびスキーマが消去されます。この手順の詳細については、『管理ガイド』を参照してください。

ほかの HADB リソースが不足していないか ?

HADB ノードの起動時に、次の割り当てが行われます。

HADB ノードでリソースの不足が発生すると、トランザクションが遅延したり異常終了したりします。ミラーノード間でリソース使用量情報がやり取りされるので、ミラーノード上で失敗する可能性が高い操作を、ノード側で遅延させたり中止したりできます。

トランザクションが繰り返し遅延すると、タイムアウトになってクライアントにエラーメッセージが返される場合があります。タイムアウトしない場合、クライアント側でわかるのは、システムでリソースが不足している時間帯にはパフォーマンスが低下するという現象のみです。

これらの問題は、「高負荷」の状況で頻繁に発生します。詳しくは、「高負荷の問題」を参照してください。