|
Долгая или неуспешная компиляция inline UDF в SQL 2019
|
|||
---|---|---|---|
#18+
Добрый день, Когда-то похожая проблема была при переходе на SQL 2014: запросы с большим количеством join уходили в долгую компиляцию (есть ссылка на connect, которая теперь бесполезна). Сейчас на SQL 2019 простые UDF стали автоматически inline. Рассмотрим пример. Версия Код: plaintext 1. 2. 3.
Функция (код упрощен, в оригинале похожая логика - несколько if и присваивание переменной): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
Результат 1 Код: plaintext 1.
Если в коде функции раскомментировать строку, то после долгого времени ожидания (зависит от оборудования) - Результат 2 Код: plaintext 1.
Отключим inline Код: sql 1.
Результат 3 Код: plaintext 1.
Если добавить в код каких-нибудь select, то результат проявляется на более коротком коде (не 20 if-ов, а примерно 10). Похоже на ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 22:07 |
|
Долгая или неуспешная компиляция inline UDF в SQL 2019
|
|||
---|---|---|---|
#18+
Acce_EkbКогда-то похожая проблема была при переходе на SQL 2014: запросы с большим количеством join уходили в долгую компиляцию (есть ссылка на connect, которая теперь бесполезна). Сейчас на SQL 2019 простые UDF стали автоматически inline.Ага. Когда-то давно у человечества была проблема с чумой, сейчас - с загрязнением воздуха, парниковым эффектом и что-то там про пластик заливают. Acce_EkbРассмотрим пример...код упрощенКод так себе. Но если у вас такие скалярки, то сделайте "Отключим inline", и живите спокойно. Acce_EkbПохоже на ошибку.Ну, в support.microsoft.com пишите. Сюда аппелировать зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2020, 02:18 |
|
Долгая или неуспешная компиляция inline UDF в SQL 2019
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич Сюда аппелировать зачем? Потому что это интересно и, возможно, полезно для других. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2020, 08:16 |
|
Долгая или неуспешная компиляция inline UDF в SQL 2019
|
|||
---|---|---|---|
#18+
Acce_Ekb Гавриленко Сергей Алексеевич Сюда аппелировать зачем? Потому что это интересно и, возможно, полезно для других. Гавриленко Сергей Алексеевич Код так себе. Конечно, в нормальной системе не используют скалярные функции, т.к. раньше инлайн не было. Но если они всё таки есть, то IF-ы в них обычно встречаются, и тогда нужно учитывать этот баг при переходе на 2019. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2020, 08:38 |
|
Долгая или неуспешная компиляция inline UDF в SQL 2019
|
|||
---|---|---|---|
#18+
В общем-то понятно что все udf не взлетят в inline. Или вообще отключать или WITH INLINE = OFF под рукой 2019 нет, но имхо если делать if .. else if то может и взлетит ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2020, 10:20 |
|
Долгая или неуспешная компиляция inline UDF в SQL 2019
|
|||
---|---|---|---|
#18+
TaPaK В общем-то понятно что все udf не взлетят в inline. Или вообще отключать или WITH INLINE = OFF под рукой 2019 нет, но имхо если делать if .. else if то может и взлетит Отключили, да. Отмечу - в нашем конкретном примере скалярная функция вычисляет некий показатель в несколько шагов, используется не в запросе Код: sql 1.
а просто вызывается для получения одного скалярного значения Код: sql 1.
ей inline и не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2020, 10:37 |
|
Долгая или неуспешная компиляция inline UDF в SQL 2019
|
|||
---|---|---|---|
#18+
Acce_Ekb, ну они пошли по пути, что если подходит то пусть будет инлайн, хотя логичнее было бы регулировать только WITH INLINE = ON/OFF ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2020, 10:48 |
|
|
start [/forum/topic.php?fid=46&msg=39918115&tid=1686605]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 22ms |
total: | 131ms |
0 / 0 |