์ด ๋ณด๊ณ ์๋ ๋ค์์ ํ์ฉํ๋ ๋ช ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ์ ์ํฉ๋๋ค. ํ๋ฃจ์ ์๋ฐฑ๋ง ๊ฐ์ SQL ์ฟผ๋ฆฌ๊ฐ ์์ ๋ SQL ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค., ๋ชจ๋ํฐ๋ง๋๋ PostgreSQL ์๋ฒ๊ฐ ์๋ฐฑ ๋ ์์ต๋๋ค.
์ด๋ฌํ ๋๋์ ์ ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ์ ์๋ฃจ์ ์ ๋ฌด์์ด๋ฉฐ, ์ด๊ฒ์ด ์ผ๋ฐ ๊ฐ๋ฐ์์ ์ถ์ ์ด๋ป๊ฒ ๋ ์ฝ๊ฒ ๋ง๋ค์ด ์ค๊น์?
๋๊ฐ ๊ด์ฌ์ด ์๋์? ํน์ ๋ฌธ์ ๋ถ์ ๋ฐ ๋ค์ํ ์ต์ ํ ๊ธฐ๋ฒ SQL ์ฟผ๋ฆฌ ๋ฐ PostgreSQL์ ์ผ๋ฐ์ ์ธ DBA ๋ฌธ์ ํด๊ฒฐ - ๋ค์ ์์ ๋ ๊ฐ๋ฅํฉ๋๋ค.
๋ด ์ด๋ฆ์ Kirill Borovikov์ ๋๋ค.
์ค๋์ ๋จ์ผ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ "๋ถ๋ฆฌ"ํ ํ์ ์์ด ๋ฌธ์ ๋ฅผ ํ๊บผ๋ฒ์ ํด๊ฒฐํ๋ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์๋ฐฑ๋ง ๊ฑด์ ์์ฒญ์ด ์๊ณ ์ผ๋ถ๋ฅผ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ ์๋ฃจ์ ์ ๋ํ ์ ๊ทผ ๋ฐฉ์ ์ด ํฐ ๋ฌธ์ .
์ผ๋ฐ์ ์ผ๋ก ๋ฐฑ๋ง ๋ช
์ ๊ณ ๊ฐ์ ์ํ Tensor๋
๋ชจ๋ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ์๋ํ๊ณ ๊ฐ๋ฐ๋๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ์ ๊ตญ์ 10๊ฐ์ ๊ฐ๋ฐ ์ผํฐ๋ฅผ ๋๊ณ ์์ผ๋ฉฐ ๋ ๋ง์ ๊ฐ๋ฐ ์ผํฐ๊ฐ ์์ต๋๋ค. ๊ฐ๋ฐ์ 1000๋ช .
์ฐ๋ฆฌ๋ 2008๋ ๋ถํฐ PostgreSQL์ ์ฌ์ฉํด ์์ผ๋ฉฐ ํด๋ผ์ด์ธํธ ๋ฐ์ดํฐ, ํต๊ณ, ๋ถ์, ์ธ๋ถ ์ ๋ณด ์์คํ ์ ๋ฐ์ดํฐ ๋ฑ ์ฐ๋ฆฌ๊ฐ ์ฒ๋ฆฌํ๋ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํด ์์ต๋๋ค. 400TB ์ด์. ํ๋ก๋์ ์๋ง ์ฝ 250๊ฐ์ ์๋ฒ๊ฐ ์๊ณ , ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ํฐ๋งํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ ์ด 1000๊ฐ ์ ๋์ ๋๋ค.
SQL์ ์ ์ธ์ ์ธ์ด์
๋๋ค. ๋ฌด์ธ๊ฐ๊ฐ ์๋ํด์ผ ํ๋ "๋ฐฉ๋ฒ"์ด ์๋๋ผ ๋ฌ์ฑํ๋ ค๋ "๋ฌด์"์ ์ค๋ช
ํฉ๋๋ค. DBMS๋ JOIN์ ๋ง๋๋ ๋ฐฉ๋ฒ, ์ฆ ํ
์ด๋ธ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ, ์ ์ฉํ ์กฐ๊ฑด, ์ธ๋ฑ์ค๋ฅผ ํต๊ณผํ ํญ๋ชฉ, ํต๊ณผํ์ง ์์ ํญ๋ชฉ ๋ฑ์ ๋ ์ ์๊ณ ์์ต๋๋ค.
์ผ๋ถ DBMS๋ "์๋์, ์ด ๋ ํ ์ด๋ธ์ ์ด๋ฌํ ๋๊ธฐ์ด์ ์ฐ๊ฒฐํ์ธ์"๋ผ๋ ํํธ๋ฅผ ํ์ฉํ์ง๋ง PostgreSQL์ ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ์ ๋์ ์ธ ๊ฐ๋ฐ์๋ค์ ์์์ ์ธ ์ ์ฅ์ ๋๋ค. โ๊ฐ๋ฐ์๋ค์๊ฒ ์ด๋ค ์ข ๋ฅ์ ํํธ๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ฉํ๊ธฐ๋ณด๋ค๋ ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก๊ทธ๋จ์ ๋๋ด๊ณ ์ถ์ต๋๋ค.โ
๊ทธ๋ฌ๋ PostgreSQL์ "์ธ๋ถ"๊ฐ ์ค์ค๋ก๋ฅผ ์ ์ดํ๋ โโ๊ฒ์ ํ์ฉํ์ง ์์์๋ ๋ถ๊ตฌํ๊ณ ์๋ฒฝํ๊ฒ ํ์ฉํฉ๋๋ค. ๊ทธ ์ฌ๋ ์์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ๋ด์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋์ ๋ฌธ์ ๊ฐ ์๋ ์์น.
์ผ๋ฐ์ ์ผ๋ก [DBA์ ๋ํ] ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ๊ณ ์ ์ ์ธ ๋ฌธ์ ์ ์ง๋ฉดํฉ๋๊น? โ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์์ฒญ์ ์ดํํ๊ณ ์ฐ๋ฆฌ์๊ฒ ๋ชจ๋ ๊ฒ ๋๋ ค, ๋ชจ๋ ๊ฒ์ด ์ค๋จ๋๊ณ , ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์์ต๋๋ค... ์ด๋ค ์ข
๋ฅ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค!โ
์ด์ ๋ ๊ฑฐ์ ํญ์ ๋์ผํฉ๋๋ค.
- ๋นํจ์จ์ ์ธ ์ฟผ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ
๊ฐ๋ฐ์: "์ด์ ๋๋ JOIN์ ํตํด ๊ทธ์๊ฒ SQL๋ก 10๊ฐ์ ํ ์ด๋ธ์ ์ ๊ณตํ ๊ฒ์ ๋๋ค..." - ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ์กฐ๊ฑด์ด ๊ธฐ์ ์ ์ผ๋ก ํจ๊ณผ์ ์ผ๋ก "ํ๋ ค"์ง๊ณ ๋ชจ๋ ๊ฒ์ ๋นจ๋ฆฌ ์ป์ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ์ ์ ์ผ์ด๋์ง ์์ผ๋ฉฐ ์ด๋ฌํ ๊ฐ๋ณ์ฑ(ํ๋์ FROM์ ํ ์ด๋ธ 10๊ฐ)์ด ์๋ ์์คํ ์์๋ ํญ์ ์ผ์ข ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. [๊ธฐ์ฌ ] - ์ค๋๋ ํต๊ณ
์ด ์ ์ ํนํ PostgreSQL๊ณผ ๋งค์ฐ ๊ด๋ จ์ด ์์ต๋๋ค. ์๋ฒ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ธํธ๋ฅผ "๋ถ์ด" ์์ฒญํ๋ฉด ํ๋ธ๋ฆฟ์ด "์น์ค์บ๋ํธ"๋ฉ๋๋ค. ์ด์ ๋ 10๊ฐ์ ๋ ์ฝ๋๊ฐ ์์๊ณ ์ค๋์ 10๋ง ๊ฐ์ ๋ ์ฝ๋๊ฐ ์์ง๋ง PostgreSQL์ ์์ง ์ด๋ฅผ ์ธ์ํ์ง ๋ชปํ๋ฏ๋ก ์ด์ ๋ํด ์๋ ค์ค์ผ ํฉ๋๋ค. [๊ธฐ์ฌ ] - ๋ฆฌ์์ค์ "ํ๋ฌ๊ทธ"
๋์คํฌ, ๋ฉ๋ชจ๋ฆฌ ๋๋ ํ๋ก์ธ์ ์ฑ๋ฅ์ด ์ถฉ๋ถํ์ง ์์ ์ฝํ ์๋ฒ์ ํฌ๊ณ ๋ก๋๊ฐ ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์นํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ์ด๋๊ฐ์๋ ๋ ์ด์ ๋ฐ์ด๋์ ์ ์๋ ์ฑ๋ฅ ํ๊ณ๊ฐ ์์ต๋๋ค. - ์ฐจ๋จ
์ด๊ฒ์ ์ด๋ ค์ด ์ ์ด์ง๋ง ๋ค์ํ ์์ ์ฟผ๋ฆฌ(INSERT, UPDATE, DELETE)์ ๊ฐ์ฅ ๊ด๋ จ์ด ์์ต๋๋ค. ์ด๊ฒ์ ๋ณ๋์ ํฐ ์ฃผ์ ์ ๋๋ค.
๊ณํ ์ธ์ฐ๊ธฐ
...๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ์ ๋ชจ๋ ๊ฒ์ ๋ํด์๋ ์ฐ๋ฆฌ๊ฐ ๊ณํ์ด ํ์ํด! ์๋ฒ ๋ด๋ถ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
PostgreSQL์ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์ฟผ๋ฆฌ ์คํ ์๊ณ ๋ฆฌ์ฆ์ ํ
์คํธ๋ก ํํํ ํธ๋ฆฌ์
๋๋ค. ๊ธฐํ์์ ๋ถ์ ๊ฒฐ๊ณผ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๊ฒ์ผ๋ก ํ๋ช
๋ ๊ฒ์ ๋ฐ๋ก ์ด ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๊ฐ ํธ๋ฆฌ ๋ ธ๋๋ ํ ์ด๋ธ์ด๋ ์ธ๋ฑ์ค์์ ๋ฐ์ดํฐ ๊ฒ์, ๋นํธ๋งต ์์ฑ, ๋ ํ ์ด๋ธ ๊ฒฐํฉ, ์ ํ ํญ๋ชฉ ๊ฒฐํฉ, ๊ต์ฐจ ๋๋ ์ ์ธ ๋ฑ์ ์์ ์ ๋๋ค. ์ฟผ๋ฆฌ ์คํ์๋ ์ด ํธ๋ฆฌ์ ๋ ธ๋๋ฅผ ์ดํด๋ณด๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค.
์ฟผ๋ฆฌ ๊ณํ์ ์ป์ผ๋ ค๋ฉด ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ช
๋ น๋ฌธ์ ์คํํ๋ ๊ฒ์
๋๋ค. EXPLAIN
. ๋ชจ๋ ์ค์ ์์ฑ์ ์ป์ผ๋ ค๋ฉด, ์ฆ ์ค์ ๋ก ๊ธฐ๋ณธ์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ค๋ฉด - EXPLAIN (ANALYZE, BUFFERS) SELECT ...
.
๋์ ๋ถ๋ถ: ์คํํ๋ฉด "์ง๊ธ ์ฌ๊ธฐ"์์ ๋ฐ์ํ๋ฏ๋ก ๋ก์ปฌ ๋๋ฒ๊น ์๋ง ์ ํฉํฉ๋๋ค. ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํ๋ฆ์ด ํ๋ฐํ๊ณ ๋ก๋๊ฐ ๋ง์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. โ์ค! ์ฌ๊ธฐ์๋ ์คํ ์๋๊ฐ ๋๋ฆฝ๋๋ค.์บ ํ ์๊ตฌ." XNUMX๋ถ ์ , XNUMX์๊ฐ ์ - ์คํํ๊ณ ๋ก๊ทธ์์ ์ด ์์ฒญ์ ๋ฐ์ ์๋ฒ๋ก ๋ค์ ๊ฐ์ ธ์ค๋ ๋์ ์ ์ฒด ๋ฐ์ดํฐ์ธํธ์ ํต๊ณ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋๋ฒ๊น ์ ์ํด ์คํํ๋ฉด ๋น ๋ฅด๊ฒ ์คํ๋ฉ๋๋ค! ๊ทธ๋ฆฌ๊ณ ๋ ์, ์์ธ์ง ์ดํดํ ์ ์์ด ์์๋ค ๋๋ฆฌ๊ฒ.
์๋ฒ์์ ์์ฒญ์ด ์คํ๋๋ ์๊ฐ ์ ํํ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์ดํดํ๊ธฐ ์ํด ๋๋ํ ์ฌ๋๋ค์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ผ๋ถ ์์ฒญ์ด ์ง์ ํ ์ ํ๋ณด๋ค ์ค๋ ์คํ๋๊ณ ์์์ ์ธ์ํ๋ฉด ์ด ์์ฒญ ๊ณํ์ "์ค๋ ์ท"์ ์์ฑํ๊ณ ๋ก๊ทธ์ ํจ๊ป ๊ธฐ๋กํฉ๋๋ค..
์ด์ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ก๊ทธ๋ก ๊ฐ์ ๊ฑฐ๊ธฐ๋ฅผ ํ์ธํฉ๋๋ค... [ํ
์คํธ ์กฑ๋ณด]. ํ์ง๋ง ์คํํ๋ ๋ฐ 11ms๊ฐ ๊ฑธ๋ ธ๊ธฐ ๋๋ฌธ์ ํ๋ฅญํ ๊ณํ์ด๋ผ๋ ์ฌ์ค ์ธ์๋ ์๋ฌด ๋ง๋ ํ ์ ์์ต๋๋ค.
๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ง๋ง ์ค์ ๋ก ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง๋ ํ์คํ์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์๊ฐ ์ธ์๋ ์ค์ ๋ก ์๋ฌด๊ฒ๋ ๋ณผ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ์ด๋ฌํ ์ผ๋ฐ ํ ์คํธ์ "์"์ ๋ณด๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์๊ฐ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ง๋ง ๋ช ํํ์ง ์๋๋ผ๋, ๋ถํธํ๋๋ผ๋ ๋ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
- ๋ ธ๋๋ ๋ค์์ ๋ํ๋ ๋๋ค. ์ ์ฒด ํ์ ํธ๋ฆฌ์ ๋ฆฌ์์ค ํฉ๊ณ ๊ทธ ๋ฐ์. ์ฆ, ํน์ ์ธ๋ฑ์ค ์ค์บ ์๋์ ์ค์ฒฉ๋ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ ์ด ํน์ ์ธ๋ฑ์ค ์ค์บ์ ์์๋ ์๊ฐ์ ์ ์ ์์ต๋๋ค. ๋ด๋ถ์ "์์"๊ณผ ์กฐ๊ฑด ๋ณ์, CTE๊ฐ ์๋์ง ๋์ ์ผ๋ก ํ์ธํ๊ณ "์ฐ๋ฆฌ ๋ง์ ์์" ์๋ ์ด ๋ชจ๋ ๊ฒ์ ๋นผ์ผ ํฉ๋๋ค.
- ๋ ๋ฒ์งธ ํฌ์ธํธ: ๋ ธ๋์ ํ์๋ ์๊ฐ์ ๋จ์ผ ๋ ธ๋ ์คํ ์๊ฐ. ์๋ฅผ ๋ค์ด ํ ์ด๋ธ ๋ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํ ๊ฒฐ๊ณผ ์ด โโ๋ ธ๋๊ฐ ์คํ๋ ๊ฒฝ์ฐ ๊ณํ์์ ๋ฃจํ(์ด ๋ ธ๋์ ์ฃผ๊ธฐ) ์๊ฐ ์ฆ๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ ์คํ ์๊ฐ ์์ฒด๋ ๊ณํ ์ธก๋ฉด์์ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. ์ฆ, ์ด ๋ ธ๋๊ฐ ์ด ์ผ๋ง๋ ์ค๋ ์ํ๋์๋์ง ์ดํดํ๋ ค๋ฉด ํ ํญ๋ชฉ์ ๋ค๋ฅธ ํญ๋ชฉ์ผ๋ก ๊ณฑํด์ผ ํฉ๋๋ค. ์ฆ, "๋จธ๋ฆฌ ์"์ ๋๋ค.
๊ทธ๋ฌํ ์ํฉ์์๋ โ๊ฐ์ฅ ์ฝํ ๊ณ ๋ฆฌ๊ฐ ๋๊ตฌ์ธ๊ฐ?โ๋ฅผ ์ดํดํ์ญ์์ค. ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ. ๋ฐ๋ผ์ ๊ฐ๋ฐ์ ์์ ๋ "๋งค๋ด์ผ"์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์์ฑํฉ๋๋ค. โ๊ณํ์ ์ดํดํ๋ ๊ฒ์ ๋ฐฐ์ฐ๊ณ ๊ฒฝํํด์ผ ํ๋ ์์ ์ ๋๋ค...โ.
ํ์ง๋ง ์ฐ๋ฆฌ ๊ฐ๋ฐ์๋ 1000๋ช ์ธ๋ฐ, ์ด ๊ฒฝํ์ ๊ทธ๋ค ๊ฐ์์๊ฒ ์ ๋ฌํ ์๋ ์์ต๋๋ค. ๋, ๋, ๊ทธ ์ฌ๋์ ์๊ณ ์์ง๋ง ์ ๊ธฐ ์๋ ๋๊ตฐ๊ฐ๋ ๋ ์ด์ ๋ชจ๋ฅธ๋ค. ์ด์ฉ๋ฉด ๊ทธ๋ ๋ฐฐ์ธ ์๋ ์๊ณ ์๋ ์๋ ์์ง๋ง ์ง๊ธ์ ์ผํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ์ด๋์ ์ด ๊ฒฝํ์ ์ป์ ์ ์์๊น์?
๊ณํ ์๊ฐํ
๊ทธ๋ฌ๋ฏ๋ก ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ์น๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๊ณํ์ ์ข์ ์๊ฐํ.
์ฐ๋ฆฌ๋ ๋จผ์ "์์ฅ์ ํต๊ณผ"ํ์ต๋๋ค. ์ธํฐ๋ท์ ํตํด ๋ฌด์์ด ์กด์ฌํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ ์ ๋ ๊ฐ๋ฐ ์ค์ธ ์๋์ ์ผ๋ก "์ค์๊ฐ" ์๋ฃจ์
์ ๊ฑฐ์ ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ๋ง ๊ทธ๋๋ก ๋จ ํ๋๋ฟ์
๋๋ค.
- ๋ ธ๋ ์์ฒด ์ฒ๋ฆฌ ์๊ฐ
- ์ ์ฒด ํ์ ํธ๋ฆฌ์ ๋ํ ์ด ์๊ฐ
- ํต๊ณ์ ์ผ๋ก ์์๋๋ ๊ฒ์๋ ๋ ์ฝ๋ ์
- ๋ ธ๋ ๋ณธ์ฒด ์์ฒด
์ด ์๋น์ค์๋ ๋งํฌ ์์นด์ด๋ธ๋ฅผ ๊ณต์ ํ๋ ๊ธฐ๋ฅ๋ ์์ต๋๋ค. ๋น์ ์ ๊ฑฐ๊ธฐ์ ๋น์ ์ ๊ณํ์ ์ง์ด๋ฃ๊ณ ์ด๋ ๊ฒ ๋งํ์ต๋๋ค: "์๋ , Vasya, ์ฌ๊ธฐ ๋งํฌ๊ฐ ์์ต๋๋ค. ๊ฑฐ๊ธฐ์ ๋ญ๊ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค."
๊ทธ๋ฌ๋ ์์ ๋ฌธ์ ๋ ์์ต๋๋ค.
์ฒซ์งธ, ์์ฒญ๋ ์์ "๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ"์ ๋๋ค. ํต๋๋ฌด ์กฐ๊ฐ์ ๊ฐ์ ธ๋ค๊ฐ ๊ฑฐ๊ธฐ์ ๋ถ์ด๊ณ , ๊ณ์ํด์ ๋ถ์ด์ธ์.
๋์งธ, ์ฝ์ ๋ฐ์ดํฐ์ ์์ ๋ถ์ํ์ง ์์ โ ์ถ๋ ฅ๊ณผ ๋์ผํ ๋ฒํผ EXPLAIN (ANALYZE, BUFFERS)
, ์ฌ๊ธฐ์๋ ํ์๋์ง ์์ต๋๋ค. ๊ทธ๋ ๋จ์ํ ๊ทธ๊ฒ๋ค์ ๋ถํดํ๊ณ ์ดํดํ๊ณ ์์
ํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฆ
๋๋ค. ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ ์บ์๋ฅผ ์๋ชป ํ ๋นํ์ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ฉด ์ด ์ ๋ณด๋ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ธ ๋ฒ์งธ ๋ถ์ ์ ์ธ ์ ์ ์ด ํ๋ก์ ํธ์ ๊ฐ๋ฐ์ด ๋งค์ฐ ์ฝํ๋ค๋ ๊ฒ์ ๋๋ค. ์ปค๋ฐ์ ๋งค์ฐ ์์ต๋๋ค. XNUMX๊ฐ์์ ํ ๋ฒ์ฉ ์ฝ๋๊ฐ Perl์ ์์ผ๋ฉด ์ข์ต๋๋ค.
ํ์ง๋ง ์ด๊ฒ์ ๋ชจ๋ "๊ฐ์ฌ"์
๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ ๋ ์ด๊ฒ์ผ๋ก ์ด์๊ฐ ์ ์์ง๋ง์ด ์๋น์ค์์ ์ฐ๋ฆฌ๋ฅผ ํฌ๊ฒ ๋ฉ์ด์ง๊ฒ ๋ง๋ ํ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์ด๋ CTE(Common Table Expression) ๋ฐ InitPlan/SubPlan๊ณผ ๊ฐ์ ๋ค์ํ ๋์ ๋
ธ๋ ๋ถ์์ ์ค๋ฅ์
๋๋ค.
์ด ๊ทธ๋ฆผ์ ๋ฏฟ๋๋ค๋ฉด ๊ฐ ๊ฐ๋ณ ๋ ธ๋์ ์ด ์คํ ์๊ฐ์ ์ ์ฒด ์์ฒญ์ ์ด ์คํ ์๊ฐ๋ณด๋ค ๊ธธ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ฐ๋จ ํด - ์ด CTE์ ์์ฑ ์๊ฐ์ CTE ์ค์บ ๋ ธ๋์์ ์ฐจ๊ฐ๋์ง ์์์ต๋๋ค.. ๋ฐ๋ผ์ CTE ์ค์บ ์์ฒด์ ์์๋๋ ์๊ฐ์ ๋ํ ์ ๋ต์ ๋ ์ด์ ์ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ฐ๋ฆฌ๋ ์ด์ ์ฐ๋ฆฌ ์์ ์ ๊ธ์ ์ธ ์๊ฐ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๋ง์ธ! ๋ชจ๋ ๊ฐ๋ฐ์๋ "์ด์ ์ง์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ๋งค์ฐ ์ฌ์ธ ๊ฒ์
๋๋ค!"๋ผ๊ณ ๋งํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์น ์๋น์ค์ ์ผ๋ฐ์ ์ธ ์คํ์ ์ฌ์ฉํ์ต๋๋ค. Node.js + Express ๊ธฐ๋ฐ ์ฝ์ด, ์๋ฆ๋ค์ด ๋ค์ด์ด๊ทธ๋จ์ ์ํด Bootstrap ๋ฐ D3.js๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์ ๊ธฐ๋๋ ์์ ํ ์ถฉ์กฑ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ 2์ฃผ ๋ง์ ์ฒซ ๋ฒ์งธ ํ๋กํ ํ์ ์ ๋ฐ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๊ณํ ํ์
์ฆ, ์ด์ PostgreSQL์์ ์์ฑ๋ ๊ณํ์์ ๋ชจ๋ ๊ณํ์ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค. - ๋์ ๋ ธ๋์ ์ฌ๋ฐ๋ฅธ ๋ถ์ - CTE ์ค์บ, InitPlan, SubPlan
- ๋ฒํผ ๋ถํฌ ๋ถ์ - ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ๋ ๊ณณ, ๋ก์ปฌ ์บ์์์ ์ฝ๋ ๊ณณ, ๋์คํฌ์์ ์ฝ๋ ๊ณณ
- ๋ช
ํ์ฑ์ ์ป์์ต๋๋ค
๋ฐ๋ผ์ ๋ก๊ทธ์์ ์ด ๋ชจ๋ ๊ฒ์ "ํํค์น๋" ๊ฒ์ด ์๋๋ผ ๊ทธ๋ฆผ์์ "๊ฐ์ฅ ์ฝํ ๋งํฌ"๋ฅผ ๋ฐ๋ก ๋ณผ ์ ์์ต๋๋ค.
๊ตฌ๋ฌธ ๊ฐ์กฐ๊ฐ ํฌํจ๋ ์ด์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๋ ๋ ์ด์ ๊ณํ์ ์์ ํ ํํํ์ง ์๊ณ ๋ ์งง์ ๊ณํ์ผ๋ก ์์
ํฉ๋๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋ชจ๋ ์ซ์๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋์ก๊ณ ์ค๊ฐ์๋ ์ด๋ค ๊ธฐํธ์ ๋ฐ๋ผ CTE ์ค์บ, CTE ์์ฑ ๋๋ Seq ์ค์บ๊ณผ ๊ฐ์ ๋
ธ๋์ ์ข
๋ฅ์ธ ์ฒซ ๋ฒ์งธ ์ค๋ง ๋จ๊ฒผ์ต๋๋ค.
์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๋ถ๋ฅด๋ ๋จ์ถ ํํ์ ๋๋ค. ๊ณํ ํ ํ๋ฆฟ.
๋ ๋ฌด์์ด ํธ๋ฆฌํ ๊น์? ์ด ์๊ฐ ์ค ์ด๋ ๋ถ๋ถ์ด ์ด๋ ๋
ธ๋์ ํ ๋น๋์๋์ง ํ์ธํ๊ณ ์์ "๋ถ์ฌ" ๋๋ ๊ฒ์ด ํธ๋ฆฌํ ๊ฒ์
๋๋ค. ํ์ด ์ฐจํธ.
๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ฉด Seq Scan์ด ์ ์ฒด ์๊ฐ์ 3/4 ๋ฏธ๋ง์ด ๊ฑธ๋ ธ๊ณ ๋๋จธ์ง XNUMX/XNUMX๋ CTE Scan์ด ์ฐจ์งํ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ๊ณตํฌ! ์ด๋ ์ฟผ๋ฆฌ์ CTE ์ค์บ์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ CTE ์ค์บ์ "๋ฐ์ฌ ์๋"์ ๋ํ ์์ ์ฐธ๊ณ ์ฌํญ์
๋๋ค. ๊ทธ๋ค์ง ๋น ๋ฅด์ง๋ ์์ต๋๋ค. ์ผ๋ฐ ํ
์ด๋ธ ์ค์บ๋๋ณด๋ค ์ด๋ฑํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ทธ๋ฌํ ๋ค์ด์ด๊ทธ๋จ์ ์ฐ๋ฆฌ๊ฐ ์ฆ์ ์ธ๊ทธ๋จผํธ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ฅผ ๋ค์ด ์ผ๋ถ Seq ์ค์บ์ด "๋จน์" ์๊ฐ์ ์ ๋ฐ ์ด์์ ๋ณผ ๋ ๋ ํฅ๋ฏธ๋กญ๊ณ ๋ ๋ณต์กํฉ๋๋ค. ๊ฒ๋ค๊ฐ ๋ด๋ถ์๋ ์ผ์ข ์ ํํฐ๊ฐ ์์๊ณ ๊ทธ์ ๋ฐ๋ผ ๋ง์ ๋ ์ฝ๋๊ฐ ์ญ์ ๋์์ต๋๋ค... ์ด ์ฌ์ง์ ๊ฐ๋ฐ์์๊ฒ ์ง์ ๋์ง๊ณ ๋ค์๊ณผ ๊ฐ์ด ๋งํ ์ ์์ต๋๋ค. โVasya, ์ฌ๊ธฐ์๋ ๋ชจ๋ ๊ฒ์ด ์ข์ง ์์ต๋๋ค! ์์๋ด์ธ์. ๋ณด์ธ์. ๋ญ๊ฐ ์๋ชป๋์์ต๋๋ค!โ
๋น์ฐํ ์ฝ๊ฐ์ "๊ฐํด"๊ฐ ๊ด๋ จ๋์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ ํ ๊ฒ์ ๋ฐ์ฌ๋ฆผ ๋ฌธ์ ์์ต๋๋ค. ๊ณํ์ ๊ฐ ๊ฐ๋ณ ๋ ธ๋์ ์๊ฐ์ 1ฮผs์ ์ ํ๋๋ก ํ์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ ธ๋ ์ฃผ๊ธฐ ์๊ฐ 1000์ ์ด๊ณผํ๋ฉด PostgreSQL์ ์คํํ ํ "์ ํ๋ ๋ด"๋ก ๋๋ ๋ค์ ๋ค์ ๊ณ์ฐํ ๋ ์ด ์๊ฐ์ด "0.95ms์์ 1.05ms ์ฌ์ด"๊ฐ ๋ฉ๋๋ค. ์นด์ดํธ๊ฐ ๋ง์ดํฌ๋ก์ด๋ก ๊ฐ๋ฉด ๊ด์ฐฎ์ง๋ง ์ด๋ฏธ [๋ฐ๋ฆฌ]์ด๊ฐ ๋๋ฉด "๋๊ฐ ๋๊ตฌ์๊ฒ์ ์ผ๋ง๋ ์๋นํ๋์ง" ๊ณํ์ ๋ ธ๋์ ๋ฆฌ์์ค๋ฅผ "ํ" ๋ ์ด ์ ๋ณด๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๋ ๋ฒ์งธ๋ก ๋ ๋ณต์กํ ์ ์ ๋์ ๋
ธ๋ ๊ฐ์ ๋ฆฌ์์ค(ํด๋น ๋ฒํผ)๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์
๋๋ค. ํ๋กํ ํ์
์ ์ฒซ 2์ฃผ์ ์ถ๊ฐ๋ก 4์ฃผ๊ฐ ์์๋์์ต๋๋ค.
์ด๋ฐ ์ข ๋ฅ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค. ์ฐ๋ฆฌ๋ CTE๋ฅผ ์ํํ๊ณ ์๋ง๋ ๊ทธ ์์ ์๋ ๋ด์ฉ์ ์ฝ์ ๊ฒ์ ๋๋ค. ์ค์ ๋ก PostgreSQL์ "์ค๋งํธ"ํ๋ฉฐ ๊ฑฐ๊ธฐ์์ ์ง์ ์๋ฌด๊ฒ๋ ์ฝ์ง ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฌ๊ธฐ์์ ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋์ผํ CTE์์ XNUMX๋ฒ์งธ ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ณํ์ ๋ณด๊ณ ์ดํดํฉ๋๋ค. ์ด์ํฉ๋๋ค. Seq ์ค์บ์์๋ 3๊ฐ์ ๋ฒํผ(๋ฐ์ดํฐ ํ์ด์ง)๊ฐ "์๋น"๋๊ณ , CTE ์ค์บ์์๋ 1๊ฐ๊ฐ ๋ ์๊ณ , ๋ ๋ฒ์งธ CTE ์ค์บ์์๋ 2๊ฐ๊ฐ ๋ ์์ต๋๋ค. ์ฆ, ๋จ์ํ ๋ชจ๋ ๊ฒ์ ํฉ์ฐํ๋ฉด 6์ด ๋์ค์ง๋ง ํ๋ธ๋ฆฟ์์๋ 3๋ง ์ฝ์ต๋๋ค! CTE Scan์ ์ด๋์์๋ ์๋ฌด๊ฒ๋ ์ฝ์ง ์๊ณ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์๋ํฉ๋๋ค. ์ฆ, ์ฌ๊ธฐ์๋ ๋ถ๋ช
ํ ์๋ชป๋ ๊ฒ์ด ์์ต๋๋ค!
์ค์ ๋ก ์ฌ๊ธฐ์๋ Seq Scan์์ ์์ฒญํ 3ํ์ด์ง์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ฒ์ 1ํ์ด์ง๋ ์ฒซ ๋ฒ์งธ CTE ์ค์บ์ ์์ฒญํ๊ณ ๊ทธ ๋ค์ ๋ ๋ฒ์งธ, 1ํ์ด์ง๊ฐ ๋ ์ฝ์ด์ก์ต๋๋ค. 2ํ์ด์ง๊ฐ ์๋ 2ํ์ด์ง๋ฅผ ์ฝ์ ๋ฐ์ดํฐ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๊ทธ๋ฆผ์ ํตํด ์ฐ๋ฆฌ๋ ๊ณํ ์คํ์ด ๋ ์ด์ ํธ๋ฆฌ๊ฐ ์๋๋ผ ์ผ์ข
์ ๋น์ํ ๊ทธ๋ํ๋ผ๋ ์ฌ์ค์ ์ดํดํ๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ "์ ์ด์ ๋ฌด์์ด ์ด๋์ ์๋์ง"๋ฅผ ์ดํดํ ์ ์๋๋ก ์ด์ ๊ฐ์ ๋ค์ด์ด๊ทธ๋จ์ ์ป์์ต๋๋ค. ์ฆ, ์ฌ๊ธฐ์๋ pg_class์์ CTE๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๋ ๋ฒ ์์ฒญํ์ผ๋ฉฐ, ๋ ๋ฒ์งธ ์์ฒญ์์๋ ๊ฑฐ์ ๋ชจ๋ ์๊ฐ์ ๋ธ๋์น์์ ์๋นํ์ต๋๋ค. 2๋ฒ์งธ ํญ๋ชฉ์ ์ฝ๋ ๊ฒ์ด ํ๋ธ๋ฆฟ์์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ฝ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ๋น์ฉ์ด ๋ ๋ค๋ ๊ฒ์ ๋ถ๋ช
ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ ์ ์จ์ ๋ด์ฌ์์ต๋๋ค. ๊ทธ๋ค์ ์ด๋ ๊ฒ ๋งํ์ต๋๋ค. โ์, ๋ค์ค, ๋น์ ์ ์ฟตํธ๋ฅผ ์๊ณ ์๊ตฐ์! ์ด์ ์ฐ๋ฆฌ์ ๊ฒฝํ์ด ๋ฐ๋ก ํ๋ฉด์ ๋ํ๋ฉ๋๋ค. ์ด์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค."
๋ก๊ทธ ํตํฉ
1000๋ช ์ ๊ฐ๋ฐ์๋ค์ ์๋์ ํ์จ์ ์ฌ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์๋ฐฑ ๊ฐ์ "์ ํฌ" ์๋ฒ๋ง ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ ๊ฐ๋ฐ์ ์ธก์ ์ด ๋ชจ๋ "๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ธฐ"๊ฐ ์ ํ ํธ๋ฆฌํ์ง ์๋ค๋ ๊ฒ์ ์ดํดํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ค์ค๋ก ์์งํด์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ํต๊ณ๋ฅผ ์์งํ ์ ์๋ ํ์ค ๋ชจ๋์ด ์์ง๋ง ๊ตฌ์ฑ์์๋ ํ์ฑํํด์ผ ํฉ๋๋ค.
์ฒซ์งธ, ๋์ผํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์ ๋ค๋ฅธ ์ฒด๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ์ฟผ๋ฆฌ์ ํ ๋นํฉ๋๋ค. ๋ค๋ฅธ QueryId. ์ฆ, ๋จผ์ ํด๋ณด๋ฉด SET search_path = '01'; SELECT * FROM user LIMIT 1;
๊ทธ๋ฆฌ๊ณ ๋์ SET search_path = '02';
๋์ผํ ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ ์ด ๋ชจ๋์ ํต๊ณ๋ ์๋ก ๋ค๋ฅธ ๊ธฐ๋ก์ ๊ฐ๊ฒ ๋๋ฉฐ ๊ตฌ์ฑํ๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ๋ ์ด ์์ฒญ ํ๋กํ์ ๋งฅ๋ฝ์์ ๊ตฌ์ฒด์ ์ผ๋ก ์ผ๋ฐ ํต๊ณ๋ฅผ ์์งํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ํ๋ ๋ ๋ฒ์งธ ์ ์ ๊ณํ์ด ๋ถ์กฑํ๋ค. ์ฆ, ๊ณํ์ ์๊ณ ์์ฒญ ์์ฒด๋ง ์์ ๋ฟ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฌด์์ด ๋๋ ค์ง๊ณ ์๋์ง ์์ง๋ง ๊ทธ ์ด์ ๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๋ฐ์ดํฐ ์ธํธ์ ๋ฌธ์ ๋ก ๋์๊ฐ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์๊ฐ - "์ฌ์ค"์ ๋ถ์กฑ. ์ฆ, ์ฟผ๋ฆฌ ์คํ์ ํน์ ์ธ์คํด์ค๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์๋ฌด ๊ฒ๋ ์๊ณ ์ง๊ณ๋ ํต๊ณ๋ง ์์ต๋๋ค. ์ด๊ฒ์ผ๋ก ์์ ํ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ๋งค์ฐ ์ด๋ ต์ต๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ์ ์ธ์ฐ๊ธฐ๋ก ๊ฒฐ์ฌํ๊ณ ๊ธ์ฐ๊ธฐ๋ฅผ ์์ํ์ต๋๋ค. ์์ง๊ฐ.
์์ง๊ธฐ๋ SSH๋ฅผ ํตํด ์ฐ๊ฒฐํ๊ณ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฒ์ ๋ํ ๋ณด์ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค. tail -F
๋ก๊ทธ ํ์ผ์ "๊ณ ์ฐฉ"๋ฉ๋๋ค. ๊ทธ๋์ ์ด๋ฒ ์ธ์
์์๋ ์ ์ฒด ๋ก๊ทธ ํ์ผ์ ์์ ํ "๋ฏธ๋ฌ"๋ฅผ ์ป์ต๋๋ค., ์๋ฒ๊ฐ ์์ฑํฉ๋๋ค. ์๋ฒ ์์ฒด์ ๋ก๋๋ ์ต์ํ๋ฉ๋๋ค. ์๋ฒ์์ ์๋ฌด ๊ฒ๋ ๊ตฌ๋ฌธ ๋ถ์ํ์ง ์๊ณ ํธ๋ํฝ๋ง ๋ฏธ๋ฌ๋งํ๊ธฐ ๋๋ฌธ์
๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ Node.js์์ ์ธํฐํ์ด์ค ์์ฑ์ ์์ํ๊ธฐ ๋๋ฌธ์ ๊ณ์ํด์ ๊ทธ ์์ ์ฝ๋ ํฐ๋ฅผ ์์ฑํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ธฐ์ ์ ๊ทธ ์์ฒด๋ก ์ ๋นํ๋์์ต๋๋ค. ์๋ํ๋ฉด JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ๊ฒ ํ์ํ๋ ํ ์คํธ ๋ฐ์ดํฐ, ์ฆ ๋ก๊ทธ๋ฅผ ์์ ํ๋ ๊ฒ์ด ๋งค์ฐ ํธ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฑ์๋ ํ๋ซํผ์ธ Node.js ์ธํ๋ผ ์์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๋ฌผ๋ก ๋ชจ๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ํด ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ์์ ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ง ์ฐ๊ฒฐ์ "ํ์ฅ"ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ๋ ๋ก๊ทธ ์์ฒด๋ฅผ "๋ฃ๊ณ "์ฐ๋ฆฌ ์์ ์๊ฒ ๊ฐ์ ธ์ค๊ณ ๋ ๋ฒ์งธ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ธฐ์ง์ ์์ฒญํฉ๋๋ค. "๊ทธ๋ฐ๋ฐ ๋ก๊ทธ์๋ oid 123์ด๋ผ๋ ํ์๊ฐ ์ฐจ๋จ๋์ด ์๋ค๊ณ ๋์ค๋ค์." ํ์ง๋ง ์ด๋ ๊ฐ๋ฐ์์๊ฒ๋ ์๋ฌด ์๋ฏธ๊ฐ ์๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ "๊ทธ๋์ ๋ OID = 123์ด ๋ญ์ฃ ?"๋ผ๊ณ ๋ฌผ์ด๋ณด๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ ์์ ์ ๋ํด ์์ง ๋ชจ๋ฅด๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ฃผ๊ธฐ์ ์ผ๋ก ๊ธฐ์ง์ ๋ฌป์ต๋๋ค.
โ๋น์ ์ด ๊ณ ๋ คํ์ง ์์ ๊ฒ์ด ํ๋ ์์ต๋๋ค. ์ฝ๋ผ๋ฆฌ ๊ฐ์ ๋ฒ์ด ์๋ค๋ ๊ฒ์
๋๋ค!..โ ์ฐ๋ฆฌ๋ 10๋์ ์๋ฒ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ์ถ์์ ๋ ์ด ์์คํ
์ ๊ฐ๋ฐํ๊ธฐ ์์ํ์ต๋๋ค. ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์ด ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ถ๋ถ์ ์ดํดํ๋ ๋ฐ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ๊ทธ๋ฌ๋ XNUMX๋ถ๊ธฐ ๋์ ์ฐ๋ฆฌ๋ ๋ชจ๋ํฐ๋ง์ ์ํด XNUMX๊ฑด์ ๋ฐ์์ต๋๋ค. ์์คํ
์ด ์๋ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋๊ฐ ์ํ๊ณ ๋ชจ๋๊ฐ ํธ์ํ์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ํฉ์ฐํด์ผ ํ๋ฉฐ ๋ฐ์ดํฐ ํ๋ฆ์ ํฌ๊ณ ํ๋์ ์
๋๋ค. ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ, ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๋ํ PostgreSQL์ ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์์๋ณด๋ค ๋ฐ์ดํฐ๋ฅผ "์๋" ์๋๊ฐ ๋ ๋น ๋ฅธ ๊ฒ์ ์์ต๋๋ค. COPY
์์ง ์๋.
ํ์ง๋ง ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ '์๋' ๊ฒ์ ์ค์ ๋ก ์ฐ๋ฆฌ์ ๊ธฐ์ ์ด ์๋๋๋ค. ์๋ํ๋ฉด 50๊ฐ์ ์๋ฒ์์ ์ด๋น ์ฝ 100๊ฐ์ ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ ํ๋ฃจ์ 150-XNUMXGB์ ๋ก๊ทธ๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋ฒ ์ด์ค๋ฅผ ์กฐ์ฌ์ค๋ฝ๊ฒ "์ ๋จ"ํด์ผ ํ์ต๋๋ค.
์ฒซ์งธ๋ก, ์ฐ๋ฆฌ๋ ๊ทธ๋ฌ์ต๋๋ค ์ผ๋ณ๋ก ๋๋๊ธฐ, ๋์ฒด๋ก ์๋ฌด๋ ์์ผ ๊ฐ์ ์๊ด ๊ด๊ณ์ ๊ด์ฌ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ค๋ ๋ฐค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฒ์ ๊ณผ ์ด๋ฏธ ์๋ก์ด ํต๊ณ๋ฅผ ์ถ์ํ๋ค๋ฉด ์ด์ ์ ์ด๋ค ์ฐจ์ด๊ฐ ์์ต๋๊น?
๋์งธ, ์ฐ๋ฆฌ๋ ๋ฐฐ์ ๋ค(๊ฐ์๋นํ๋ค) ๋ค์์ ์ฌ์ฉํ์ฌ ์์ฑํ๋ ๊ฒ์ด ๋งค์ฐ ๋งค์ฐ ๋น ๋ฆ
๋๋ค. COPY
. ์ฆ, ๋ฟ๋ง ์๋๋ผ COPY
๊ทธ ์ฌ๋๋ณด๋ค ๋น ๋ฅด๋๊น. INSERT
, ๊ทธ๋ฆฌ๊ณ ํจ์ฌ ๋ ๋น ๋ฆ
๋๋ค.
์ธ ๋ฒ์งธ ์์ - ํด์ผ ํ์ด์ ํธ๋ฆฌ๊ฑฐ์ ์ธ๋ ํค๋ฅผ ๊ฐ๊ฐ ํฌ๊ธฐํฉ๋๋ค.. ์ฆ, ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ด ์ ํ ์์ต๋๋ค. ํ ์์ FK๊ฐ ์๋ ํ
์ด๋ธ์ด ์๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ์์ "์ฌ๊ธฐ์ FK์์ ์ฐธ์กฐํ๋ ๋ก๊ทธ ๋ ์ฝ๋๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ ์ฝ๋ ๊ทธ๋ฃน์ ๋ํด"๋ผ๊ณ ๋งํ๋ฉด ์ด๋ฅผ ์ฝ์
ํ๋ฉด PostgreSQL์ด ๋จ์ ๊ฒ ์๊ณ ์ด๋ป๊ฒ ๋ฐ์๋ค์ด๊ณ ์์งํ๊ฒ ํด์ผ ํ๋์ง SELECT 1 FROM master_fk1_table WHERE ...
์ฝ์
ํ๋ ค๋ ์๋ณ์๋ก ์ด ๋ ์ฝ๋๊ฐ ์กด์ฌํ๋์ง, ์ฝ์
์ ์ด ์ธ๋ ํค๋ฅผ "๋ถ๋ฆฌ"ํ์ง ์๋์ง ํ์ธํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
๋์ ํ ์ด๋ธ๊ณผ ํด๋น ์ธ๋ฑ์ค์ ๋ํ ํ๋์ ๋ ์ฝ๋ ๋์ ์ฐธ์กฐํ๋ ๋ชจ๋ ํ ์ด๋ธ์์ ์ฝ๋ ์ถ๊ฐ ์ด์ ์ ์ป์ต๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ์ ํ ํ์ํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ์ ์๋ฌด๋ ์ต์ํ์ ๋ถํ๋ก ์ต๋ํ ๋นจ๋ฆฌ ๋ น์ํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ FK - ๋ค์ด!
๋ค์ ์์ ์ ์ง๊ณ์ ํด์ฑ์ ๋๋ค. ์ฒ์์๋ ์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌํํ์ต๋๋ค. ๊ฒฐ๊ตญ ๋ ์ฝ๋๊ฐ ๋์ฐฉํ๋ฉด ์ผ์ข ์ ํ๋ธ๋ฆฟ์์ ์ฆ์ ์ํํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค. ํธ๋ฆฌ๊ฑฐ ์ค๋ฅธ์ชฝ์ "+ XNUMX"์ด ํ์๋ฉ๋๋ค.. ํธ๋ฆฌํ์ง๋ง ๋์ ์ ์ ํ๋์ ๋๋ค. ํ๋์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ์ง๋ง ๋ค๋ฅธ ํ ์ด๋ธ์์ ๋ค๋ฅธ ํญ๋ชฉ์ ์ฝ๊ณ ์จ์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ฒ๋ค๊ฐ ์ฝ๊ณ ์ฐ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ๋งค๋ฒ ํ๋ ์ผ๋ ํฉ๋๋ค.
์ด์ ํน์ ํธ์คํธ๋ฅผ ํต๊ณผํ ์์ฒญ ์๋ฅผ ๊ฐ๋จํ ๊ณ์ฐํ๋ ํ
์ด๋ธ์ด ์๋ค๊ณ ์์ํด ๋ณด์ธ์. +1, +1, +1, ..., +1
. ์์น์ ์ผ๋ก๋ ์ด๊ฒ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฐ๋ฅํฉ๋๋ค ์์ง๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ํฉ๊ณ ํ ๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ์ก +10
.
์, ์ผ๋ถ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ ผ๋ฆฌ์ ๋ฌด๊ฒฐ์ฑ์ด "๋ฌด๋์ง" ์ ์์ง๋ง ์ด๋ ๊ฑฐ์ ๋นํ์ค์ ์ธ ๊ฒฝ์ฐ์ ๋๋ค. ์ผ๋ฐ ์๋ฒ๊ฐ ์๊ณ ์ปจํธ๋กค๋ฌ์ ๋ฐฐํฐ๋ฆฌ๊ฐ ์๊ณ ํธ๋์ญ์ ๋ก๊ทธ๊ฐ ์๊ณ ์๋ฒ์ ๋ก๊ทธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ผ ์์คํ ... ์ผ๋ฐ์ ์ผ๋ก ๊ทธ๋ด ๊ฐ์น๊ฐ ์์ต๋๋ค. ํธ๋ฆฌ๊ฑฐ/FK ์คํ์ผ๋ก ์ธํ ์์ฐ์ฑ ์์ค์ ๋ฐ์ํ๋ ๋น์ฉ๋งํผ ๊ฐ์น๊ฐ ์์ต๋๋ค.
ํด์ฑ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ํน์ ์์ฒญ์ด ๊ทํ์๊ฒ ๋์ฐฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํน์ ์๋ณ์๋ฅผ ๊ณ์ฐํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋กํ ๋ค์ ๋ชจ๋ ์ฌ๋์๊ฒ ์๋ฆฝ๋๋ค. ๋ น์ํ ๋ ๊ฐ์ ๊ฒ์ ๋ น์ํ๊ณ ์ถ์ดํ๋ ๋ ๋ฒ์งธ ์ฌ๋์ด ๋น์ ์๊ฒ ์ฌ ๋๊น์ง๋ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ์ฐจ๋จ๋๊ณ ์ด๊ฒ์ ์ด๋ฏธ ๋์ฉ๋๋ค. ๋ฐ๋ผ์ ์ผ๋ถ ID ์์ฑ์ ํด๋ผ์ด์ธํธ(๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ)๋ก ์ ์กํ ์ ์๋ค๋ฉด ์ด๋ ๊ฒ ํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
ํ ์คํธ(์์ฒญ, ๊ณํ, ํ ํ๋ฆฟ ๋ฑ)์์ MD5๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ฒฝํ์ต๋๋ค. ์์ง๊ธฐ ์ธก์์ ์ด๋ฅผ ๊ณ์ฐํ๊ณ ๊ธฐ์ฑ ID๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ "๋ถ์ต๋๋ค". MD5์ ๊ธธ์ด์ ์ผ์ผ ํํฐ์ ๋์ ํตํด ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค.
ํ์ง๋ง ์ด ๋ชจ๋ ๊ฒ์ ๋น ๋ฅด๊ฒ ๋
น์ํ๋ ค๋ฉด ๋
น์ ์ ์ฐจ ์์ฒด๋ฅผ ์์ ํด์ผ ํ์ต๋๋ค.
๋ณดํต ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฐ์๋์? ์ฐ๋ฆฌ๋ ์ผ์ข ์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด๋ฅผ ์ฌ๋ฌ ํ ์ด๋ธ๋ก ๋ถํ ํ ๋ค์ ์ด๋ฅผ ๋ณต์ฌํฉ๋๋ค. ๋จผ์ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ์ธ ๋ฒ์งธ๋ก... ํ๋์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ธ ๋จ๊ณ๋ก ์์ฑํ๋ ๊ฒ ๊ฐ์์ ๋ถํธํฉ๋๋ค. ์์ฐจ์ ์ผ๋ก. ๋ถ์พํ. ๋ ๋นจ๋ฆฌ ํ ์ โโโโ์์ต๋๊น? ํ ์ ์๋ค!
์ด๋ ๊ฒ ํ๋ ค๋ฉด ์ด๋ฌํ ํ๋ฆ์ ์๋ก ๋ณ๋ ฌ๋ก ๋ถํดํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํฉ๋๋ค. ์ค๋ฅ, ์์ฒญ, ํ ํ๋ฆฟ, ์ฐจ๋จ ๋ฑ์ด ๋ณ๋์ ์ค๋ ๋๋ก ์ด๋ํ๋ฉฐ ๋ชจ๋ ๋ณ๋ ฌ๋ก ์์ฑ๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด๊ฑธ๋ก ์ถฉ๋ถํด ๊ฐ ๊ฐ๋ณ ๋์ ํ ์ด๋ธ์ ๋ํด COPY ์ฑ๋์ ์ง์์ ์ผ๋ก ์ด์ด ๋์ญ์์ค..
์ฆ, ์ฝ๋ ํฐ์์ ํญ์ ํ๋ฆ์ด ์์ด, ์ฌ๊ธฐ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ธ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ๋๊ตฐ๊ฐ๊ฐ ์ด ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ก๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ก ํ๋ ค๋ฉด COPY๋ ํน์ ๊ฐ๊ฒฉ์ผ๋ก ์ค๋จ๋์ด์ผ ํฉ๋๋ค.. ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๊ธฐ๊ฐ์ ์ฝ 100ms์์ต๋๋ค. ์ด๋ฅผ ๋ซ์๋ค๊ฐ ์ฆ์ ๋์ผํ ํ
์ด๋ธ์ ๋ค์ ์ฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ถ ํผํฌ ๋์ ํ๋์ ํ๋ฆ์ด ์ถฉ๋ถํ์ง ์์ผ๋ฉด ํน์ ํ๋๊น์ง ํ๋งํฉ๋๋ค.
๋ํ ์ด๋ฌํ ๋ก๋ ํ๋กํ์ ๊ฒฝ์ฐ ๋ ์ฝ๋๋ฅผ ์ผ๊ด์ ์ผ๋ก ์์งํ๋ ์ง๊ณ๋ ์ข์ง ์๋ค๋ ์ฌ์ค๋ ๋ฐ๊ฒฌํ์ต๋๋ค. ๊ณ ์ ์ ์ธ ์
์ INSERT ... VALUES
๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ๋ก 1000๊ฐ์ ๋ ์ฝ๋๊ฐ ์์ต๋๋ค. ๊ทธ ์์ ์ ๋ฏธ๋์ด์ ์ต๋ ์ฐ๊ธฐ๊ฐ ๋ฐ์ํ๊ณ ๋์คํฌ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐ๋ ค๋ ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋์ด ๊ธฐ๋ค๋ฆฌ๊ณ ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๋ฌํ ์ด์ ํ์์ ์ ๊ฑฐํ๋ ค๋ฉด ์๋ฌด ๊ฒ๋ ์ง๊ณํ์ง ๋ง์ธ์. ์ ํ ๋ฒํผ๋งํ์ง ๋ง์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ๋์คํฌ์ ๋ํ ๋ฒํผ๋ง์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ(๋คํํ Node.js์ Stream API๋ฅผ ํตํด ํ์ธํ ์ ์์) ์ด ์ฐ๊ฒฐ์ ์ฐ๊ธฐํ์ธ์. ๋ค์ ๋ฌด๋ฃ๋ผ๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ผ๋ฉด ๋์ ๋ ๋๊ธฐ์ด์์ ์ด๋ฒคํธ์ ์๋๋ค. ๋ฐ์ ๋์ ํ์์ ๋ค์ ๋ฌด๋ฃ ํญ๋ชฉ์ ๊ฐ์ ธ์์ ์์ฑํ์ธ์.
๋ฐ์ดํฐ ๊ธฐ๋ก์ ์ด ์ ๊ทผ ๋ฐฉ์์ ๋์ ํ๊ธฐ ์ ์๋ ์ฝ 4K ์ฐ๊ธฐ ์์ ์ด ์์๊ณ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ก๋๊ฐ 4๋ฐฐ โโ๊ฐ์ํ์ต๋๋ค. ์ด์ ์๋ก์ด ๋ชจ๋ํฐ๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ธํด ์ต๋ 6MB/s๊น์ง 100๋ฐฐ ๋ ์ฑ์ฅํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ์ฐ๋ฆฌ๋ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ๋จ 3๊ฐ์ ์์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉด์ ์ง๋ 10๊ฐ์ ๋์์ ๋ก๊ทธ๋ฅผ ์ฝ 15-XNUMXTB์ ๋ณผ๋ฅจ์ ์ ์ฅํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์ดํดํฉ๋๋ค
๊ทธ๋ฌ๋ ๋จ์ํ ์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๊ฒ์ ํ๋ฅญํ๊ณ ์ ์ฉํ๋ฉฐ ๊ด๋ จ์ฑ์ด ์์ง๋ง ์ถฉ๋ถํ์ง๋ ์์ต๋๋ค. ์ดํด๊ฐ ํ์ํฉ๋๋ค. ํ๋ฃจ์ ์๋ฐฑ๋ง ๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ณํ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ง๋ง ์๋ฐฑ๋ง ๋ฌ๋ฌ๋ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋จผ์ "๋ ์๊ฒ" ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ์ , ์ด "๋ ์์" ๊ฒ์ ์ด๋ป๊ฒ ์ ๋ฆฌํ ๊ฒ์ธ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ธ ๊ฐ์ง ํต์ฌ ์ฌํญ์ ํ์ธํ์ต๋๋ค.
- ๋๊ตฌ ์ด ์์ฒญ์ ๋ณด๋์ต๋๋ค
์ฆ, ์น ์ธํฐํ์ด์ค, ๋ฐฑ์๋, ๊ฒฐ์ ์์คํ ๋ฑ ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์์ "๋์ฐฉ"ํ๋์ง์ ๋๋ค. - ์ด๋์์ ๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋ฌ์ด
์ด๋ค ํน์ ์๋ฒ์์? ํ๋์ ์์ฉ ํ๋ก๊ทธ๋จ ์๋์ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ๊ฐ ์๋๋ฐ ๊ฐ์๊ธฐ ํ๋๊ฐ "๋ฉ์ฒญํด์ง๋๋ค"("๋์คํฌ๊ฐ ์ฉ์์ต๋๋ค", "๋ฉ๋ชจ๋ฆฌ ๋์ถ", ๊ธฐํ ๋ฌธ์ ๋ก ์ธํด). ๊ทธ๋ฌ๋ฉด ์๋ฒ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. - ะบะฐะบ ๋ฌธ์ ๋ ์ด๋ค ์์ผ๋ก๋ ๋ํ๋ฌ๋ค
"๋๊ฐ" ์์ฒญ์ ๋ณด๋๋์ง ์ดํดํ๊ธฐ ์ํด ํ์ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์
๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค. SET application_name = '{bl-host}:{bl-method}';
โ ์์ฒญ์ด ๋ค์ด์ค๋ ๋น์ฆ๋์ค ๋ก์ง ํธ์คํธ์ ์ด๋ฆ๊ณผ ์์ฒญ์ ์์ํ ๋ฉ์๋ ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ฆ์ ๋ณด๋
๋๋ค.
์์ฒญ์ "์์ ์"๋ฅผ ์ ๋ฌํ ํ์๋ ๋ก๊ทธ์ ์ถ๋ ฅ๋์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋ณ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. log_line_prefix = ' %m [%p:%v] [%d] %r %a'
. ๊ด์ฌ ์์ผ์ ๋ถ๋ค์ ์๋ง๋
- ์๊ฐ
- ํ๋ก์ธ์ค ๋ฐ ํธ๋์ญ์ ์๋ณ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ
- ์ด ์์ฒญ์ ๋ณด๋ธ ์ฌ๋์ IP
- ๋ฐ ๋ฉ์๋ ์ด๋ฆ
๊ทธ๋ฌ๋ค๊ฐ ์ฐ๋ฆฌ๋ ์๋ก ๋ค๋ฅธ ์๋ฒ ๊ฐ์ ํ๋์ ์์ฒญ์ ๋ํ ์๊ด ๊ด๊ณ๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ด ๊ทธ๋ค์ง ํฅ๋ฏธ๋กญ์ง ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฌ๊ธฐ์ ๊ธฐ์ ๋์ผํ๊ฒ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์ํฉ์ ์์ฃผ ๋ฐ์ํ์ง ์์ต๋๋ค. ํ์ง๋ง ๋์ผํ๋๋ผ๋ ์ด ์๋ฒ ์ค ํ๋๋ฅผ ์ดํด๋ณด์ธ์.
์ ์ฌ๊ธฐ ์ปท์ด ์์ต๋๋ค "ํ๋์ ์๋ฒ - ํ๋ฃจ" ์ด๋ค ๋ถ์์๋ ์ถฉ๋ถํ๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค.
์ฒซ ๋ฒ์งธ ๋ถ์ ์น์ ์ ๋์ผํฉ๋๋ค. "๊ฒฌ๋ณธ" - ๋ชจ๋ ์์น ์งํ๊ฐ ์ญ์ ๋ ๊ณํ ์ ์์ ์ถ์ฝ๋ ํํ์ ๋๋ค. ๋ ๋ฒ์งธ ์ปท์ ์ ์ฉ์ด๋ ๋ฐฉ๋ฒ์ด๊ณ , ์ธ ๋ฒ์งธ ์ปท์ ์ฐ๋ฆฌ์๊ฒ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ ํน์ ๊ณํ ๋ ธ๋์ ๋๋ค.
ํน์ ์ธ์คํด์ค์์ ํ ํ๋ฆฟ์ผ๋ก ์ ํํ๋ฉด ํ ๋ฒ์ ๋ ๊ฐ์ง ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
- ๋ถ์ ๋์ ์์ ๋ค์ค ๊ฐ์
๋ ์ด์ ์์ฒ ๊ฐ์ ์ฟผ๋ฆฌ๋ ๊ณํ์ด ์๋ ์์ญ ๊ฐ์ ํ ํ๋ฆฟ์ ํตํด ๋ฌธ์ ๋ฅผ ๋ถ์ํด์ผ ํฉ๋๋ค. - ํ์๋ผ์ธ
์ฆ, ํน์ ์น์ ๋ด์ '์ฌ์ค'์ ์์ฝํ์ฌ ๋ฎ ๋์์ ๋ชจ์ต์ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์๋ ์๋ฅผ ๋ค์ด ํ ์๊ฐ์ ํ ๋ฒ ๋ฐ์ํ๋ ํจํด์ด ์์ง๋ง ํ๋ฃจ์ ํ ๋ฒ ๋ฐ์ํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฌด์์ด ์๋ชป๋์๋์ง, ์ฆ ์์ธ์ด ๋๊ตฌ์ด๋ฉฐ ์ ์ฌ๊ธฐ์ ์์ด์ผ ํ๋์ง ์๊ฐํด์ผ ํ๋ค๋ ๊ฒ์ ์ดํดํ ์ ์์ต๋๋ค. ํด์๋ ์๋ฉ๋๋ค. ์ด๊ฒ์ ๋ ๋ค๋ฅธ ๋น์์น์ , ์์ ํ ์๊ฐ์ ์ธ ๋ถ์ ๋ฐฉ๋ฒ์ ๋๋ค.
๋๋จธ์ง ๋ฐฉ๋ฒ์ ๊ณํ์์ ์ถ์ถํ ์งํ(์ด๋ฌํ ํจํด์ด ๋ฐ์ํ ํ์, ์ ์ฒด ๋ฐ ํ๊ท ์๊ฐ, ๋์คํฌ์์ ์ฝ์ ๋ฐ์ดํฐ์ ์, ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ ๋ฐ์ดํฐ์ ์)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํธ์คํธ์ ๋ํ ๋ถ์ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์ ๋ ๋์คํฌ์์ ๋ฌด์ธ๊ฐ๊ฐ ๋๋ฌด ๋ง์ด ์ฝ๊ธฐ ์์ํ์ต๋๋ค. ์๋ฒ์ ๋์คํฌ๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋๊ฐ ์ด๋ฅผ ์ฝ์ต๋๊น?
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ด์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ณ ์ง๊ธ ์ฒ๋ฆฌํ ํญ๋ชฉ(ํ๋ก์ธ์๋ ๋์คํฌ์ ๋ก๋ ๋๋ ์ด ์์ฒญ ์)์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ ๋ ฌํ๊ณ "์์" ํญ๋ชฉ์ ์ดํด๋ณด๊ณ ์์ ํ ๋ค์ ์๋ก์ด ๋ฒ์ ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ถ์ํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฆ์ ๋ค์๊ณผ ๊ฐ์ ์์ฒญ์์ ๋์ผํ ํ
ํ๋ฆฟ๊ณผ ํจ๊ป ์ ๊ณต๋๋ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณผ ์ ์์ต๋๋ค. SELECT * FROM users WHERE login = 'Vasya'
. ํ๋ก ํธ์๋, ๋ฐฑ์๋, ์ฒ๋ฆฌ... ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์๊ฐ ์ํธ ์์ฉํ์ง ์๋๋ฐ ์ฒ๋ฆฌ๊ฐ ์ฌ์ฉ์๋ฅผ ์ฝ๋ ์ด์ ๊ฐ ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค.
๋ฐ๋ ๋ฐฉ๋ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํํ๋ ์์ ์ ์ฆ์ ํ์ธํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋ฐํธ์๋๋ this, this, this, this๋ก ํ ์๊ฐ์ ํ ๋ฒ(ํ์๋ผ์ธ์ด ๋์์ด ๋ฉ๋๋ค)์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฆ์ ์ง๋ฌธ์ด ๋ ์ค๋ฆ ๋๋ค. ํ ์๊ฐ์ ํ ๋ฒ์ฉ ๋ญ๊ฐ๋ฅผ ํ๋ ๊ฒ์ด ํ๋ก ํธ์๋์ ์ผ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค...
์ผ๋ง ํ ์ฐ๋ฆฌ๋ ์ง๊ณ๊ฐ ๋ถ์กฑํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๊ณํ ๋
ธ๋๋ณ ํต๊ณ. ์ฐ๋ฆฌ๋ ํ
์ด๋ธ ์์ฒด์ ๋ฐ์ดํฐ๋ก ์์
์ ์ํํ๋ ๋
ธ๋(์ธ๋ฑ์ค๋ก ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฌ๋ถ)๋ง ๊ณํ์์ ๊ฒฉ๋ฆฌํ์ต๋๋ค. ์ฌ์ค, ์ด์ ์ฌ์ง์ ๋นํด ํ ๊ฐ์ง ์ธก๋ฉด๋ง ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๋
ธ๋๊ฐ ์ฐ๋ฆฌ์๊ฒ ์ผ๋ง๋ ๋ง์ ๊ธฐ๋ก์ ๊ฐ์ ธ์๋์?๋ฐ ์ญ์ ๋ ์(ํํฐ์ ์ํด ์ ๊ฑฐ๋ ํ).
ํ๋ ์ดํธ์ ์ ํฉํ ์ธ๋ฑ์ค๊ฐ ์๊ณ ์์ฒญ์ ํ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ง๋์ Seq Scan์ ๋ค์ด๊ฐ๊ณ ... ํ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ํํฐ๋งํ์ต๋๋ค. ํ๋ฃจ์ 100์ต ๊ฐ์ ํํฐ๋ง๋ ๋ ์ฝ๋๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ธ๋ฑ์ค๋ฅผ ๋กค์ ํ๋ ๊ฒ์ด ๋ ๋ซ์ง ์์ต๋๊น?
๋ชจ๋ ๊ณํ์ ๋
ธ๋๋ณ๋ก ๋ถ์ํ ๊ฒฐ๊ณผ ๊ณํ์ ์์ฌ์ค๋ฌ์ ๋ณด์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ๊ฐ ์์์ ๊นจ๋ฌ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์์๊ฒ "์น๊ตฌ์ฌ, ๋จผ์ ์์ธ์ผ๋ก ์ฝ์ ๋ค์ ์ ๋ ฌํ๊ณ ์๋ผ๋
๋๋ค"๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค. ์์น์ ์ผ๋ก ํ๋์ ๊ธฐ๋ก์ด ์์ต๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋ชจ๋ ์ฌ๋์ ์๋ง๋ "Vasya์ ๋ง์ง๋ง ์ฃผ๋ฌธ, ๋ ์ง๋ฅผ ์๋ ค์ฃผ์ญ์์ค."๋ผ๋ ํจํด์ ์ ํ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์ง๋ณ ์์ธ์ด ์๊ฑฐ๋ ์ฌ์ฉํ ์์ธ์ ๋ ์ง๊ฐ ์๋ค๋ฉด ๋๊ฐ์ "๊ฐํด"๋ฅผ ๋ฐ์ผ์ธ์.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด "๊ฐํด"๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์์๊ฒ ๋ฌด์์ ํด์ผ ํ๋์ง ์ฆ์ ์๋ ค์ฃผ๋ ๊ฒ์ ์ด๋จ๊น์? ๋ฐ๋ผ์ ์ง๊ธ ๊ณํ์ ์ด ๋ ์ฐ๋ฆฌ ๊ฐ๋ฐ์๋ ํ์ด ํฌํจ๋ ์๋ฆ๋ค์ด ๊ทธ๋ฆผ์ ์ฆ์ ๋ณด๊ณ "์ฌ๊ธฐ ์ ๊ธฐ์ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ด ๋ฐฉ๋ฒ ์ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ๋ฉ๋๋ค."๋ผ๊ณ ์ฆ์ ๋งํฉ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ์ฒ์์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํ์ํ๋ ๊ฒฝํ๋์ด ์ง๊ธ์ ํฌ๊ฒ ์ค์์ต๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ข ๋ฅ์ ๋๊ตฌ์ ๋๋ค.
์ถ์ฒ : habr.com