Высокий тип ожидания CXPACKET в SQL Server даже при MAXDOP = 1

У меня всегда был очень высокий тип ожидания CXPACKET, и мне сказали, что это происходит из-за параллельной обработки, и я должен поддерживать MAXIMUM DEGREE OF PARALLELISM = (Nº Processors / 4), или 1 в моем случае.

Но ожидание CXPACKET по-прежнему очень велико - 32,78% от всех ожиданий. Какие есть предложения?

Это не означает, что существует проблема: параллелизм - это хорошо, а тип ожидания CXPacket появляется только потому, что SQL Server должен синхронизировать различные части работы.

Когда вы переключаетесь на maxdop=1, время выполнения этой части кода медленнее, чем при параллельном выполнении? Это, так сказать, настоящее доказательство.

Есть много противоречивых статей, но эти две написаны людьми из SQL, которые знают, о чем говорят! (ладно, один из них перешел в Oracle!).

http://itknowledgeexchange.techtarget.com/sql-server/cxpacket-isnt-the-cause-it-is-a-symptom/

http://sqlserverpedia.com/blog/sql-server-bloggers/cxpacket-maxdop-and-your-oltp-system/

Комментарии (0)
Решение

Очистили ли вы статистику ожидания после того, как снизили максимальную степень параллелизма до 1?

Но на самом деле не существует никакого действительного простого и универсального правила относительно того, как следует настраивать этот параметр, кроме как измерять влияние любых изменений, которые вы делаете. В дополнение к приведенным выше URL-адресам я бы рекомендовал прочитать эту статью Пола Рэндала.

Я бы также предложил пересмотреть свое внимание к другим основным типам ожидания - я часто обнаруживаю, что ожидание CXPACKET является красной селедкой и что оно возникает из-за сложных запросов, которые распараллеливаются на простые части работы, которые выполняются быстро, и большие, связанные с вводом-выводом части работы, которые требуют много времени для завершения. Ожидания CXPACKET появляются, когда маленькие, быстрые части работы завершаются и ожидают завершения больших частей работы.

Если вы хотите настроить конкретные запросы, план выполнения должен показать вам, какие части запроса требуют много времени для завершения, и тогда вы сможете настроить его для решения проблемы. Часто виновниками этого являются устаревшая статистика или неудачно подобранные индексы.

Комментарии (0)

Установка MAXDOP вслепую на экземпляре без учета рабочей нагрузки является, IMO, большой ошибкой. Это не обязательно может навредить, но это 'хорошая идея (tm), чтобы поддержать изменение конфигурации по умолчанию с очень хорошим объяснением. Если вы не можете объяснить это, не делайте этого.


Из того, что я видел на практике до сих пор, высокий процент ожидания CXPACKET является признаком большого параллельного сканирования таблиц.

Используйте SQL Profiler для анализа запросов, выполняемых на экземпляре: есть большая вероятность, что они нуждаются в индексной настройке или, возможно, даже переписаны для большей эффективности. Ожидание CXPACKET - это всего лишь симптом (возможной) проблемы.

Комментарии (0)