4.1  TSPIndexerコマンド実行時の留意点

TSPIndexerコマンドを効率良く実行するための留意点を次に説明します。

<この節の構成>
(1) 排他待ち時間の確保
(2) TSPIndexerコマンドの同時実行について
(3) デッドロックについて

(1) 排他待ち時間の確保

ある行に対し,更新トランザクション処理とTSPIndexerコマンドの処理が同時となった場合,あとから実行されたトランザクションが排他待ちとなります。このため,排他待ち時間は十分に確保する必要があります。

(2) TSPIndexerコマンドの同時実行について

一つの表に対しては,一つのTSPIndexerコマンドが処理対象とするようにしてください。一つの表に対して同時に複数のTSPIndexerコマンドを実行した場合,TSPIndexerコマンドごとに対象部分に排他が設定されます。このため,性能が低下したり,排他時間が長くなるためにほかの運用に影響を及ぼしたりする可能性があります。

TSPIndexerコマンドが同時に実行され,各コマンドが同じ行を更新する場合には,処理対象一覧は重複して作成されますが,各行を更新する前に,再度更新可否のチェックを実施します。このため,最初の更新要求を処理し,それ以降の更新要求はスキップするので,データが二重に登録されることはありません。

(3) デッドロックについて

TSPIndexerコマンドは,HiRDBのアプリケーションプログラムとして動作します。このため,同時に実行される他のトランザクションに排他状態によって,デッドロックが発生する可能性があります。

入力表と出力表が異なる運用では,TSPIndexerコマンドは次の順序で発行されます。

  1. 入力対象行をExeclusive Lockで排他
  2. 出力表の該当行に対するUPDATEによる排他

この順序の逆にほかのトランザクションから排他が行われる場合に,デッドロックが発生する可能性があります。