Применяется к
SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise 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 2008 R2 или Microsoft SQL Server 2012 на компьютере.

  • В экземпляре выполняются одновременные операторы, похожие на приведенные ниже.

    CREATE PROC p AS RETURN (
    query
    ); EXEC p;

    Кроме того, вы запускаете запрос, содержащий следующий код:

    IF EXISTS(
    subquery
    );
  • Использование ЦП постоянно велико, и рабочие потоки находятся в состоянии готовности.

  • Степень конкуренции для QUERY_EXEC_STATSной спин блокировки очень высока. Например, количество прокруток, возможные конфликты и значения обратной стороне для QUERY_EXEC_STATSной спин-блокировки быстро увеличиваются.Примечание. Дополнительные сведения о наблюдении за QUERY_EXEC_STATSной спинией можно найти в разделе "Дополнительные сведения".

В этом случае может возникнуть снижение производительности.

Причина

Эта проблема возникает из-за того, что в SQL Server 2008 R2 или SQL Server 2012 создаются и уничтожаются некоторые структуры памяти, а не кэшированные данные. Это приводит к появлению узкого места в производительности.

Решение

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

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)

Исправление для этой проблемы впервые выпущено в накопительном обновлении 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)

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

Чтобы проследить за QUERY_EXEC_STATSной спинстью, настройте задержку и число итераций в соответствии с вашей средой в следующем коде, а затем запустите ее.

SET NOCOUNT ONCREATE TABLE #spins([Spinlock Name] varchar(50),Collisions numeric,Spins numeric,[Spins/Collision] float,[Sleep Time (ms)] numeric,Backoffs numeric, InsertTime datetime DEFAULT GETDATE())DECLARE @counter int = 1WHILE @counter < 10      BEGIN            INSERT INTO #spins ([Spinlock Name], Collisions, Spins, [Spins/Collision], [Sleep Time (ms)], Backoffs) EXECUTE ('DBCC SQLPERF (''SPINLOCKSTATS'') WITH NO_INFOMSGS')            WAITFOR DELAY '00:00:05'            SET @counter +=1      ENDSELECT * FROM #spins WHERE [Spinlock Name] = 'QUERY_EXEC_STATS' ORDER BY InsertTimeDROP TABLE #spins

Статус

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

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

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

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