データの非同期格納
Microsoft SQL Server 2005 では、サイズの大きなキーセット ドリブン カーソルまたは静的カーソルに非同期にデータを格納する際のパフォーマンスを最適化できます。キーセット ドリブン カーソルと静的カーソルは、tempdb に作成された作業テーブルを使用します。キーセット ドリブン カーソルは、この作業テーブルを使用して、それが持つキーセット、つまりカーソル内の行を識別するキーのセットを格納します。静的カーソルは、この作業テーブルを使用して、そのカーソルを構成する行を格納します。SQL Server のクエリ オプティマイザで、キーセット ドリブン カーソルまたは静的カーソル内に返される行の数が sp_configure cursor threshold パラメータの値を超えると評価した場合、サーバーにより別個のスレッドが起動され作業テーブルに行が格納されます。制御はすぐにアプリケーションに返されるので、作業テーブル全体にデータが格納されるまで待たなくても、カーソル内にある最初の行のフェッチを開始できます。
カーソルへのデータ設定を非同期に行うことに関連していくらかは余分なオーバーヘッドが生じます。サイズの小さいカーソルにデータを非同期に格納しなければ効率は上がるので、sp_configure cursor threshold をあまり低い値に設定しないでください。データの非同期設定の機能はサイズの大きいカーソルを作成する場合に使用するようにしてください。
メモ : |
---|
SQL Server 2005 では、キーセット ドリブン カーソルおよび静的 Transact-SQL カーソルの非同期の作成はサポートしていません。OPEN または FETCH などの Transact-SQL カーソル操作は、一括処理されるので、Transact-SQL カーソルの非同期生成は不要です。遅延が少ない OPEN が問題になる場合の非同期キーセット ドリブン カーソルまたは静的 API (アプリケーション プログラミング インターフェイス) サーバー カーソルも、各カーソル操作のクライアントのラウンド トリップにより SQL Server 2005 で引き続きサポートされます。 |
@@CURSOR_ROWS 関数はカーソル内の行数を通知します。まだ作業テーブルへのデータ格納中であるカーソルに対して @@CURSOR_ROWS を選択した場合、@@CURSOR_ROWS は負の数を返します。返された数の絶対値が、その時点までに作業テーブル内に格納された行の数です。たとえば、キーセット ドリブン カーソルのキーセットがデータの格納中であっても、既に 1,243 個のキーがキーセット内に設定された時点で @@CURSOR_ROWS が選択された場合、@@CURSOR_ROWS は -1243 という値を返します。
参照
その他の技術情報
@@CURSOR_ROWS (Transact-SQL)
sp_configure (Transact-SQL)