presto_tuning
Presto tuning
Presto ์กฐ์ธ ๋ฐ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ ํ
Partitioned
Partitioned : ์ฟผ๋ฆฌ์ ์ฐธ์ฌํ๋ ๊ฐ ๋ ธ๋๋ ๋ฐ์ดํฐ์ ์ผ๋ถ์์ ํด์ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
Presto์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ์กฐ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋ถ์ฐ๋ PARTITION ์กฐ์ธ์ ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์กฐ์ธ ํค์ ํด์ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ผ์ชฝ ํ ์ด๋ธ๊ณผ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ถํ ํฉ๋๋ค. ๋ถํ ๋ ์กฐ์ธ์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ๋ฌ ์์ ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ ๋น ๋ฅด๊ณ ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-- SET SESSION join_distribution_type = 'PARTITIONED'
Broadcast
Broadcast : ์ฟผ๋ฆฌ์ ์ฐธ์ฌํ๋ ๊ฐ ๋ ธ๋๋ ๋ชจ๋ ๋ฐ์ดํฐ์์ ํด์ ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.(๋ฐ์ดํฐ๋ ๊ฐ ๋ ธ๋์ ๋ณต์ ๋จ).
์กฐ์ธ ํ ์ด๋ธ ์ค ํ๋๊ฐ ๋งค์ฐ ์์ ์ผ๋ถ ๊ฒฝ์ฐ ๋ถ์ฐ PARTITION ์กฐ์ธ์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๋ ์ค๋ฒํค๋๊ฐ ์กฐ์ธ ์์ ์ ์ฐธ์ฌํ๋ ๋ชจ๋ ๋ ธ๋์ ์ ์ฒด ํ ์ด๋ธ์ ๋ธ๋ก๋์บ์คํธํ๋ ์ด์ ์ ์ด๊ณผํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ 'BROADCAST' ์กฐ์ธ์ด ๋ ์ ์ํ๋ ์ ์์ต๋๋ค.
BROADCAST ์กฐ์ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์กฐ์ธ ์ ์์ ๋จผ์ ํฐ ํ ์ด๋ธ์ ์ง์ ํ๋ค์ ๋งค์ง ์ฝ๋ฉํธ๋ฅผ ์ง์ ํ์ฌ BROADCAST ์กฐ์ธ์ ํ์ฑํํ ์ ์์ต๋๋ค.
-- SET SESSION join_distribution_type = 'BROADCAST'
์ด ์ต์ ์ ์ฌ๋ฐ๋ฅธ ์กฐ์ธ ํ ์ด๋ธ์ด ๋ชจ๋ ๋ ธ๋์ ๋ณต์ฌ๋๋ฏ๋ก ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
ORDER BY ์ ์ด ์๋ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ Presto๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ์ฐ ์ ๋ ฌ์ ์ฌ์ฉํฉ๋๋ค. ์ ๋ ฌ ์์ ์ ์ฌ๋ฌ ๋ ธ๋์์ ๋ณ๋ ฌ๋ก ์คํ๋๋ฉฐ ๋จ์ผ ๋ ธ๋๊ฐ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ณํฉํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋จ์ผ ๋ ธ๋ ์ ๋ ฌ ์์ ์ด ๋ ์ ์ํ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๋งค์ง ์ฝ๋ฉํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ ์ ๋ ฌ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
-- set distributed_sort=false
๋ถ์ฐ ์ ๋ ฌ์ ๋นํ์ฑํํ๋ฉด ๋จ์ผ ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ผ๋ก ์ธํด ์ฟผ๋ฆฌ๊ฐ ์คํจํ ์ ์์ต๋๋ค.
Presto ํ๋
CREATE TABLE AS SELECT ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ถ๋ ฅ ํ๋ก์ธ์ค๋ฅผ ๋ณ๋ ฌํํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ ์ ํ ์ด๋ธ์ DROPํ๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์ํฉ๋๋ค. ๊ฒฐ๊ณผ ์ถ๋ ฅ ์ฑ๋ฅ์ SELECT *๋ฅผ ์คํํ๋ ๊ฒ๋ณด๋ค 5๋ฐฐ ๋น ๋ฆ ๋๋ค.
DROP TABLE์ ์ฌ์ฉํ์ง ์๊ณ Presto๋ JSON ํ ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ์ฒดํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ ํ ์ด๋ธ์ 100GB์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ฝ๋๋ค์ดํฐ๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด 100GB ์ด์์ JSON ํ ์คํธ๋ฅผ ์ ์กํฉ๋๋ค. ๋ฐ๋ผ์ ์ง์ ๊ณ์ฐ์ด ๊ฑฐ์ ๋๋๋ JSON ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
1.์ฟผ๋ฆฌ ๋งจ ์์ DROP TABLE ๋ฌธ์ ์ถ๊ฐํฉ๋๋ค.
2.CREATE TABLE(ํ ์ด๋ธ) AS SELECT ์ฌ์ฉํฉ๋๋ค.
DROP TABLE IF EXISTS my_result; CREATE TABLE my_result AS SELECT * FROM my_table;
Presto๋ ๊ฐ ์ฟผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ถ์ ํ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์์ ๋ชฉ๋ก์ ๋๋ค.
distinct
approx_distinct() ๊ฐ์ ๊ทผ์ฌ ์ง๊ณ ํจ์ ์ฌ์ฉํฉ๋๋ค.
COUNT(DISTINCT x)๋ฅผ ์ฌ์ฉํ๋ ๋์ approx_distinct(x)๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฆฐ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ๋ง์์ผ ํฉ๋๋ค
UNION
UNION ๋์ ์ UNION ALL์ ์ฌ์ฉํฉ๋๋ค.
ORDER BY
ORDER BY์ ํจ๊ป LIMIT ์ฌ์ฉํฉ๋๋ค.
GROUP BY (of many columns)
GROUP BY ์ ๋ด์ ์นด๋๋๋ฆฌํฐ ๊ณ ๋ ค
GROUP BY ๋ด์ ํ๋ ๋ชฉ๋ก์ ๋์ ์นด๋๋๋ฆฌํฐ ์์๋ก ์ ์คํ๊ฒ ์ ๋ ฌํ์ฌ GROUP BY ๊ธฐ๋ฅ์ ์ฑ๋ฅ์ ํฅ์
์ข์ ์ฟผ๋ฆฌ : SELECT GROUP BY uid, gender
๋์ ์ฟผ๋ฆฌ : SELECT GROUP BY gender, uid
GROUP BY ์ด์ ๋ฌธ์์ด ๋์ ์ซ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ซ์๋ ๋ฌธ์์ด๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋ก ํ๊ณ ๋น๊ต๊ฐ ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค.
joins
ํฐ ํ ์ด๋ธ๋ถํฐ ์์ ํ ์ด๋ธ ์์ผ๋ก ํ ์ด๋ธ์ ์กฐ์ธํด์ผ ํฉ๋๋ค.
๋๋ฑํ์ง ์์ ์กฐ์ธ ์กฐ๊ฑด์ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง๋๋ค.
Presto๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ก๋์บ์คํธ ์กฐ์ธ์ ์ํํ์ฌ ์ผ์ชฝ ํ ์ด๋ธ์ ์ฌ๋ฌ ์์ ์ ๋ ธ๋๋ก ๋ถํ ํ ๋ค์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ์ ์ฒด ๋ณต์ฌ๋ณธ์ ํํฐ์ ์ด ์๋ ์์ ์ ๋ ธ๋๋ก ๋ณด๋ ๋๋ค. ์ค๋ฅธ์ชฝ ์ฌ์ด๋ ํ ์ด๋ธ์ด ํฌ๊ณ ์์ ์ ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ถ์ฐ ์กฐ์ธ ์ฌ์ฉ
์ฟผ๋ฆฌ๊ฐ ์ฌ์ ํ ์๋ํ์ง ์์ผ๋ฉด ์ธ์ ์์ฑ์ ์ค์ ํ๋ ๋งค์ง ์ฃผ์์ ์ถ๊ฐํ์ฌ ๋ถ์ฐ ์กฐ์ธ์ ์ฌ์ฉํฉ๋๋ค.
DROP TABLE IF EXISTS my_result; -- set session join_distribution_type = 'PARTITIONED' CREATE TABLE my_result AS SELECT ... FROM large_table l, small_table s WHERE l.id = s.id
๋ถ์ฐ ์กฐ์ธ ์๊ณ ๋ฆฌ์ฆ ์ ์กฐ์ธ ํค์ ํด์ ๊ฐ์ ๋ถํ ํค๋ก ์ฌ์ฉํ์ฌ ์ผ์ชฝ ๋ฐ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ถํ ํฉ๋๋ค. ์ค๋ฅธ์ชฝ ์ฌ์ด๋ ํ ์ด๋ธ์ด ํฌ๋๋ผ๋ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋คํธ์ํฌ ๋ฐ์ดํฐ ์ ์ก ํ์๋ฅผ ๋๋ฆด ์ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ก๋์บ์คํธ ์กฐ์ธ๋ณด๋ค ๋๋ฆฝ๋๋ค.
์ด ์ ์ฅ ํน์ฑ
๋๋ฌด ๋ง์ ์ด์ ์ ํํ๋ฉด ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง๋๋ค.
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ํฌ๊ธฐ
๋๋ฌด ๋ง์ ํ์ ์์ฑํ๋ ค๋ฉด ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๋์ CREATE TABLE AS... ๋๋ INSERT INTO ๋๋ result_output_redirect ๋งค์ง ์ฝ๋ฉํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ์ํ ์ด ์ง์
์๊ฐ ๊ธฐ๋ฐ ํํฐ์ ๋ ํ์ฉ
์ผ๋ จ์ LIKE ์ ์ ํ๋์ ๋จ์ผ regexp_like ์ ๋ก ์ง๊ณ
Reference
https://trino.io/Presto_SQL_on_Everything.pdf
https://api-docs.treasuredata.com/en/tools/presto/presto_performance_tuning/
Last updated