Sun Java System Application Server Enterprise Edition 8.2 パフォーマンスチューニングガイド

NumberOfLocks

行レベル操作ごとに、データベースのロックが必要です。ロックは、トランザクションがコミットまたはロールバックされるまで保持されます。ロックは行 (BLOB チャンク) レベルで設定されます。つまり、大きなセッション状態には多数のロックが必要になります。ロックは、主ノードとミラーノードの両方の操作に必要です。したがって、1 回のBLOB 操作で、2 つの HADB ノードに同じ数のロックが割り当てられます。

テーブルの再断片化が実行される場合、HADB には追加のロックリソースが必要です。そのため、通常のユーザートランザクションが獲得できるのは、割り当てられたロックのうち半分だけです。

利用可能なロックオブジェクトが HADB ノードにない場合は、ログファイルにエラーが書き込まれます。詳細については、『Sun Java System Application Server Enterprise Edition 8.2 Error Message Reference』の第 14 章「HADB Error Messages」を参照してください。

ロック数の計算

必要なロック数を計算するには、次のパラメータを見積もります。


注 –

ロックは、主レコードとホットスタンバイレコードの両方で保持されます。したがって、挿入、更新、および削除の操作では、1 回のトランザクションに、レコード数の 2 倍のロック数が必要です。読み取り操作では、主レコードのロックのみが必要です。再断片化と二次インデックスの作成が行われるときには、関係するテーブルのログレコードも、作成されるフラグメントレプリカに送信されます。その場合、1 回のトランザクションに、関係するレコード数の 4 倍のロック数が必要です (すべてのクエリーが、その影響を受けるテーブルに対するものと想定した場合)。


サマリー

再断片化が実行される場合、設定するロック数は次のようになります。

Nlocks = 4x (y/7000 + 2) = 2xy/3500 + 2x

それ以外の場合、設定するロック数は次のようになります。

Nlocks = 2x (y/7000 + 2) = xy/3500 + 4x

NumberOfLocks のチューニング

デフォルト値から開始します。Application Server のログファイルで、指示されたエラーコードを持つ例外を探します。再断片化が行われていない通常の操作では、クライアントアプリケーションはロック数の半分しか使用しないこともあります。

割り当てられたロック数と使用中のロック数に関する情報を得るには、次のコマンドを使用します。

hadbm resourceinfo --locks

たとえば、このコマンドを実行したときに、次のような出力が表示されることがあります。

Node No.     Avail             Free            Waits
0            50000             50000           na
1            50000             50000           na