Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: MAXDOP =1  [new]
dbnadm
Member

Откуда:
Сообщений: 101
Glory
Видно что ? Как процесс sqlservr.exe использует все 4 процессора для выполнения запроса ? Расскажите, как вы это увидели

Если вы в Task Manager переключаетесь на закладку Processes то вы видите какой процесс отъедает сколько % CPU. Так вот, sqlservr.exe отъедает 25%, остальное - System Idle Process. И что здесь не так?
15 сен 09, 11:06    [7659403]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
Glory
Member

Откуда:
Сообщений: 104760
dbnadm
Glory
Видно что ? Как процесс sqlservr.exe использует все 4 процессора для выполнения запроса ? Расскажите, как вы это увидели

Если вы в Task Manager переключаетесь на закладку Processes то вы видите какой процесс отъедает сколько % CPU. Так вот, sqlservr.exe отъедает 25%, остальное - System Idle Process. И что здесь не так?

И где я тут увижу, что sqlservr.exe несколько процессоров именно для выполнения запроса ?
15 сен 09, 11:08    [7659419]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
dbnadm,

Давайте, все-таки, разберемся, о чем мы тут все. если речь идет об IntraQuery параллелизме, то его наличие может быть определено только одним способом - наличием в плане выполнения соответствующих операторов. Т.е. когда выполнение запроса бъется на части и эти части выполняются в параллель.

Если запрос не параллелится и система SMP, то это не значит, что будет задействован только один процессор (ядро), ибо для выполнения запроса "внутри себя" сервер использует более одной нити, и эти нити могут работать на нескольких процессорах (ядрах).
15 сен 09, 11:09    [7659430]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
dbnadm
Member

Откуда:
Сообщений: 101
pkarklin
dbnadm,
Если запрос не параллелится и система SMP, то это не значит, что будет задействован только один процессор (ядро), ибо для выполнения запроса "внутри себя" сервер использует более одной нити, и эти нити могут работать на нескольких процессорах (ядрах).

Это все звучит крайне странно. Получается, распараллеливание происходит в любом случае? Зачем тогда такие настройки на сервере вообще? Кроме того, еще раз хотелось бы спросить, хорошо, допустим по какой-то причине сервер все равно распараллелил запрос при отключенном параллелизме - почему ни один из потоков не загружает ни одно из ядер на все 100%?
15 сен 09, 11:17    [7659502]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
dbnadm
Member

Откуда:
Сообщений: 101
Glory
И где я тут увижу, что sqlservr.exe несколько процессоров именно для выполнения запроса ?

Простите, а для чего еще? Ничего кроме этого одного запроса на сервере не происходит.
15 сен 09, 11:21    [7659541]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
dbnadm
Получается, распараллеливание происходит в любом случае?


По-моему Вы путаете теплое с мягким: распаралелливание запроса оптимизатором MS SQL и паралелльное выполнение нитей процесса операционной системы на разных процессорах (ядрах).

dbnadm
Зачем тогда такие настройки на сервере вообще?


Дабы разрешать\запрещать распаралелливание запроса оптимизатором MS SQL.

dbnadm
хорошо, допустим по какой-то причине сервер все равно распараллелил запрос при отключенном параллелизме - почему ни один из потоков не загружает ни одно из ядер на все 100%?


Это ОС развела выполнение нитей одного процесса по разным процессорам (ядрам), а не оптимизатор MS SQL. И для выполнения каждой нити нет необходимости в 100%% загрузке.
15 сен 09, 11:24    [7659568]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
Glory
Member

Откуда:
Сообщений: 104760
dbnadm
Glory
И где я тут увижу, что sqlservr.exe несколько процессоров именно для выполнения запроса ?

Простите, а для чего еще? Ничего кроме этого одного запроса на сервере не происходит.

Ага, я ничего не делаю - значит сервер ничего не должен делать. Я выполняю запрос - значит сервер должен заниматься только моим запросом. Иначе нафиг он нужен.
Вас спрашивают о методах и средствах проверки, а вы в ответ можете только сказать "Простите, а для что еще там сервер может делать"
15 сен 09, 11:24    [7659569]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
dbnadm
Member

