Popolamento asincrono

MicrosoftSQL Server consente di ottimizzare il popolamento asincrono di cursori gestiti da keyset o statici di grandi dimensioni. Questi tipi di cursori utilizzano tabelle di lavoro create nel database tempdb. I cursori gestiti da keyset archiviano in queste tabelle il relativo keyset, ovvero il set di chiavi che identifica le righe nel cursore, mentre i cursori statici vi archiviano le righe incluse nel cursore stesso. Se in SQL Server Query Optimizer viene stimato che il numero di righe restituito in un cursore statico o gestito da keyset supera il valore del parametro sp_configure cursor threshold, il server avvia un thread distinto per popolare la tabella di lavoro. Il controllo viene restituito immediatamente all'applicazione, in cui è quindi possibile avviare il recupero delle prime righe del cursore senza attendere che l'intera tabella di lavoro sia stata popolata.

L'operazione di popolamento asincrono di un cursore comporta un overhead aggiuntivo. È consigliabile non popolare in modo asincrono cursori di piccole dimensioni. Il parametro sp_configure cursor threshold pertanto non deve essere impostato su un valore troppo basso. Eseguire il popolamento asincrono esclusivamente per cursori di grandi dimensioni.

[!NOTA]

SQL Server non supporta la generazione asincrona di cursori Transact-SQL gestiti da keyset o statici. Le operazioni sui cursori Transact-SQL, ad esempio OPEN o FETCH, sono generalmente di tipo batch, pertanto la generazione asincrona di cursori Transact-SQL non è necessaria. I cursori API del server gestiti da keyset asincroni o statici in cui il parametro OPEN a bassa latenza rappresenta un problema per via dei round trip del client per ogni operazione sul cursore sono ancora supportati in SQL Server.

La funzione @@CURSOR_ROWS restituisce il numero di righe di un cursore. Se si utilizza @@CURSOR_ROWS in un cursore a cui è associata una tabella di lavoro in fase di popolamento, viene restituito un numero negativo. Il valore assoluto del numero restituito corrisponde al numero di righe della tabella di lavoro che sono state popolate. Si supponga, ad esempio, che la funzione @@CURSOR_ROWS venga selezionata mentre è in corso il popolamento del keyset di un cursore gestito da keyset e che siano già incluse nel keyset 1.243 chiavi. In questo caso @@CURSOR_ROWS restituisce il valore -1243.