presto_query_processing

Presto Query Processing

  • image

  • ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • image

    • explain analyze select * from open_data.highway_traffic where sumdate > 20220101 limit 10

    • Fragment structure : fragment๋Š” ํ”„๋ ˆ์Šคํ† ์˜ ๋‹จ์ผ ๋…ธ๋“œ ํ˜น์€ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ผํ•˜๋Š” ๋‹จ์œ„

      • image

    • Distribution / Row layout

      • image

    • Performance stats

      • image

  • EXPLAIN๊ณผ EXPLAIN ANALYZE ๋น„๊ต

    • EXPLAIN: plan structure + cost estimates

    • EXPLAIN ANALYZE: plan structure + cost estimates + actual execution statistics

      • image

EXPLAIN

  • image

    • https://trino.io/Presto_SQL_on_Everything.pdf

  • EXPLAIN [ ( option [, ...] ) ] statement

  • ๋ช…๋ น๋ฌธ์˜ ๋…ผ๋ฆฌ์  ๋˜๋Š” ๋ถ„์‚ฐ ์‹คํ–‰ ๊ณ„ํš์„ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ๋ช…๋ น๋ฌธ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค

  • ํ”„๋ ˆ์Šคํ† ์˜ ์ฟผ๋ฆฌ ์‹คํ–‰ ํ˜•ํƒœ

    • ANSI-SQL๋กœ ์ž‘์„ฑ๋œ ํ”„๋ ˆ์Šคํ† ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฟผ๋ฆฌ ๋ฌธ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

    • ํ”„๋ ˆ์Šคํ†  ์›Œ์ปค์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฟผ๋ฆฌ ํ˜•ํƒœ๋กœ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • ์‹คํ–‰ ๋‹จ๊ณ„๋ณ„๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

    • ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ๋ถ„ํ• ํ•ด์„œ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ์—…๋ฌด ๋‹จ์œ„๋กœ ํ•  ์ผ์„ ์ชผ๊ฐญ๋‹ˆ๋‹ค. ๊ฐ ์ผ์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ธ”๋ž™๋ฐ•์Šค ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ ธ์„œ fragment(ํ”„๋ ˆ์Šคํ† ์˜ ๋‹จ์ผ ๋…ธ๋“œ ํ˜น์€ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ผํ•˜๋Š” ๋‹จ์œ„. ๊ฐ ๋ถ€๋ถ„/๊ฐ๊ฐ์˜ ๊ณณ ์ •๋„๋กœ ๋‚˜ํƒ€๋ƒˆ๋‹ค)์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

    • ๋ถ€๋ถ„ ๊ฐ„์— ํ•„์š”์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • explain select * from open_data.highway_traffic where sumdate > 20220101 limit 10

    • image

  • ์šฐ์„  WHERE์กฐ๊ฑด์ด ํ•ด๋‹น๋˜๋Š” ํ…Œ์ด๋ธ”์„ ScanFilterํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์Šคํ† ์˜ ๊ฐ ๋ถ€๋ถ„(๋‹จ์ผ ํ˜น์€ ์—ฌ๋Ÿฌ ๋…ธ๋“œ)์—์„œ ์ผํ•˜๋Š” ์œ ํ˜•์€ ๋ณดํ†ต single ํ˜น์€ hash๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์—ฌ๊ธฐ์—์„œ๋Š” Single ์œ ํ˜•์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    • SINGLE : Fragment๋Š” ๋‹จ์ผ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

    • HASH : ์กฐ๊ฐ์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ๋œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ๊ณ ์ •๋œ ์ˆ˜์˜ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

    • ROUND_ROBIN : Fragment๋Š” ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ๋ถ„์‚ฐ๋œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์ •๋œ ์ˆ˜์˜ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

    • BROADCAST : ํ”„๋ž˜๊ทธ๋จผํŠธ๋Š” ๊ณ ์ •๋œ ์ˆ˜์˜ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋ฉฐ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฉ๋‹ˆ๋‹ค.

    • SOURCE : ์กฐ๊ฐ์€ ์ž…๋ ฅ ๋ถ„ํ• ์— ์•ก์„ธ์Šค ํ•˜๋Š” ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

EXPLAIN ANALYZE

  • EXPLAIN ANALYZE [VERBOSE] statement

    • ๋ช…๋ น๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฐ ์ž‘์—…์˜ ๋น„์šฉ๊ณผ ํ•จ๊ป˜ ๋ช…๋ น๋ฌธ์˜ ๋ถ„์‚ฐ ์‹คํ–‰ ๊ณ„ํš์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. VERBOSE์˜ต์…˜์€ ๋” ์ž์„ธํ•œ ์ •๋ณด์™€ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ํ†ต๊ณ„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค

    • ๊ฐ ๊ณ„ํš ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํ†ต๊ณ„(์˜ˆ: ๋…ธ๋“œ ์ธ์Šคํ„ด์Šค๋‹น ํ‰๊ท  ์ž…๋ ฅ, ๊ด€๋ จ ๊ณ„ํš ๋…ธ๋“œ์— ๋Œ€ํ•œ ํ‰๊ท  ํ•ด์‹œ ์ถฉ๋Œ ์ˆ˜)๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ†ต๊ณ„๋Š” ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ด์ƒ(ํŽธ์ฐจ, ๋น„์ •์ƒ์ ์ธ ํ•ด์‹œ ์ถฉ๋Œ)์„ ๊ฐ์ง€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • LimitPartial์€ limit ๋ฌธ๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•œ ์›Œ์ปค์—์„œ ๋ฐ์ดํ„ฐ ์ผ๋ถ€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

    • RemoteExchange, LocalExchange๋Š” ๊ฐ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์œผ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

    • ๋ชจ์€ ๋ฐ์ดํ„ฐ์—์„œ ์ตœ์ข… limit์„ ์‹คํ–‰ํ•˜๊ณ  ์ด๋ฅผ output์œผ๋กœ ๋‚ด๋†“์Šต๋‹ˆ๋‹ค.

  • EXPLAIN ANALYZE VERBOSE select * from open_data.highway_traffic where sumdate > 20220101 limit 10

    • Constant folding / Column pruning

      • image

    • Limit pushdown / Partial limit pushdown

      • image

    • Skew

      • image

Reference

  • https://prestodb.io/docs/current/sql/explain.html

  • https://techblog.woowahan.com/2556/

  • https://trino.io/Presto_SQL_on_Everything.pdf

Last updated