Откуда:
Сообщений: 101
Glory
Ага, я ничего не делаю - значит сервер ничего не должен делать. Я выполняю запрос - значит сервер должен заниматься только моим запросом. Иначе нафиг он нужен.
Вас спрашивают о методах и средствах проверки, а вы в ответ можете только сказать "Простите, а для что еще там сервер может делать"

Понятно. Сервер коварно начинает заниматься чем нибудь еще КАЖДЫЙ раз когда я запускаю свой процесс и причем именно в ТОТ ЖЕ САМЫЙ момент.
15 сен 09, 11:32    [7659632]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
dbnadm
Member

Откуда:
Сообщений: 101
pkarklin
Это ОС развела выполнение нитей одного процесса по разным процессорам (ядрам), а не оптимизатор MS SQL.

А кто создал нити процесса? SQL? Нити процесса могут быть созданы только самим процессом а не ОС. Кстати, у меня опция "Use Windows NT fibers" выключена.
15 сен 09, 11:36    [7659672]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
iljy
Member

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

вы понимаете о чем говорите? Сервер в любом случае содержит много потоков, и если вы воспользуетесь более совершенным инструментом чем TaskManager - вы их увидите. Запрос не распараллеливается, но для его выполнения требуется масса вспомогательных действий, за которые отвечают разные потоки сервера.
15 сен 09, 11:37    [7659687]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
dbnadm,

Причем тут опция "Use Windows NT fibers"?! Это альтернатива нитям.
15 сен 09, 11:39    [7659720]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
dbnadm
Member

Откуда:
Сообщений: 101
pkarklin
Причем тут опция "Use Windows NT fibers"?! Это альтернатива нитям.


Ну, тут легкое недоразумение. Просто я привык говорить процесс, поток, нить. А не процесс, нить, волокно.
Но вот вы сказали: "Это ОС развела выполнение нитей одного процесса по разным процессорам (ядрам), а не оптимизатор MS SQL". ОС не может создавать нити для процесса, процесс создает их сам. Значит, все равно SQL распараллелил?
15 сен 09, 12:56    [7660469]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
dbnadm,

Выполнение самого запроса сервер не распараллелил, и это видно в плане. То, что несколько процессов, нитей, волокон требуются серверу для выполнения не распаралеленного запроса видно по загрузке процессоров (ядер).

Первое решулируется опцией max degree of parallelism.
Второе CPU affinity mask.

И никак не наоборот!

Осознайте, наконец, существоание разных уровнях распараллеливания.

Сообщение было отредактировано: 15 сен 09, 13:03
15 сен 09, 13:02    [7660520]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
dbnadm
Member

Откуда:
Сообщений: 101
iljy
вы понимаете о чем говорите? Сервер в любом случае содержит много потоков, и если вы воспользуетесь более совершенным инструментом чем TaskManager - вы их увидите.

Процесс может содержать много потоков? Ну надо же. Век живи, век учись. Кстати, нисколько не сомневаясь что вы пользуетесь исключительно супер навороченными интсрументами, все таки замечу что Task Manager тоже показывает кол-во потоков на процесс на ура.

iljy
Запрос не распараллеливается, но для его выполнения требуется масса вспомогательных действий, за которые отвечают разные потоки сервера.

И вы даже можете сказать каких? И что же получается? Мы запретили распараллеливание, но сервер все равно поделил план исполнения на как-бы основное и как-бы вспомогательные действия и давай их исполнять на разных CPU? А зачем мы тогда имеем опцию запрета распараллеливания? И еще. В который уж раз - почему если разные потоки исполнения запроса все равно исполняются на разных CPU, при разрешенном распараллеливании все CPU заняты на 100%, а если нет то только на ~25% каждый? Иными словами - у вас есть что сказать по существу?
15 сен 09, 13:04    [7660536]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]

