KB2649913 — ИСПРАВЛЕНО: после перехода с SQL Server 2005 на SQL Server 2008, SQL Server 2008 R2 или SQL Server 2012 может снизиться производительность при выполнении запроса, использующего хранимую процедуру sp_cursoropen

Применяется к
SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Express with Advanced Services SQL Server 2008 R2 Standard SQL Server 2008 R2 Standard Edition for Small Business SQL Server 2008 R2 Workgroup SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Express SQL Server 2008 Express with Advanced Services SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Express SQL Server 2012 Standard

Корпорация Майкрософт распространяет исправления 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, перечисленных в разделе «Относится к».