両方向スクロール・カーソルの効率的使用
両方向スクロール・カーソルは、結果表が小さく、ユーザーがデータの中を前後に移動することが多い 画面ベースのアプリケーションなどのアプリケーションを作成する場合に有用なツールです。
プロシージャー
両方向スクロール・カーソルから最高のパフォーマンスを得るには、以下のようにします。
- 両方向スクロール・カーソルが最も役に立つ場合を判別する。
両方向スクロール・カーソルは、スクロール不可能なカーソルよりも多くのDb2処理を必要とします。 アプリケーションが大きな結果表を必要とする場合、またはデータの中を順番に順方向に移動するだけで よい場合は、順方向カーソルを使用してください。
- 両方向スクロール・カーソルを SENSITIVE として宣言するのは、
最新のデータを表示する必要がある場合だけにする。
他のカーソルまたはアプリケーション・プロセスによって行われた更新を表示する必要がない場合は、INSENSITIVEとして宣言したカーソルを使用することにより、Db2による処理が少なくて済みます。
最新の更新操作の一部のみ調べる必要があり、 挿入操作の結果を調べる必要がない場合は、両方向スクロール・カーソルを SENSITIVE STATIC と 宣言してください。
最新の更新および挿入のすべてを 調べる必要がある場合は、両方向スクロール・カーソルを SENSITIVE DYNAMIC と宣言してください。
- 両方向スクロール・カーソルを位置付けの更新操作または削除操作のために使用する場合の並行性が 確実に最大となるように、更新可能な両方向スクロール・カーソルを含むパッケージおよびプランを バインドする際には ISOLATION(CS) および CURRENTDATA(NO) を指定する。
- スクロール可能なカーソルを使用する場合は、適切な場合にFETCH FIRST n ROWS ONLY句を使用してください。分散環境において、限られた数の行を取得する必要がある場合、FETCH FIRST n ROWS ONLY は、DRDA アクセスを使用する分散クエリのパフォーマンスを向上させることができます。これは、不要なネットワークトラフィックを排除することで実現します。
ローカル環境では、スクロールする必要があるのが表内の行の限定サブセットである場合 は、FETCH FIRST n ROWS ONLY を使用して結果表を小さくできます。
- 分散環境では、データの変更に両方向スクロール・カーソルを使用する必要がない場合は、
カーソル処理をストアード・プロシージャー内で行う。ストアード・プロシージャーを使用すると、 アプリケーションが必要とするネットワーク・トラフィックを減らせます。
- 作業ファイル・データベースに、
両方向スクロール・カーソルを処理できる大きさの表スペースを作成する。Db2は、宣言済み一時表を使用して、以下のタイプの両方向スクロール・カーソルを処理します。
- SENSITIVE STATIC SCROLL
- INSENSITIVE SCROLL
- ASENSITIVE SCROLL (カーソル・センシティビティーが INSENSITIVE の場合)。 読み取り専用カーソルの基準を満たすカーソルは、INSENSITIVE の有効なセンシティビティーを持ちます。
- 以下の理由から、変更を頻繁にコミットしてください。
- 両方向スクロール・カーソルは、頻繁に順方向カーソルより長くオープン状態にする 必要があります。
- 両方向スクロール・カーソルを使用すると、デッドロックの可能性が 増加します。その理由は、行へのアクセスおよび更新が任意の順序で行えるからです。 このデッドロックの可能性は、頻繁にコミットすることで減少できます。
- カーソルがコミット操作後クローズしないようにする、 両方向スクロール・カーソル WITH HOLD を宣言します。
- 以下の方法を使用して、誤ったスペース不足の標識を防ぎます。
- アプリケーションが頻繁にコミットしていないか確認する。
- センシティブ両方向スクロール・カーソルは、不要になったらすぐに閉じる。
- SENSITIVE 両方向スクロール・カーソルの WITH HOLD オプションを可能であれば除去する。
- データ共用環境内の専用バッファー・プール内の LOB 表スペースを分離する。
センシティブ静的両方向スクロール・カーソルが表に対してオープンされている場合、Db2は、その表スペース内のスペースの再利用を許可しないため、スクロール可能カーソルが、元の結果セットに含まれていない新規に挿入された行を取り出すことができなくなります。 これは通常の動作ですが、誤ってスペース不足を示しているように見えることがあります。 この問題は、LOB にアクセスするトランザクションのあるデータ共用環境ではさらに顕著になることがあります。
スペース再利用の問題に加えて、データ共用環境でセンシティブ静的両方向スクロール・カーソルを使用すると、挿入対象となるオブジェクトが同じバッファー・プールにある場合に INSERT ステートメントでロックの競合が発生することもあります。 この状態は、オブジェクトがセンシティブ静的両方向スクロール・カーソルを持っているかどうか、およびオブジェクトに LOB 列が含まれているかどうかにかかわらず発生します。 大量の挿入アクティビティーが発生するオブジェクトを分離して、それらをデータ共用環境内の専用バッファー・プール内に置くことにより、この問題を最小限に抑えることができます。
- 索引アクセスが式ベースの索引に必要な場合は、センシティブ静的両方向スクロール・カーソルを指定しないでください。