Корпорація Майкрософт поширює Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) або Microsoft SQL Server 2012 виправлення в одному файлі, що завантажується. Оскільки виправлення є сукупними, кожен новий випуск містить всі поточні виправлення та всі оновлення системи безпеки, які були включені до попередньої версії SQL Server 2008 R2 Service Pack 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
);
-
Використання процесора постійно високе, а потоки робочих потоків у стані Runnable.
-
Твердження про QUERY_EXEC_STATS -«спізлок» високий. Наприклад, лічильник обертання, можливі зіткнення, а також незворотні значення для QUERY_EXEC_STATS spamplock швидко збільшується.Примітка. Щоб отримати докладні відомості про те, як відстежувати QUERY_EXEC_STATS sponlock, ознайомтеся з розділом "Додаткові відомості".
У цьому сценарії може виникнути низька продуктивність.
Причина
Ця проблема, оскільки виникає помилка SQL Server 2008 R2 або SQL Server 2012, створює та знищує деякі структури пам'яті про глобальні статистичні дані замість їх кешування. Це призводить до вузьким місцем продуктивності.
Спосіб вирішення
Відомості про Сукупне оновлення
SQL Server 2012
Виправлення для цієї проблеми уперше випущено в сукупному оновленні 1 для SQL Server 2012. Щоб отримати докладні відомості про цей пакет накопичувальне оновлення, клацніть номер статті в базі знань Microsoft Knowledge Base:
2679368 Сукупний пакет оновлень пакета 1 для SQL Server 2012Примітка. Оскільки будує сукупну версію, кожен новий випуск Fix містить всі виправлення та виправлення безпеки, які були включені до попередньої версії SQL Server 2012 Fix Release. Корпорація Майкрософт рекомендує застосувати найновішу версію виправлення, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:
2692828 Інстальовано версії SQL Server 2012, випущені після випуску SQL Server 2012 Щоб інсталювати SQL Server 2012, потрібно додати виправлення SQL Server 2012.
Сукупний пакет оновлень пакета 5 для SQL Server 2008 R2 SP1
Виправлення для цієї проблеми уперше випущено в сукупному оновленні 5. Щоб отримати докладні відомості про отримання цього сукупного оновлення пакета для SQL Server 2008 R2 SP1, клацніть цей номер статті, щоб переглянути статтю в базі знань Microsoft Knowledge Base:
2659694 Сукупний пакет оновлень пакета 5 для SQL Server 2008 R2 SP1Примітка. Оскільки пакет складається з сукупних, кожен новий випуск Fix містить всі поточні виправлення та всі виправлення системи безпеки, які були включені до попередньої версії SQL Server 2008 R2 SP1 Fix. Радимо застосувати найновішу версію виправлення, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:
2567616 Випущено пакет версії SQL Server 2008 R2, випущеній після випуску SQL Server 2008 R2 SP1
Додаткові відомості
Щоб відстежувати QUERY_EXEC_STATS spenlock, налаштуйте затримку та кількість ітерацій відповідно до середовища в такому коді, а потім виконайте її:
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
Стан
Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "застосовується до".