Корпорация Майкрософт распространяет исправления для 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
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".