Guest
для Вас есть разница в чтении данных ms sql из таблицы и чтение данных с диска? или эти процессы идентичны?
15 сен 09, 13:07    [7660559]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
И вы даже можете сказать каких? И что же получается? Мы запретили распараллеливание, но сервер все равно поделил план исполнения на как-бы основное и как-бы вспомогательные действия и давай их исполнять на разных CPU? А зачем мы тогда имеем опцию запрета распараллеливания? И еще. В который уж раз - почему если разные потоки исполнения запроса все равно исполняются на разных CPU, при разрешенном распараллеливании все CPU заняты на 100%, а если нет то только на ~25% каждый? Иными словами - у вас есть что сказать по существу?


Да сколько же можно. План выполнения он не делил. Он "делит" все, что обслуживает выполнение запроса, например, механизмы планирования приоритетов, управления памятью, контроля ресурсов, обработки исключений, обслуживания ввода-вывода, обеспечение синхронизации и т.п.
15 сен 09, 13:20    [7660675]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
iljy
Member

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

сказать по существу есть, только вы все равно не поймете, потому что вам это все уже несколько раз сказали
15 сен 09, 14:20    [7661316]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
pkarklin
автор
И вы даже можете сказать каких? И что же получается? Мы запретили распараллеливание, но сервер все равно поделил план исполнения на как-бы основное и как-бы вспомогательные действия и давай их исполнять на разных CPU? А зачем мы тогда имеем опцию запрета распараллеливания? И еще. В который уж раз - почему если разные потоки исполнения запроса все равно исполняются на разных CPU, при разрешенном распараллеливании все CPU заняты на 100%, а если нет то только на ~25% каждый? Иными словами - у вас есть что сказать по существу?


Да сколько же можно. План выполнения он не делил. Он "делит" все, что обслуживает выполнение запроса, например, механизмы планирования приоритетов, управления памятью, контроля ресурсов, обработки исключений, обслуживания ввода-вывода, обеспечение синхронизации и т.п.
Лично я так и не увидел ответа, почему не загрузить хотя бы 1 процессор на 100%.
Пускай загружает остальные насколько хочет. Хотя странно, что именно 4 процессора загружены на 25%. 100/4 = 25 (я как бы намекаю).
16 сен 09, 08:13    [7664973]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Deff
Лично я так и не увидел ответа, почему не загрузить хотя бы 1 процессор на 100%.
Пускай загружает остальные насколько хочет.


На кажом из процессоров одновременно может работать только одна нить. Каждой из нити не нужны 100% мощности процессора. Все чертыре нити не могут одновременно работать на одном процессоре, дабы загрузить его на 100%.
16 сен 09, 08:59    [7665099]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Поговорил с админами - объяснили. SQL при maxdop=1 выдает 1 поток, которые нельзя распараллелить, т.е. нить одна. Но выполняется эта нить, не на одном процессоре, а по очереди на всех процессорах. Там сложная система распределения. Получется, что загрузка всех процессоров в сумме не может превышать 100%(ну говоря об одном потоке).
16 сен 09, 09:31    [7665226]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Deff
Поговорил с админами - объяснили. SQL при maxdop=1 выдает 1 поток, которые нельзя распараллелить, т.е. нить одна.


Ничего подобного. Даже без расспараллеливания плана запроса операции ассинхронного IO выполнются другой нить потока.
16 сен 09, 10:00    [7665376]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
pkarklin
Deff
Поговорил с админами - объяснили. SQL при maxdop=1 выдает 1 поток, которые нельзя распараллелить, т.е. нить одна.


Ничего подобного. Даже без расспараллеливания плана запроса операции ассинхронного IO выполнются другой нить потока.
Тут не спорю. Ассинхронное IO конечно.
Я про один поток в общих чертах сказал, что касается задачи. Основная(доминирующая) нить одна (ну, например, чтение с диска и вывод займут 5% процессорных мощностей от сортировки этих данных). Ассинхронное IO, также, не объясняет равномерную загрузку процессоров.
16 сен 09, 10:12    [7665460]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
dbnadm
Member

