Llenado asincrónico
Microsoft SQL Server 2005 ofrece una optimización de rendimiento para llenar cursores grandes controlados por conjuntos de claves o estáticos de forma asincrónica. Los cursores controlados por conjunto de claves y los cursores estáticos utilizan tablas de trabajo integradas en tempdb. Los cursores controlados por conjunto de claves utilizan la tabla de trabajo para almacenar su conjunto de claves, el cual identificará las filas en el cursor. Los cursores estáticos utilizan la tabla de trabajo para almacenar las filas que componen el cursor. Si el optimizador de consultas de SQL Server estima que el número de filas devueltas en un cursor controlado por conjunto de claves o en un cursor estático va a superar el valor del parámetro sp_configure cursor threshold, el servidor inicia un subproceso independiente para llenar la tabla de trabajo. Se devuelve el control a la aplicación inmediatamente para que pueda iniciar la recopilación de las primeras filas del cursor y no deba esperar a que se llene toda la tabla de trabajo antes de realizar la primera recopilación.
Existe cierta sobrecarga extra asociada con el llenado asincrónico de un cursor. Es más eficaz no llenar pequeños cursores de forma asincrónica, por lo que no se debería establecer sp_configure cursor threshold a un valor demasiado bajo. Reserve el llenado asincrónico para cursores grandes.
[!NOTA] SQL Server 2005 no admite la generación de cursores Transact-SQL controlados por conjuntos de claves o estáticos de forma asincrónica. Las operaciones de cursores de Transact-SQL, como OPEN o FETCH, se realizan normalmente por lotes, por lo que la generación asincrónica de cursores Transact-SQL no es necesaria. SQL Server 2005 continúa admitiendo los cursores de servidor de la interfaz de programación de aplicaciones (API) o controlados por conjuntos de claves asincrónicos en los que OPEN de baja latencia es un problema, debido a los trayectos de ida y vuelta al cliente para cada operación del cursor.
La función @@CURSOR_ROWS informa del número de filas de un cursor. Si selecciona @@CURSOR_ROWS en un cursor con una tabla de trabajo que todavía se está llenando, @@CURSOR_ROWS devuelve un número negativo. El valor absoluto del número devuelto es el número de filas que se han llenado en la tabla de trabajo hasta el momento. Por ejemplo, si se selecciona @@CURSOR_ROWS mientras se está llenando el conjunto de claves de un cursor controlado por conjunto de claves, pero ya hay 1.243 claves en el conjunto de claves, @@CURSOR_ROWS devuelve el valor -1243.
Vea también
Otros recursos
@@CURSOR_ROWS (Transact-SQL)
sp_configure (Transact-SQL)