presto_query_processing
Presto Query Processing
์ฟผ๋ฆฌ ์คํ ๊ณํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
explain analyze select * from open_data.highway_traffic where sumdate > 20220101 limit 10
Fragment structure : fragment๋ ํ๋ ์คํ ์ ๋จ์ผ ๋ ธ๋ ํน์ ์ฌ๋ฌ ๋ ธ๋๋ก ๋ง๋ค์ด์ง ์ผํ๋ ๋จ์
Distribution / Row layout
Performance stats
EXPLAIN๊ณผ EXPLAIN ANALYZE ๋น๊ต
EXPLAIN: plan structure + cost estimates
EXPLAIN ANALYZE: plan structure + cost estimates + actual execution statistics
EXPLAIN
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
์ฐ์ 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
Limit pushdown / Partial limit pushdown
Skew
Reference
https://prestodb.io/docs/current/sql/explain.html
https://techblog.woowahan.com/2556/
https://trino.io/Presto_SQL_on_Everything.pdf
Last updated