Почему полная статистика обновлений сканирования использует 100% ЦП в SQL Server 2014, когда он использует, возможно, 20% ЦП в SQL Server 2008 R2 для тех же таблиц с аналогичными аппаратными возможностями?
Я смотрел MAXDOP
, другие варианты, и действительно не вижу ничего, что выделяется. Я понимаю, что могут быть настройки, которые могут вызывать это, но настройки очень похожи для обеих баз данных (например, MAXDOP
4 для обеих, причем обе имеют несколько ядер). Оба Enterprise Edition.
Есть ли что-то «отличное» в SQL Server 2014 от SQL Server 2008 R2, которое могло бы объяснить это? У меня опция памяти на 90% для обоих серверов. Есть мысли о том, что искать?
Я запускаю статистику обновлений с полным (100%) сканированием один раз в неделю на двух серверах с использованием SQL Server 2008 R2 / SP3 и SQL Server 2014 / SP2, и базы данных имеют одинаковую структуру. На сервере 2008 R2 статистика обновления двух очень больших таблиц занимает несколько часов, чего я и ожидаю, но загрузка ЦП не превышает 20% или около того. Однако на сервере 2014 года процессор уходит на 100% за 40 минут. Таблицы немного меньше на сервере 2014 года. Я вижу это с помощью меню анализа SQL Monitor.
Вот вывод файла журнала Ola на SQL Server 2014, загрузка процессора увеличивается до 100% с 2:10 до 2:45:
Date and time: 2017-06-24 02:10:20
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000005_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:07:48
Date and time: 2017-06-24 02:18:08
Date and time: 2017-06-24 02:18:08
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000006_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:32:22
Date and time: 2017-06-24 02:50:30
Вот выходные данные файла журнала Ola на SQL Server 2008 R2 для двух показателей, приведенных выше, но загрузка ЦП может достигать 15%:
Date and time: 2017-06-24 03:30:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000003_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:05:00
Date and time: 2017-06-24 03:35:32
Date and time: 2017-06-24 03:35:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000004_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:52:31
Date and time: 2017-06-24 04:28:03
Я не могу запустить их с сервером maxdop = 1, поскольку это исключает генерацию всех параллельных планов, что может повредить приложение. Я планирую пойти в противоположном направлении и увеличить его до 8 (на коробке 16 ядер) и посмотреть, что получится. Может идти быстрее, чтобы сократить время разметки процессора. Эта работа выполняется в то время как пользователи в основном ушли.
источник
tempdb
конфигурация же? Его можно использовать во времяUPDATE STATISTICS
работы, так что это также может быть проблемой.Ответы:
Обновления статистики могут идти параллельно, в зависимости от множества параметров в SQL Server:
В более поздних версиях SQL Server (2016 и новее) это становится еще сложнее:
Как вы заметили, ваш 2008R2 будет однопоточным, а 2014 - многопоточным (таким образом, процесс завершается быстрее, но при этом увеличивается загрузка ЦП во время работы).
Чтобы найти правильный баланс для вашей статистики работы, подумайте о:
источник
Ответ сообщества вики :
Наилучшее предположение: план, выбранный для обновления статистики, является параллельным или более параллельным в окне 2014 года, чем в окне 2008 R2.
Параллельная статистика обновлений
fullscan
существует с 2005 года, а выборочные статистические данные, начиная с 2016 года, см. В статье « Дополнения оптимизатора запросов в SQL Server 2016 », автор Gjorgji Gjeorgjievski, блог SQL Server Database Engine.Если у вас есть Enterprise Edition, вы можете использовать Resource Governor, чтобы ограничить использование процессора вашей работой по обслуживанию.
Также рассмотрите возможность голосования за предложение «Подключить». Добавьте
MAXDOP
параметр «Обновить статистику» от Хавьера Виллегаса.Связанные вопросы и ответы: параллельное обновление статистики
источник