Асинхронное заполнение

Microsoft SQL Server оптимизирует производительность благодаря асинхронному заполнению управляемых набором ключей или статических курсоров. Управляемые набором ключей и статические курсоры используют рабочие таблицы, встроенные в базу данных tempdb. Управляемые набором ключей курсоры используют рабочую таблицу для хранения своего набора ключей, который идентифицирует строки в курсоре. Статические курсоры используют рабочую таблицу для хранения строк, составляющих курсор. Если в соответствии с прогнозом оптимизатора запросов SQL Server ожидаемое число строк, возвращаемых в управляемом набором ключей или статическом курсоре, превысит значение параметра sp_configure cursor threshold, сервер запускает отдельный поток для заполнения рабочей таблицы. Управление немедленно возвращается приложению, которое может приступить к выборке первых строк курсора вместо того, чтобы ждать, пока будет заполнена вся рабочая таблица, прежде чем выполнить первую выборку.

С асинхронным заполнением курсора связаны некоторые издержки. Асинхронное заполнение маленьких курсоров неэффективно, поэтому для sp_configure cursor threshold не следует устанавливать слишком маленькое значение. Асинхронное заполнение рекомендуется применять только для больших курсоров.

ПримечаниеПримечание

SQL Server не поддерживает асинхронное формирование управляемых набором ключей или статических курсоров Transact-SQL. Операции курсора Transact-SQL, такие как OPEN или FETCH, обычно являются пакетными. Таким образом, нет необходимости в асинхронном формировании курсоров Transact-SQL. SQL Server продолжает поддерживать использование асинхронных курсоров, управляемых набором ключей, или статических серверных курсоров API в случаях, когда операция OPEN с малым периодом ожидания замедляется из-за двусторонних задержек клиента для каждой операции курсора.

Функция @@CURSOR_ROWS сообщает число строк в курсоре. Если выбрать функцию @@CURSOR_ROWS для курсора, рабочая таблица которого продолжает заполняться, @@CURSOR_ROWS возвращает отрицательное число. Абсолютное значение возвращенного числа дает число строк в рабочей таблице, заполненных на данный момент времени. Например, если функция @@CURSOR_ROWS выбрана, пока идет заполнение набора ключей или курсора, управляемого набором ключей, но в наборе ключей уже имеется 1243 ключа, функция возвращает значение -1243.

См. также

Справочник