DB2 の初期化パラメータ
次に示す DB2 の一部のパラメータは、ArcSDE ジオデータベースを動作させる際に変更するべき場合があります。
ロックに影響するパラメータ
クライアント アプリケーションやデータベース設定によっては、デッドロックはめずらしい現象ではありません。ステート系統が深いと、この問題が悪化する場合があることに注意してください。幸い、DB2 には、ロックリストのサイズ(LOCKLIST)、アプリケーションのロックがロック リストに占める割合(MAXLOCKS)、リクエストがロックの取得を待つ時間の長さ(LOCKTIMEOUT)、デッドロック検知の間隔(DLCHKTIME)、およびデッドロックのロールバック(DB2LOCK_TO_RB)を制御するチューニング パラメータがあります。
DB2 9 では、LOCKLIST および MAXLOCKS のデフォルト値は AUTOMATIC で、パラメータがセルフ チューニングされます。そのため、DB2 のメモリ チューナでは、メモリ消費が異なるときにメモリ リソースのサイズが動的に決定されます。自動チューニングが動作するのは、データベースでセルフ チューニング メモリが有効(SELF_TUNING_MEM=ON)な場合だけです。
ロック リストの設定を表示するには、次のコマンドを実行します。
db2 get db cfg
Max storage for lock list (4KB) (LOCKLIST) = 50
Interval for checking deadlock (ms) (DLCHKTIME) = 10000
Percent. of lock lists per application (MAXLOCKS) = 22
Lock time out (sec) (LOCKTIMEOUT) = -1
Max number of active applications (MAXAPPLS) = AUTOMATIC
DB2LOCK_TO_RB レジストリ変数を確認するには、db2set を使用して「DB2LOCK_TO_RB=」を検索します。
-
LOCKLIST と MAXLOCKS
ロック リストの容量とロック エスカレーションの閾値を引き上げるには、それぞれ LOCKLIST パラメータと MAXLOCKS パラメータを変更します。DB2 8 で LOCKLIST を設定する手順は次のとおりです。
- アクティブ アプリケーションの最大数を見積もります(MAXAPPLS が設定されている場合は MAXAPPLS)。
- アプリケーションあたりの平均ロック数を見積もります。
- ロック リストのサイズの下限と上限を見積もります。
(Avg # locks per application * 36 * MAXAPPLS) / 4096 (Avg # locks per application * 72 * MAXAPPLS) / 4096
72 はオブジェクトの最初のロックのバイト数、36 はオブジェクトの追加のロックのバイト数です。
- LOCKLIST の初期値として、上限および下限の範囲内の値を設定します。
例を次に示します。
db2 update db cfg using LOCKLIST 200
- 1 つのアプリケーションでロック エスカレーションが発生する前に消費できるロック リストの割合を決定します。これは、平均的な割合または通常のトランザクション量に基づいて決定します。
たとえば、アプリケーションのロックを平均ロック数の 2 倍まで許可する場合は、次のようになります。
100 * (Avg # locks per application * 2 * 72 bytes per lock) / (LOCKLIST * 4096 bytes)
次に、MAXLOCKS を次のように設定します。db2 update db cfg using MAXLOCKS 22
- ロック リスト パラメータをさらに調整するには、スナップ ショット モニタとイベント モニタを使用する必要があります。データベース レベルで次の情報を調べます。
- 使用中のロック リストの合計メモリ
- 発生したロック エスカレーションの数
- イベント モニタを使用して、トランザクションが保持するロックの最大数を監視します。
-
LOCKTIMEOUT
ロックの取得を試行する際に DB2 が待機する時間を設定するには、LOCKTIMEOUT を変更します。
-
DLCHKTIME
デッドロックの検知間隔を調整するには、DLCHKTIME を変更します。
-
DB2LOCK_TO_RB
DB2LOCK_TO_RB は、ロックを待機する時間が LOCKTIMEOUT を過ぎたときのトランザクションの動作を指定します。デフォルトでは、ロックがタイムアウトすると、リクエストされたトランザクションがロールバックします。この振舞いを変更して、ロック リクエストを発行したステートメントだけをロールバックするには、DB2LOCK_TO_RB を「db2set DB2LOCK_TO_RB=STATEMENT」により変更します。ただし、ArcSDE に関しては、デフォルトの設定で十分です。
これらのパラメータの設定については、「DB2 データベースでのデッドロック」をご参照ください。
これらのパラメータを正しく設定する方法については、DB2 のドキュメントまたはパフォーマンス チューニング ガイドをご参照ください。