プリフェッチは複数ローのフェッチとは異なります。プリフェッチはクライアント・アプリケーションから明確な命令がなくても実行できます。プリフェッチはサーバからローを取り出し、クライアント側のバッファに格納しますが、クライアント・アプリケーションがそれらのローを使用できるのは、アプリケーションが適切なローをフェッチしてからになります。
デフォルトでは、単一ローがアプリケーションによってフェッチされるたびに、SQL Anywhere のクライアント・ライブラリが複数のローをプリフェッチします。SQL Anywhere のクライアント・ライブラリは余分なローをバッファに格納します。
プリフェッチはクライアント/サーバのラウンド・トリップを削減してパフォーマンスを高め、1 つのローやローのブロックごとにサーバへ個別に要求しないで多数のローを使用可能にすることによってスループットを高めます。
プリフェッチ制御の詳細については、prefetch オプション [データベース]を参照してください。
prefetch オプションを使って、プリフェッチするかどうか制御できます。単一の接続では prefetch オプションを [常に]、[条件付き]、または [オフ] に設定できます。デフォルトでは [条件付き] に設定されています。
Embedded SQL では、BLOCK 句を使用して、カーソルを開くときにカーソル・ベースで、または個別の FETCH オペレーションで、プリフェッチを制御できます。
アプリケーションでは、サーバから 1 つのフェッチに含められるローの最大数を、BLOCK 句で指定できます。たとえば、一度に 5 つのローをフェッチして表示する場合、BLOCK 5 を使用します。BLOCK 0 を指定すると、一度に 1 つのレコードがフェッチされ、常に FETCH RELATIVE 0 が同じローを再度フェッチするようになります。
アプリケーションの接続パラメータを設定してフェッチをオフにすることもできますが、prefetch オプションを Off に設定するよりは、BLOCK 0 と指定する方が効果的です。prefetch オプション [データベース]を参照してください。
value-sensitive カーソル・タイプでは、プリフェッチはデフォルトで無効です。
Open Client では、カーソルが宣言されてから開かれるまでの間に CS_CURSOR_ROWS で ct_cursor を使ってプリフェッチの動作を制御できます。
パフォーマンスが向上する可能性が高い場合に、プリフェッチするロー数が動的に増えます。これには、次の条件を満たすカーソルが含まれます。
カーソルがサポートされるカーソル・タイプのいずれかを使用している。
ODBC と OLE DB 前方専用および読み込み専用 (デフォルト) のカーソル
Embedded SQL DYNAMIC SCROLL (デフォルト)、NO SCROLL、および INSENSITIVE のカーソル
ADO.NET すべてのカーソル
カーソルが FETCH NEXT 操作のみ実行する (絶対フェッチ、相対フェッチ、後方フェッチは実行しない)。
アプリケーションが、フェッチの間にホスト変数の型を変更したり、GET DATA 文を使用してチャンク単位でカラムのデータ取得を行ったりしない (GET DATA 文を 1 つ使用して、値を取得することはできる)。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |