Асинхронное заполнение
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.