|
jit компиляция, timing и скорость выполнения запроса
|
|||
---|---|---|---|
#18+
Добрый день! при выполнении сложного запроса explain (analyze, buffers) выводит: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
если выполнить Код: sql 1.
и повторить explain : Код: plaintext 1. 2. 3. 4.
получается что JIT компиляция никак не ускоряет запрос: 130342,853 (время выполнения) - 75988.895 (Total JIT) = 54354 это примерно время выполнения запроса без JIT. Подскажите: 1. В JIT секции эксплайна что означают операции Optimization 42506.513 ms, Emission 32586.621 ms - это "оптимизации для улучшения сгенерированного кода" и что-то еще? 2. Как правильно выключить jit компиляцию для подобных запросов? поднять jit_..._cost`ы или просто бахнуть set jit=off? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2021, 16:41 |
|
jit компиляция, timing и скорость выполнения запроса
|
|||
---|---|---|---|
#18+
да, версия: PostgreSQL 12.5 (Debian 12.5-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 09:14 |
|
jit компиляция, timing и скорость выполнения запроса
|
|||
---|---|---|---|
#18+
Misha111 Подскажите: 1. В JIT секции эксплайна что означают операции Optimization 42506.513 ms, Emission 32586.621 ms - это "оптимизации для улучшения сгенерированного кода" и что-то еще? 2. Как правильно выключить jit компиляцию для подобных запросов? поднять jit_..._cost`ы или просто бахнуть set jit=off? 1 - да. 2 - или оптом jit=off или в вашем случае может будет эффективнее jit_optimize_above_cost поднять до высокого значения чтобы оно именно оптимизацию не включало в этом конкретном случае. PS: какой то у вас совсем сложный запрос... никогда не видел такие цифры на этапе jit optimization. Не приведете его? Может там какой то очередной баг в jit вылезает...зп PPS: аккуратнее с SET если у вас pgbouncer. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 10:47 |
|
jit компиляция, timing и скорость выполнения запроса
|
|||
---|---|---|---|
#18+
Maxim Boguk, проблема оказалась в обращении к ключу секции партиционированной таблицы (партиций ~500) через скалярный запрос. Код: sql 1. 2. 3.
(select ... было тупо перенесено из оракла - так гарантировалось что ф-я будет выполнена один раз, а не для каждой строки) сделал компактный тест: создание объектов: Код: 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. 3. 4. 5. 6.
получаем Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
тест2 Код: plaintext 1. 2. 3. 4. 5. 6.
получаем Код: plaintext 1. 2. 3.
если поправить вьюху и убрать скаляр: Код: sql 1. 2. 3. 4.
то JIT не выполняется независимо от настроек и сканирование выполняется только по одной секции: Код: plaintext 1. 2. 3.
PS и всеж интересно что означает JIT Emission ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 13:06 |
|
jit компиляция, timing и скорость выполнения запроса
|
|||
---|---|---|---|
#18+
Misha111 PS и всеж интересно что означает JIT Emission Думаю Andres Freund взял штатную терминологию LLVM, а потому Code Emission — The final stage actually puts out the code for the current function, either in the target assembler format or in machine code. В Emission в explain показывается время вот этого куска: https://github.com/postgres/postgres/blob/REL_12_STABLE/src/backend/jit/llvm/llvmjit.c#L661 до INSTR_TIME_ACCUM_DIFF ниже. Но я в LLVM не копенгаген, так что дальше ничего рассказать не смогу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2021, 13:51 |
|
|
start [/forum/topic.php?fid=53&fpage=16&tid=1994236]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
others: | 282ms |
total: | 456ms |
0 / 0 |