Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Почему UDF убивают параллелизм?

#sql #sql_server


В общем, если использовать встроенные скалярки, то параллелзим не пропадает, но если
написать свою скалярку и не важно есть ли там циклы или там считается 2+2, то параллелизм
из плана пропадает.

В SQL Server 2019, вроде, появятся inline-функции, которые в некоторых случаях не
убивают параллелизм, однако мне все равно не понятно, почему для UDF'ов нельзя генерировать
оптимальные планы запросов?

Например, UDF CLR'ки не убивают параллелизм, хоть и есть затраты на кроссдоменное
взаимодействие.

В других СУБД такая же политика?
    


Ответы

Ответ 1



По идее причина кроется в том, что в UDF могут быть побочные эффекты, либо они могут зависеть не только от входных параметров, но и от некоторых внешних факторов. Плюс в UDF может использоваться менеджер памяти, который не поддерживает многопоточную работу (как том у SQL сервера, на новые коннекты создаются отдельные потоки или процессы?) Как следствие, т.к. сервер ничего не знает о конкретной UDF он запускает все в однопоточном режиме

Комментариев нет:

Отправить комментарий