アクセスプランを取得すると、データベース資源(DSO)に対する占有単位、占有モードを知ることができます。競合するアプリケーションの占有単位および占有モードを確認して、デッドロックの発生の可能性が高い場合には、トランザクション占有のチューニングを実施します。
カーソルを使用してデータベースの更新を行う場合、カーソルの更新可能性句にFOR UPDATEを指定すると、占有モードは非共用モードとなります。読み込み時から非共用モードでデータベース資源を占有するため、デッドロックが発生しにくくなります。
アクセスプランの占有範囲が“DSI”となっている場合は、表の全件検索やインデックスの全件検索が選択されています。DSI全体を占有したくない場合は、検索に利用できるインデックスを定義して、データベースの読込み範囲を小さくします。
なお、占有単位に“REC”が表示されている場合は、行単位の排他を指定している場合です。このときのアクセスモデルが表の全件検索であると、占有のためにレコード件数に比例したメモリを使用するため、表の全件検索とならないようにデータベースをチューニングしなければなりません。
UPDATE文:探索やDELETE文:探索において、更新対象レコードを位置づける部分の表の占有モードは“共用モード”がデフォルトです。OLTP業務などでUPDATE文:探索やDELETE文:探索を利用するときは、USQL_LOCKに“EX”を指定すると、更新対象レコードを位置づけるときに“非共用モード”で占有するので、デッドロックを起こしにくくなります。