Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2008 R2 с пакетом обновления 1 (SP1) или Microsoft SQL Server 2012 в одном скачиваемом файле. Поскольку исправления являются накопительными, каждый новый выпуск содержит все исправления и все обновления для системы безопасности, которые были включены в предыдущий выпуск обновления SQL Server 2008 R2 с пакетом обновления 1 (SP1) или Microsoft SQL Server 2012 с обновлением.
Проблема
Рассмотрим следующий сценарий.
- Выполняется обновление с Microsoft SQL Server 2005 до Microsoft SQL Server 2008, Microsoft SQL Server 2008 R2 или Microsoft SQL Server 2012.
- Вы выполняете запрос, использующий хранимую процедуру sp_cursoropen, а затем указываете параметр rowcount для получения первых нескольких строк таблицы.
В этом сценарии производительность может быть ниже, чем при выполнении того же запроса в SQL Server 2005.
Причина
Эта проблема возникает из-за того, что оптимизатор запросов использует статический план курсора вместо плана динамического курсора. Для плана статического курсора SQL Server получает все строки и вставляет их в рабочую таблицу курсора. Однако для плана динамического курсора SQL Server получает только необходимые строки.
Решение
Сведения о накопительном пакете обновления
SQL Server 2012
Исправление для этой проблемы было впервые выпущено в накопительном пакете обновления 1 для SQL Server 2012. Дополнительные сведения об этом накопительном пакете обновления см. в следующей статье базы знаний Майкрософт:
2679368 Накопительный пакет обновления 1 для SQL Server 2012 г. Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2012 г. Корпорация Майкрософт рекомендует рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:
2692828 Сборки SQL Server 2012 г., выпущенные после выпуска SQL Server 2012 г. Для установки SQL Server 2012 необходимо применить исправление SQL Server 2012.
Накопительный пакет обновления 5 для SQL Server 2008 R2 с пакетом обновления 1 (SP1)
После применения этого исправления включите флаг трассировки 4199.
Исправление этой проблемы впервые выпущено в накопительном пакете обновления 5. Для получения дополнительной информации о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2 с пакетом обновления 1 (SP1), откройте статью со следующим номером в базе знаний Майкрософт:
2659694 Накопительный пакет обновления 5 для SQL Server 2008 R2 с пакетом обновления 1 (SP1) Так как сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, включенные в предыдущий выпуск исправления SQL Server 2008 R2 с пакетом обновления 1 (SP1). Рекомендуется рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:
2567616 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2 с пакетом обновления 1 (SP1)
Временное решение
Чтобы обойти эту проблему, добавьте в запрос подсказку запроса FAST.
Дополнительные сведения
Дополнительные сведения об использовании подсказок запросов см. на следующем веб-сайте MSDN:
Общие сведения об использовании подсказок для запросов Дополнительные сведения о флаге трассировки 4199 см. на следующем веб-сайте:
Общие сведения о флаге трассировки 4199
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».