#sql #sql_server
В общем, если использовать встроенные скалярки, то параллелзим не пропадает, но если написать свою скалярку и не важно есть ли там циклы или там считается 2+2, то параллелизм из плана пропадает. В SQL Server 2019, вроде, появятся inline-функции, которые в некоторых случаях не убивают параллелизм, однако мне все равно не понятно, почему для UDF'ов нельзя генерировать оптимальные планы запросов? Например, UDF CLR'ки не убивают параллелизм, хоть и есть затраты на кроссдоменное взаимодействие. В других СУБД такая же политика?
Ответы
Ответ 1
По идее причина кроется в том, что в UDF могут быть побочные эффекты, либо они могут зависеть не только от входных параметров, но и от некоторых внешних факторов. Плюс в UDF может использоваться менеджер памяти, который не поддерживает многопоточную работу (как том у SQL сервера, на новые коннекты создаются отдельные потоки или процессы?) Как следствие, т.к. сервер ничего не знает о конкретной UDF он запускает все в однопоточном режиме
Комментариев нет:
Отправить комментарий