Применяется к
SQL Server 2008 R2 SQL Server 2008

Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2008 R2 как один файл для загрузки. Поскольку исправления являются кумулятивными, каждый новый выпуск содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 R2.

Проблемы

Рассмотрим следующий сценарий.

  • Приложение выполняет запрос, который ссылается на некоторые временные таблицы в Microsoft SQL Server 2008 и Microsoft SQL Server 2008 R2. Временные таблицы создаются в сеансе, а не в хранимой процедуре.

  • План запроса кэшируется.

  • Многие пользователи выполняют один и тот же запрос в среде с высокой степенью параллельности. Например, многие пользователи используют приложение, которое выполняет следующий запрос:

    create table #x (col1 int) go insert into #x values (1) go select * from #x where col1 = 1 go

В этом сценарии приложение встречает проблемы с производительностью.Примечание. Дополнительные сведения о том, как идентифицировать эту ошибку, можно найти в разделе "Дополнительные сведения".

Причина

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

Решение

Примечание. В настоящее время доступна только обновление для SQL Server 2008 R2. Чтобы устранить эту проблему, ознакомьтесь с разделом временное решение для SQL Server 2008.

Сведения о накопительном пакете обновления

SQL Server 2008 R2 с пакетом обновления 1 (SP1)

Исправление для этой проблемы впервые выпущено в накопительном обновлении 1 для SQL Server 2008 R2 с пакетом обновления 1 (SP1). Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления, щелкните следующий номер статьи базы знаний Майкрософт:

2544793 Накопительный пакет обновления 1 для SQL Server 2008 R2 с пакетом обновления 1 (SP1)Примечание. Поскольку сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 R2. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:

2567616 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2 с пакетом обновления 1 (SP1)

SQL Server 2008 R2

Исправление для этой проблемы впервые выпущено в накопительном обновлении 7. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2, щелкните следующий номер статьи базы знаний Майкрософт:

2507770 Накопительный пакет обновления 7 для SQL Server 2008 R2 Примечание. Поскольку сборки являются кумулятивными, каждый новый выпуск исправлений содержит все исправления и все исправления безопасности, которые были включены в предыдущий выпуск исправлений для SQL Server 2008 R2. Рекомендуется установить последнюю версию исправления, которая включает это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:

981356 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".

Обходное решение

Для решения этой проблемы в SQL Server 2008 и SQL Server 2008 R2 переместите все ссылки на временные таблицы в хранимых процедурах.

Дополнительная информация

Дополнительные сведения о том, как создавать и изменять основы работы с таблицами, можно найти на веб-сайте MSDN по следующему адресу:

Создание и изменение основ работы с таблицамиКонфликты спин-блокировок можно идентифицировать из динамического административного представления sys.dm_os_spinlock_stats (DMV) с высокой интенсивностью конфликтов на объект SOS_CACHESTOREной взаимоблокировки. Чтобы определить этот вопрос, выполните запрос, подобный приведенному ниже.

select cp.bucketid, count(cp.bucketid) as BucketCount, st.text from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) as st group by cp.bucketid, st.text having count(cp.bucketid) >1 order by BucketCount descЕсли при выполнении этого запроса выполняются указанные ниже условия, могут возникнуть проблемы с производительностью.

  • Этот запрос создает тот же текст запроса.

  • Количество для того же bucketid является большим.Примечание. Большое количество для одного и того же bucketid обычно составляет более 1000.

  • Запросы ссылаются на временные таблицы

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.