Откуда:
Сообщений: 101
Deff
Поговорил с админами - объяснили. SQL при maxdop=1 выдает 1 поток, которые нельзя распараллелить, т.е. нить одна. Но выполняется эта нить, не на одном процессоре, а по очереди на всех процессорах. Там сложная система распределения. Получется, что загрузка всех процессоров в сумме не может превышать 100%(ну говоря об одном потоке).


Вы абсолютно правы. Я уже тоже разобрался сам, без местных "умников" которые вообще и вопроса то не слышат и не понимают. Чего только не наслушался...А ларчик просто открывался - так работает система мультмзадачности Windows. Нет там вспомогательных потоков о которых pharklin рассказывает которые грузят на 25% целых 3!!! CPU тогда как код потока исполнения самого запроса грузит только 1 CPU на те же 25% (вспомогательные потоки разумеется есть но они грузят процессоры совершенно незначительно) Это сам поток запроса переключается равномерно между всеми 4 CPU. Вот и все. Кстати, интересная фишка - на 2005-м если отключить опцию "Automatically set processor affinity mask for all processors" но при этом включить все 4 CPU в affinity то вуаля! и запрос с OPTION (MAXDOP 1) будет исполнятся только на одном CPU грузя его на все 100%(как я этого ожидал), все остальные останутся по нулям. Если же эту опцию включить - поток "размажется" по всем 4 CPU грузя каждый примерно на 25%.
16 сен 09, 10:40    [7665662]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Я уже тоже разобрался сам, без местных "умников" которые вообще и вопроса то не слышат и не понимают. Чего только не наслушался...А ларчик просто открывался - так работает система мультмзадачности Windows...Это сам поток запроса переключается равномерно между всеми 4 CPU.


Да щаз... Откройте для User Mode Scheduler в 2000. https://www.sql.ru/articles/mssql/2005/101906InsideSQLServer2000UMS.shtml

Поскольку задачи планирования в SQL Server должен решать UMS, а не планировщик Windows, UMS должен каким - либо способом не позволять операционной системе переключать по своему усмотрению потоки процессоров.
16 сен 09, 10:54    [7665787]     Ответить | Цитировать Сообщить модератору
 Re: MAXDOP =1  [new]
dbnadm
Member

Откуда:
Сообщений: 101
pkarklin
Да щаз... Откройте для User Mode Scheduler в 2000. https://www.sql.ru/articles/mssql/2005/101906InsideSQLServer2000UMS.shtml

Поскольку задачи планирования в SQL Server должен решать UMS, а не планировщик Windows, UMS должен каким - либо способом не позволять операционной системе переключать по своему усмотрению потоки процессоров.


Это фраза выдраная из сложного контекста. SQL Server должен получить для выполнения запроса 1 CPU так как мы зарезали параллелизм и он его получает. Только не в виде 1CPU x 100% load а в виде 4CPU x 25% load. А вы продолжаете защищать абсурдную точку зрения а именно: поток грузит 1 CPU всего на 25% а "вспомогательные" процессы для потока грузят остальные 3 CPU на 25% каждый что в сумме дает 75%. Не слишком жирно для вспомогательных потоков? Причем вас даже не смущает что вспомогательные потоки все время зачем-то так хитро работают что общая нагрузка все время держится в районе 25% (что прекрасно объяснается одним CPU hungry потоком постоянно переключаемым между 4 CPUs) Кроме того, если вы утверждаете что поток процесса исполняется на одном CPU и при этом этот CPU не загружен на 100% это может означать только одно - поток значительное время находится в состоянии ожидания(например IO). Однако используя sys.dm_os_wait_stats и sys.dm_exec_sessions (на 2005-м, где картина точно такая же) можно убедиться что поток для этого запроса ничего не ждет, там полное время выполнения запроса практически равно суммарному времени реального исполнения кода потока запроса на одном из CPU. Что неудивительно, так как запрос чисто числодробительный, он даже tempdb не использует.
16 сен 09, 12:45    [7666690]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить