Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как улучшить производительность системы?  [new]
Диам
Member

Откуда:
Сообщений: 1497
Здравствуйте.
Есть такая статистика по серверу (в прицепе). Видно что большие проблемы из-за параллелизма. Как определить, какие запросы больше всего от него страдают?

На что еще надо обратить внимание в этой статистике?

К сообщению приложен файл (rez.xls - 95Kb) cкачать
30 ноя 15, 10:25    [18490379]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Диам
Видно что большие проблемы из-за параллелизма
Это показывает, что на параллелизм приходится больше всего ожиданий. Но если его убрать, то может стать медленнее - один поток выполнения не будет ждать другой, просто всё будет медленно выполняться в одном потоке.

Поиск проблем и путей их преодоления начинается именно с нахождения проблем.
Вряд ли пользователи подходят с жалобами на большую конкуренцию потоков выполнения :-)
Анализируйте проблемы с выполнением команд пользователей, либо проблемы с работой каких то внутренних процессов в вашей системе (расчёты, загрузки, обслуживание и т.д.)
30 ноя 15, 10:38    [18490455]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Диам,

обратите сначала внимание, какого рода запросы выполняются. Если преимущественно OLTP нагрузка (1 запрос работает с небольшим количеством строк, и таких запросов большинство), то имеет смысл отключить параллелизм. Если, наоборот, обрабатываются огромные массивы данных, то оставьте как есть, т.к. это норма. Если система смешанного типа, то поможет указание MAXDOP в запросах. Соответственно, если нужен скан большой таблицы/индекса, указываем OPTION (MAXDOP N). N выбирается исходя из железа и экспериментально. А если выборка 1-5000 значений, то хватит N=1.
Кстати, при отключённом параллелизме в запросах, где он не требуется, экономится время на построение плана запроса. Оптимизатор даже и не пытается рассмотреть параллельный план, и ему хватает времени на поиск лучшего не-параллельного плана.
1 дек 15, 19:05    [18499208]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Диам,

а ещё обратите внимание на наличие хороших индексов (и отсутствие плохих), на то, обновляется ли статистика, на каких дисках лежит база, где лежит tempdb... ну и, собственно, на кривизну самих запросов. Бывают системы, где вообще всё плохо, и оптимизация требуется по всем фронтам.
1 дек 15, 19:11    [18499234]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Диам
Member

Откуда:
Сообщений: 1497
Сид, про maxdop читал, подскажите, есть ли возможность отключить параллелизм для процедуры в целом? Или придется для каждого запроса в процедуре это прописывать?
1 дек 15, 22:06    [18499900]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Диам
Member

Откуда:
Сообщений: 1497
хотя, вот тут, утверждают, что нельзя.....
Отключить параллелизм для сессии?
1 дек 15, 22:13    [18499929]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Диам,

есть 2 варианта установки maxdop:
1) на уровне экземпляра
2) на уровне запроса через option
Лично я других вариантов не знаю и склоняюсь ко мнению, что их не существует (по крайней мере, пока).

Но я бы не советовал что-либо делать, не зная характер нагрузки. Если в основном крутятся отчёты, то ожидание параллелизма весьма логично и правильно. Если проблема в отсутствии хороших индексов, вследствие чего оптимизатор выбирает параллельные планы (приходится делать scan там, где всё бы летало с seek), соответственно, нужно сначала индексы создать, а потом дальше думать. Если запросы кривые (например, функции или convert в блоке where или ещё куча всяких кривых вариантов), то сначала запросы переписать как надо.
1 дек 15, 22:13    [18499931]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8821
Диам,

оценка параллелизма информационная и, как правило, не является признаком деградации. Большие затраты на параллелизм указывают на то, что Ваша система скорее в порядке по "железу", чем не в порядке.
Проблема может быть в оптимизации запросов, большом количестве рекомпиляций, низком проценте использовании кэша и т.д.
2 дек 15, 10:51    [18501418]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Диам
Сид, про maxdop читал, подскажите, есть ли возможность отключить параллелизм для процедуры в целом? Или придется для каждого запроса в процедуре это прописывать?
Либо для каждого запроса, либо для всего сервера.

Если сервер чисто OLTP, то можно ему уменьшить параллелизм, но, конечно, не до 1
2 дек 15, 12:02    [18502004]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
alexeyvg,

А зачем на OLTP >1? Не вижу смысла. Разве что в отдельных запросах можно maxdop побольше указать. Лично у меня в системе таких всего пару десятков (сильно меньше 1%) на смешанной системе, и этого хватает, чтобы система работала шустро.
2 дек 15, 15:06    [18503423]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31965
Сид
alexeyvg,

А зачем на OLTP >1? Не вижу смысла. Разве что в отдельных запросах можно maxdop побольше указать. Лично у меня в системе таких всего пару десятков (сильно меньше 1%) на смешанной системе, и этого хватает, чтобы система работала шустро.
Ну, я обычно вижу, что всё таки нагрузка не совсем однородна, и в OLTP системах немало запросов, которые выиграют от распараллеливания.
И опять же, далеко не всегда сиквел использует параллельный план там, где он может навредить.
Поэтому я обычно ставлю 8, а в отдельных запросах понижаю до 1, или повышаю больше 8.

Но, разумеется, если ваша система более "выраженная" OLTP, чем обычно, то такая установка имеет смысл, это уже нужно смотреть конкретный случай. Тем более что MAXDOP можно повысить в отдельных запросах.
2 дек 15, 15:26    [18503566]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Да, всё зависит от нагрузки. У меня OLTP процентов на 80, да и в отчётах не всегда требуется параллелизм, и без него в большинстве случаев всё хорошо. Собственно, поэтому я обратил внимание на индексы, запросы и распределение файлов БД по дискам. Я 4 года назад взялся за систему, у которой были все вышеперечисленные проблемы практически на каждом углу. Рефакторил больше года (система очень большая). Итог - из тормознутого уродца она превратилась в нечто, чем руководство хвалится перед каждым гостем, в тч из больших западных организаций типа NASA. ТС желаю разобраться и достичь того же: чтобы системой было не стыдно похвастаться)))
2 дек 15, 15:36    [18503648]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8821
Сид,

в чем-то согласен, т.к. параллелизм в часто выступает в качестве "грубой силы", призванной одолеть неоптимальную систему хранения данных. Установка =1 хорошо стимулирует инженерную мысль :)
2 дек 15, 15:55    [18503772]     Ответить | Цитировать Сообщить модератору
 Re: Как улучшить производительность системы?  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Владислав Колосов,

эхх, а меня простимулировали intra query parallelism deadlocks, когда система из-за них вешалась наглухо при вставках нескольких тыс строк. M$ похвалились, что этот косяк устранили в одном из CU текущего года, попробовал поставить maxdop побольше на уровне экземпляра и уже через минут 10 мне позвонили юзеры с жалобами. Оказалось, что косяк так и не устранён. Естественно, вернул maxdop 1 и решил больше никогда не трогать.
2 дек 15, 17:43    [18504369]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить