Корпорация Майкрософт распространяет исправления для 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 извлекает все строки и вставляет их в рабочую таблицу Cursor. Однако при динамическом плане по курсору SQL Server извлекает только необходимые строки.
Решение
Сведения о накопительном пакете обновления
SQL Server 2012
Исправление для этой проблемы впервые выпущено в накопительном обновлении 1 для SQL Server 2012. Чтобы получить дополнительные сведения об этом накопительном пакете обновления, щелкните следующий номер статьи базы знаний Майкрософт:
2679368 Накопительный пакет обновления 1 (SP1) для SQL Server 2012Примечание. Так как сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2012. Корпорация Microsoft рекомендует установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
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)
Обходное решение
Для решения этой проблемы добавьте в запрос подсказку быстрого запроса.
Дополнительная информация
Дополнительные сведения о том, как использовать подсказки в запросах, можно найти на веб-сайте MSDN по следующему адресу:
Общие сведения о том, как использовать подсказки в запросахДополнительные сведения о флаге трассировки 4199 можно найти на веб-сайте по следующему адресу:
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".