ロッキング・サービスの使用
Net Search Extenderには、索引への並行アクセスを制御するさまざまなタイプのロックがあります。
検索要求の場合のようにテキスト索引を読み取るのみなのか、 索引作成の場合のようにテキスト索引への変更を計算してから ファイルに書き込む必要があるのかによって、異なるロックが 使用されます。
- S-lock
- 共有読み取り専用アクセス用。 例: 検索要求など。
- U-lock
- 同時読み取りアクセスに対する索引への変更 (更新) を計算している間の読み取りおよび書き込みアクセス用。
- X-lock
- 変更が実際に索引に書き込まれる間の短時間の排他的読み取り/書き込みアクセス用。
- IX-lock
- 更新処理が X-lock を待機中に新規の S-locks を阻止するために意図された排他的読み取り/書き込みアクセス用。
Db2® インスタンスごとに 1 つの Net Search Extender ロッキング・サービスがあります。 ロッキング・サービスは、複数のデータベースのロックを保持します。
ロッキング・サービス構成ファイルは、db2extlm.cfg です。 これは、 instance_owner_home/sqllib/db2ext (UNIX システムの場合) および sqllib\DB2INSTANCE\db2ext (Windows の場合) に保管されます。
- データベースの最大数
- データベースあたりの索引の最大数
- 索引あたりの許可されたロック (並行ユーザー) の最大数
- ロックを取得するための待機時間および試行回数
<default
maxDbs = " 8"
maxIdxPerDb = " 50"
maxLocksPerIdx = "100"
sWait = " 50"
uWait = " 500"
xWait = " 500"
sAttempt = "50"
uAttempt = "10"
xAttempt = "60"
latchTimeout = "80"
/>
<default attribute=value.../>
で、
属性とその意味は、次のとおりです。- maxDbs
- ロッキング・サービスで処理できるデータベースの数 (整数値 >1)。
- maxIdxPerDb
- ロックできるデータベースあたりの索引数 (整数値 >1)。 この値は、すべてのデータベースに対して同一です。
- maxLocksPerIdx
- 索引上に同時に存在できるロックの数 (整数値 >1)。 この値は、すべての索引に対して同一です。
共有メモリーの使用量は、前述の 3 つの「最大」値の積に比例します。 共有メモリーの使用量が必要以上に大きくならないように、使用している値が Db2 インスタンスの実際の構成に適していることを確認してください。 構成ファイル内で maxDbs、maxIdxPerDb、または maxLocksPerIdx の値を前述のデフォルト値よりも大きくする場合は、メモリーが十分にあることを確認して ください。 パーティション・データベース環境を使用している場合、maxIdxPerDb と maxLocksPerIdx の値については、その設定がすべてのパーティションで使用されるため、特に注意してください。 これは、物理マシン上の 1 つの Db2 インスタンスに対して複数の論理パーティションが定義されている場合、メモリー所要量を決定する上で特に重要となります。
- sWait/sAttempt
- S-lock を要求する際に sAttempt は、ロックが即時に付与されない場合に試行される数です。 sWait はこれらの 2 つの試行の間の待ち時間 (整数値 >1) です。 これらのパラメーターは、IX-locks にも適用されます。
- uWait/uAttempt
- U-lock を要求する際に uAttempt は、ロックが即時に付与されない場合に試行される数です。 uWait はこれらの 2 つの試行の間の待ち時間 (整数値 >1) です。
- xWait/xAttempt
- X-lock を要求する際に xAttempt は、ロックが即時に付与されない場合に試行される数です。 xWait はこれらの 2 つの試行の間の待ち時間 (整数値 >1) です。
- latchTimeout
- これは、インターバル・ロッキング・サービスの追加の待ち時間です。 ロックのための待ち時間の合計を決定するには、次の計算を使用します。
待機、試行、およびタイムアウト・パラメーターのデフォルト値を変更しないことを強くお勧めします。 待ち時間は、ミリ秒単位で計算されます。 試行のたびに latchTimeout 値は、 待ち時間の合計に追加される際に 2 倍にされることに注意してください。waiting time = # attempts * (# waits + (2 * # latchTimeout))