CXPACKET самый популярный из видов ожиданий. Я вижу его в пятёрке ожиданий в большинстве систем с количеством CPU более одного.
Books On-Line:
Происходит с планами параллельных запросов при попытке синхронизации итератора обмена обработчика запросов. Если ожидание слишком велико и не может быть уменьшено подстройкой запроса (например, путем добавления индексов), попробуйте изменить предел стоимости для параллелизма или уменьшить степень параллелизма.
CXPACKET объяснение:
Когда параллельная операция создаётся для запроса, появляется несколько потоков для одного запроса. Каждый запрос имеет дело с различным набором данных. Из-за ряда причин один или несколько потоков отстают создавая ожидание CXPACKET. Есть поток организатор/координатор (поток 0), который ждёт выполнение всех остальных потоков и представляет результат выполнения на стороне клиента. Только после того, как все потоки завершаю своё выполнение и передадут все данные потоку 0, запрос может считаться завершенным. Ожидание организатором остальных потоков и есть CXPACKET ожидание.
Обратите внимание, что не все CXPACKET ожидания плохие. Иногда он полностью целесообразен, иногда это ожидание неизбежно. Если вы избавитесь от этого вида ожидания для запроса, он может начать работать медленней, так как параллельные операции будут для него недоступны.
Способы борьбы с CXPACKET:
Мы не можем обсуждать о способах борьбы с CXPACKET оставляя без внимания тип рабочей нагрузки на сервер.
OLTP нагрузка:
В чистой OLTP системе транзакции маленькие и запросы обычно выполняются быстро, а настройка «Maximum Degree of Parallelism» стоит в значении 1. Это способ быть уверенным что запрос никогда не будет выполнен параллельно.
EXEC sys.sp_configure N'max degree of parallelism', N'1' GO RECONFIGURE WITH OVERRIDE GO
В хранилищах данных или серверах отчётов:
Запросы выполняются долгое время и обычно “Maximum Degree of Parallelism” стоит в значении 0. Таким способом запросы параллельно используют процессор и долгие запросы получают повышение своей производительности благодаря использованию множества процессоров.
EXEC sys.sp_configure N'max degree of parallelism', N'0' GO RECONFIGURE WITH OVERRIDE GO
Смешанная система:
Здесь нет однозначного ответа. Должен быть найден правильный баланс. Я использую очень простой подход. Я ставлю “Maximum Degree of Parallelism” в значение 2, что означает что запрос может быть выполнен только на 2-х CPU. Одна я ставлю для “Cost Threshold for Parallelism” большое значение. Этот способ позволяет «быстрым» запросам выполняется без использования параллелизма, а большим с его использованием (система оценивает стоимость запроса).
В данном случае я выставляю ‘Cost Threshold for Parallelism’ в значение 25 (это только для иллюстрации), вы можете выбрать любое значение, которое вы можете определить только эксперементируя на вашей системе. В следующем скрипте я задаю эти параметры:
EXEC sys.sp_configure N'cost threshold for parallelism', N'25' GO EXEC sys.sp_configure N'max degree of parallelism', N'2' GO RECONFIGURE WITH OVERRIDE GO
Заметка: Представленная тут информация является только моим опытом. Я настраиваю, чтобы вы читали Books On-Line. Все мои обсуждения ожиданий здесь носят общий характер и изменяются от системы к системе. Я рекомендую сначала тестировать всё на сервере разработки, прежде чем применять это на рабочем сервере.
Автор: Pinal Dave
*** *** *** *** *** *** *** *** *** *** *** ***
Полезные Скрипты
Рубрика Проверь себя
Ссылка на наш канал YouTube