Затраты памяти на курсоры SQL - PullRequest
0 голосов
/ 27 июля 2011

У меня есть хранимая процедура, которая работает с таблицей, содержащей поле xml, и использую курсор, чтобы зациклить их и запустить некоторые другие sp. Строк может быть много, а документы довольно большие. Там были некоторые признаки хранимого удушья под нагрузкой.

Мне интересно, возможно ли это, потому что, как работают курсоры, возможно, использование курсора означает, что он сохраняет весь набор результатов в памяти. Я мысленно каким-то образом всегда представляю себе курсоры, например, циклы по таблице, в то время как, возможно, это больше похоже на выбор данных из таблицы, сохранение их в памяти и последующее циклирование по ним. Как работают курсоры?

PS. Лично я ненавижу курсоры как с точки зрения производительности, так и идеологии (SQL должен быть основан на основе) и избегаю их, как чумы. Это был случай унаследованного кода, который я сейчас преобразовал, чтобы использовать временную таблицу, но мне все еще любопытно DS.

1 Ответ

0 голосов
/ 27 июля 2011

Это будет зависеть от типа курсора, который вы используете.Курсор набора ключей будет хранить PK только в базе данных tempdb, а затем выполнять поиск в других столбцах по мере необходимости.Другие могут хранить и получать больше информации за один раз, больше строк, отдельных строк и т. Д.

Вот хорошее описание каждого типа: http://searchsqlserver.techtarget.com/feature/Part-1-How-cursors-work

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...