Asynchrones Auffüllen
Microsoft SQL Server 2005 bietet eine Leistungsoptimierung durch das asynchrone Auffüllen großer keysetgesteuerter oder statischer Cursor. Keysetgesteuerte und statische Cursor verwenden Arbeitstabellen, die in tempdb erstellt werden. Ein keysetgesteuerter Cursor verwendet die jeweilige Arbeitstabelle, um das Keyset zu speichern. Ein Keyset ist die Menge von Schlüsseln, die die Zeilen des zugehörigen Cursors identifizieren. Statische Cursor verwenden Arbeitstabellen, um die Zeilen zu speichern, aus denen der Cursor besteht. Wenn der SQL Server-Abfrageoptimierer davon ausgeht, dass die Anzahl der in einem keysetgesteuerten oder statischen Cursor zurückgegebenen Zeilen den Wert des sp_configure cursor threshold-Parameters überschreitet, startet der Server einen gesonderten Thread, um die Arbeitstabelle aufzufüllen. Die Anwendung übernimmt die Steuerung sofort wieder und kann mit dem Abrufen der ersten Zeilen im Cursor beginnen, anstatt mit dem Ausführen des ersten Abrufvorgangs warten zu müssen, bis die Arbeitstabelle aufgefüllt wird.
Das asynchrone Auffüllen eines Cursors ist mit zusätzlichem Aufwand verbunden. Es ist effizienter, kleine Cursor nicht asynchron aufzufüllen; deshalb sollte der sp_configure cursor threshold-Wert nicht zu niedrig festgelegt werden. Behalten Sie die Verwendung des asynchronen Auffüllens ausschließlich großen Cursorn vor.
Hinweis: |
---|
SQL Server 2005 unterstützt nicht das asynchrone Generieren von keysetgesteuerten oder statischen Transact-SQL-Cursorn. Transact-SQL-Cursorvorgänge wie OPEN oder FETCH werden als Batch ausgeführt, sodass das asynchrone Generieren von Transact-SQL-Cursorn nicht erforderlich ist. SQL Server 2005 unterstützt weiterhin asynchrone keysetgesteuerte und statische API-Servercursor (Application Programming Interface) für den Fall, dass eine geringe Wartezeit von OPEN wegen Clientroundtrips bei jeder Cursorvorgang ein Problem darstellt. |
Die @@CURSOR_ROWS-Funktion meldet die Anzahl von Zeilen in einem Cursor. Wenn Sie @@CURSOR_ROWS für einen Cursor mit einer Arbeitstabelle ausführen, die noch immer aufgefüllt wird, gibt @@CURSOR_ROWS eine negative Zahl zurück. Der absolute Wert der zurückgegebenen Zahl entspricht der Anzahl von Zeilen, die bis zu diesem Zeitpunkt in der Arbeitstabelle aufgefüllt wurden. Wenn beispielsweise @@CURSOR_ROWS ausgeführt wird, während das Keyset eines keysetgesteuerten Cursors noch immer aufgefüllt wird, sich jedoch bereits 1.243 Schlüssel im Keyset befinden, gibt @@CURSOR_ROWS den Wert -1243 zurück.
Siehe auch
Andere Ressourcen
@@CURSOR_ROWS (Transact-SQL)
sp_configure (Transact-SQL)