Поделиться через


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

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

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

ms188667.note(ru-ru,SQL.90).gifПримечание.
В SQL Server 2005 не поддерживается асинхронное формирование управляемых набором ключей или статических курсоров Transact-SQL. Такие операции с курсорами Transact-SQL, как OPEN и FETCH, обычно группируются в пакеты, поэтому нет необходимости в асинхронном формировании курсоров Transact-SQL. В SQL Server 2005 сохраняется поддержка асинхронных управляемых набором ключей или статических серверных курсоров интерфейса прикладного программирования (API) в случаях, когда небольшая задержка выполнения инструкции OPEN является проблемой из-за того, что при каждой операции курсора клиент выполняет полный обход.

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

См. также

Другие ресурсы

@@CURSOR_ROWS (Transact-SQL)
Хранимая процедура sp_configure (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005