Nikolai Samokhvalov์ ๋ณด๊ณ ์ "PostgreSQL ํ๋์ ๋ํ ์ฐ์ ์ ์ ๊ทผ ๋ฐฉ์: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํ"์ ๋ด์ฉ์ ์ฝ์ด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
Shared_buffers = 25% โ ๋ง์ต๋๊น, ์ ์ต๋๊น? ์๋๋ฉด ๊ทธ๋ฅ ๋ง๋์? ๋ค์ ์ค๋๋ ๊ถ์ฅ ์ฌํญ์ด ๊ทํ์ ํน๋ณํ ๊ฒฝ์ฐ์ ์ ํฉํ์ง ์ด๋ป๊ฒ ์ ์ ์๋์?
์ด์ "์ฑ์ธ์ฒ๋ผ" postgresql.conf ๋งค๊ฐ๋ณ์๋ฅผ ์ ํํ๋ ๋ฌธ์ ์ ์ ๊ทผํ ๋์ ๋๋ค. ๋งน๋ชฉ์ ์ธ "์๋ ํ๋"์ ๋์์ด๋ ๊ธฐ์ฌ ๋ฐ ๋ธ๋ก๊ทธ์ ์ค๋๋ ์กฐ์ธ์ด ์๋๋ผ ๋ค์์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์๊ฒฉํ๊ฒ ๊ฒ์ฆ๋ ์คํ์ ์๋์ผ๋ก ๋๋์ผ๋ก ์ํ๋๋ฉฐ ๊ฐ๋ฅํ ํ "์ ํฌ"์ ๊ฐ๊น์ด ์กฐ๊ฑด์์ ์ํ๋ฉ๋๋ค.
- DBMS์ OS์ ๊ธฐ๋ฅ์ ๋ํ ๊น์ ์ดํด.
๋ธ์ CLI ์ฌ์ฉ(
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํ ์คํ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. XNUMX๊ฐ์ ์กฐ๊ธ ๋๊ฒ ์ง์๋ ์ด์ผ๊ธฐ์ ๋๋ค.
๋์ ๋ํด ์กฐ๊ธ. 14๋ ๋๊ฒ Postgres๋ฅผ ์ฌ์ฉํด ๋ณธ ๊ฒฝํ์ด ์์ต๋๋ค. ๋ค์์ ์์ ๋คํธ์ํน ํ์ฌ๊ฐ ์ค๋ฆฝ๋์์ต๋๋ค. Postgres๋ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋์์ผ๋ฉฐ ํ์ฌ๋ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
๋ํ ์ธ๊ณ 2์์ธ Meetup์ RuPostgres ๊ทธ๋ฃน๋ ์์ต๋๋ค. ์์ํ 2๋ช ์ ๊ฐ๊น์์ง๊ณ ์์ต๋๋ค. RuPostgres.org.
๊ทธ๋ฆฌ๊ณ Highload๋ฅผ ๋น๋กฏํ ๋ค์ํ ์ปจํผ๋ฐ์ค์ PC์์๋ ์ฒ์๋ถํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํนํ Postgres๋ฅผ ๋ด๋นํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๋ ๋ช ๋ ๋์ ์ ๋ ์ฌ๊ธฐ์์ 11๊ฐ ์๊ฐ๋์ ๋ํ Postgres ์ปจ์คํ ์ ๋ฌด๋ฅผ ๋ค์ ์์ํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ช ๋ ์ ์ด ์์ ์ ์ํํ์ ๋ ์๋ง๋ 2010๋ ๋ถํฐ Postgres๋ฅผ ์ฌ์ฉํ ์๋ ์์ ์ด ์ ์ ์ค๋จ๋์์ต๋๋ค. DBA์ ์ ๋ฌด ๋ฃจํด์ ๊ฑฐ์ ๋ณํ์ง ์์๊ณ , ์ฌ์ ํ ์ก์ฒด ๋ ธ๋์ ์ผ๋ง๋ ๋ง์ด ์ฌ์ฉํด์ผ ํ๋์ง ๋๋์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ์ฆ์ ์ฌ๊ธฐ์ ๋ญ๊ฐ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ๋ ๋ง์ด ์๋ํํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์๊ฒฉ์ด์๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ํด๋ผ์ด์ธํธ๊ฐ ํด๋ผ์ฐ๋์ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถ๋ช ํ ๋ง์ ๊ฒ์ด ์ด๋ฏธ ์๋ํ๋์์ต๋๋ค. ์ด์ ๋ํด์๋ ๋์ค์ ์์ธํ ์ค๋ช ํฉ๋๋ค. ์ฆ, ์ด ๋ชจ๋ ๊ฒ์ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ๊ฑฐ์ ๋ชจ๋ DBA ์์ ์ ์๋ํํ๋ ์ผ์ข ์ ํ๋ซํผ๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋๊ตฌ๊ฐ ์์ด์ผ ํ๋ค๋ ์์ด๋์ด๋ก ์ด์ด์ก์ต๋๋ค.
์ด ๋ณด๊ณ ์์๋ ๋ค์์ด ํฌํจ๋์ง ์์ต๋๋ค.
- "๋ง๋ฅ ํด๊ฒฐ์ฑ " ๋ฐ ๋ค์๊ณผ ๊ฐ์ ์ค๋ช - 8GB ๋๋ 25% shared_buffers๋ฅผ ์ค์ ํ๋ฉด ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค. shared_buffers์ ๊ดํ ๋ด์ฉ์ ๋ง์ง ์์ต๋๋ค.
- ํ๋์ฝ์ด "๋ด๋ถ".
๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น์?
- ์ฐ๋ฆฌ๊ฐ ์ ์ฉํ๊ณ ๊ฐ๋ฐํ๋ ์ต์ ํ ์์น์ด ์์ ๊ฒ์ ๋๋ค. ๊ทธ ๊ณผ์ ์์ ์จ๊ฐ ์ข ๋ฅ์ ์์ด๋์ด๊ฐ ๋์ฌ ๊ฒ์ด๋ฉฐ ์ฐ๋ฆฌ๊ฐ ๋๋ถ๋ถ ์คํ ์์ค์์ ๋ง๋๋ ๋ค์ํ ๋๊ตฌ, ์ฆ ์ฐ๋ฆฌ๋ ์คํ ์์ค์์ ๊ธฐ์ด๋ฅผ ๋ง๋ญ๋๋ค. ๋ํ ํฐ์ผ์ด ์์ผ๋ฉฐ ๋ชจ๋ ์ปค๋ฎค๋์ผ์ด์ ์ ์ฌ์ค์ ์คํ ์์ค์ ๋๋ค. ํ์ฌ ์งํ ์ค์ธ ์์ , ๋ค์ ๋ฆด๋ฆฌ์ค์ ํฌํจ๋ ์์ ๋ฑ์ ํ์ธํ ์ ์์ต๋๋ค.
- ๋ํ ์๊ท๋ชจ ์คํํธ์ ๋ถํฐ ๋๊ธฐ์ ์ ์ด๋ฅด๊ธฐ๊น์ง ์ฌ๋ฌ ํ์ฌ์์ ์ด๋ฌํ ์์น๊ณผ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝํ์ด ์์ ๊ฒ์ ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ๋ฐ์ ํ๊ณ ์์ต๋๊น?
์ฒซ์งธ, ์ธ์คํด์ค ์์ฑ, ๋ฐฑ์ ๋ฐฐํฌ ๋ฑ์ ๋ณด์ฅํ๋ ๊ฒ ์ธ์๋ DBA์ ์ฃผ์ ์๋ฌด๋ ๋ณ๋ชฉ ํ์์ ์ฐพ์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ฒ์ ๋๋ค.
์ด์ ์ด๋ ๊ฒ ์ค์ ๋์์ต๋๋ค. ๋ชจ๋ํฐ๋ง์ ๋ณด๋ฉด ๋ญ๊ฐ ๋ณด์ด์ง๋ง ์ธ๋ถ ์ฌํญ์ด ๋๋ฝ๋์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋๊ฐ ์์ผ๋ก ๋ ์ฃผ์ ๊น๊ฒ ํ๊ธฐ ์์ํ๊ณ ์ด๋ค ์์ผ๋ก๋ ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ํด์ผ ํ ์ง ์ดํดํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. Pg_stat_statements๋ ๋๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ์๋ณํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์๋ฃจ์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ pgBadger๋ฅผ ์ฌ์ฉํ์ฌ Postgres ๋ก๊ทธ๋ฅผ ๋ถ์ํฉ๋๋ค.
๊ฐ ์ ๊ทผ ๋ฐฉ์์๋ ์ฌ๊ฐํ ๋จ์ ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ ๊ทผ ๋ฐฉ์์์๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ญ์ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ด "?"์ ๊ฐ์ ๊ทธ๋ฃน SELECT * FROM ํ ์ด๋ธ์ ๋ณด๋ฉด ๋๋ Postgres 10๋ถํฐ "$"์ ๋๋ค. ์ด๊ฒ์ด ์ธ๋ฑ์ค ์ค์บ์ธ์ง ์ํ์ค ์ค์บ์ธ์ง ์ ์ ์์ต๋๋ค. ์ด๋ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์ง๋๋ค. ๊ฑฐ๊ธฐ์ ์ข์ฒ๋ผ ์ ํ์ง ์๋ ๊ฐ์ ๋์ ํ๋ฉด ์ธ๋ฑ์ค ์ค์บ์ด ๋๋ค. ๊ฑฐ๊ธฐ์ ํ ์ด๋ธ์ 90%๋ฅผ ์ฐจ์งํ๋ ๊ฐ์ ๋์ฒดํ๋ฉด Postgres๊ฐ ํต๊ณ๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์ seq ์ค์บ์ด ๋ถ๋ช ํด์ง๋๋ค. ์ผ๋ถ ์์ ์ด ์งํ ์ค์ด์ง๋ง ์ด๋ pg_stat_statements์ ํฐ ๋จ์ ์ ๋๋ค.
๋ก๊ทธ ๋ถ์์ ๊ฐ์ฅ ํฐ ๋จ์ ์ ์์น์ ์ผ๋ก "log_min_duration_statement = 0"์ ๊ฐ๋นํ ์ ์๋ค๋ ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋ํด์๋ ์ด์ผ๊ธฐํ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ ์ฒด ๊ทธ๋ฆผ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋งค์ฐ ๋น ๋ฅธ ์ผ๋ถ ์ฟผ๋ฆฌ๋ ์์ฒญ๋ ์์ ๋ฆฌ์์ค๋ฅผ ์๋นํ ์ ์์ง๋ง ์๊ณ๊ฐ ๋ฏธ๋ง์ด๊ธฐ ๋๋ฌธ์ ํ์๋์ง ์์ต๋๋ค.
DBA๋ ๋ฐ๊ฒฌํ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํฉ๋๊น?
์๋ฅผ ๋ค์ด, ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฌด์์ ํฉ๋๊น? ๊ฐ๋ฐ์๋ผ๋ฉด ํฌ๊ธฐ๊ฐ ๊ฐ์ง ์์ ์ผ๋ถ ์ธ์คํด์ค์์ ์์ ์ ์ํํ๊ฒ ๋ ๊ฒ์ ๋๋ค. DBA๋ผ๋ฉด ์คํ ์ด์ง์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋๋ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ XNUMX๊ฐ์ ๋ค์ฒ์ก์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ์์ฐ์ ๋ค์ด๊ฐ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฒฝํ์ด ํ๋ถํ DBA๋ผ๋ ํ๋ก๋์ ์์ ๋ณต์ ๋ณธ์ ์ฒดํฌ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ์์ธ์ ์์ฑํ์ฌ ๋์์ด ๋๋์ง ํ์ธํ๊ณ ์ด๋ฅผ ์ญ์ ํ ํ ๊ฐ๋ฐ์์๊ฒ ์ ๊ณตํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ๋ฃ์ ์ ์๋๋ก ํฉ๋๋ค. ์ด๊ฒ์ด ์ง๊ธ ์ผ์ด๋๊ณ ์๋ ๋ง๋ ์๋๋ ์ผ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๋ฌธ์ ์ ๋๋ค.
- ๊ตฌ์ฑ์ ์กฐ์ ํฉ๋๋ค.
- ์ธ๋ฑ์ค ์ธํธ๋ฅผ ์ต์ ํํฉ๋๋ค.
- SQL ์ฟผ๋ฆฌ ์์ฒด๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค(๊ฐ์ฅ ์ด๋ ค์ด ๋ฐฉ๋ฒ์ ๋๋ค).
- ์ฉ๋์ ์ถ๊ฐํฉ๋๋ค(๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ).
์ด๋ฐ ์ผ๋ค์ด ๋ง์ด ์ผ์ด๋๊ณ ์์ต๋๋ค. Postgres์๋ ๋ง์ ํธ๋ค์ด ์์ต๋๋ค. ์์์ผ ํ ๊ฒ์ด ๋ง์ต๋๋ค. Postgres์๋ ๋ง์ ์ธ๋ฑ์ค๊ฐ ์์ต๋๋ค. ์ด ์ปจํผ๋ฐ์ค์ ์ฃผ์ต์์๊ฒ๋ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ชจ๋ ๊ฒ์ ์์์ผ ํ๋ฉฐ, ์ด๊ฒ์ด ๋นDBA๊ฐ DBA๊ฐ ํ๋ง์ ์ ์ฐ์ตํ๋ ๊ฒ์ฒ๋ผ ๋๋ผ๊ฒ ๋ง๋๋ ์ด์ ์ ๋๋ค. ์ฆ, ์ด ๋ชจ๋ ๊ฒ์ ์ ์์ ์ผ๋ก ์ดํดํ๋ ค๋ฉด 10๋ ๋์ ๊ณต๋ถํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ ์ด ํ๋ง๋ฒ์ ๋ง์ ์ธ์ฐ๋ ์ ์ฌ์ ๋๋ค. ๋๋ ๊ธฐ์ ์ด ์๊ณ ์ด ๋ชจ๋ ๊ฒ์ ์ง๊ด์ด ์๋๋ก ๋ชจ๋ ๊ฒ์ํ๊ณ ์ถ์ต๋๋ค.
์ํ ์
๋๋ ๋ด ํ๋ก์ ํธ๋ฅผ ํฌํจํ์ฌ ์ ์ด๋ ๋ ๊ฐ์ ํ๋ก์ ํธ์์ ์ด๊ฒ์ ๊ด์ฐฐํ์ต๋๋ค. ๋ ๋ค๋ฅธ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์๋ default_statistict_target ๊ฐ์ด 1์ด๋ฉด ์ข๋ค๊ณ ๋งํฉ๋๋ค. ์ข์์, ํ๋ก๋์ ํ๊ฒฝ์์ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ XNUMX๋ ํ ์ฐ๋ฆฌ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ์ฐ๋ฆฌ๊ฐ ์ด์ผ๊ธฐํ๊ณ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์คํ์ ํตํด ๊ณผ๊ฑฐ์ ๊ฒ๊ณผ ํ์ฌ์ ๊ฒ์ ๋น๊ตํ ์ ์์ต๋๋ค.
์ด๋ฅผ ์ํด์๋ ์คํ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ค ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ๋ ํ๊ฒฝ์ ๋๋ค. ํ๋์จ์ด๊ฐ ํ์ํด์. ๊ทธ๋ฆฌ๊ณ ์ด๋ค ํ์ฌ์ ์์ ๊ณ์ฝ์ ํ๋ฉด ์์ฐํ ๋์ ๋๊ฐ์ ํ๋์จ์ด๋ฅผ ์ฃผ๋ผ๊ณ ํ๋๊ตฐ์. ๊ฐ ๋ง์คํฐ๋ง๋ค ์ด์ ๊ฐ์ ํ๋์จ์ด๊ฐ ํ๋ ์ด์ ํ์ํฉ๋๋ค. ์ด๊ฒ์ Amazon์ด๋ Google์ ์ธ์คํด์ค ๊ฐ์ ๋จธ์ ์ด๊ฑฐ๋ ์ ํํ ๋์ผํ ํ๋์จ์ด๊ฐ ํ์ํฉ๋๋ค. ์ฆ, ํ๊ฒฝ์ ์ฌํํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๊ฒฝ ๊ฐ๋ ์๋ Postgres์ ์ฃผ์ ๋ฒ์ ์ด ํฌํจ๋ฉ๋๋ค.
- ๋ ๋ฒ์งธ ๋ถ๋ถ์ ์ฐ๋ฆฌ ์ฐ๊ตฌ์ ๋์์ ๋๋ค. ์ด๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค. ๋ฐฉ๋ฒ์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
- ์ธ ๋ฒ์งธ ๋ถ๋ถ์ ๋ถํ์ ๋๋ค. ์ด๊ฒ์ ๊ฐ์ฅ ์ด๋ ค์ด ์๊ฐ์ ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ค ๋ฒ์งธ ๋ถ๋ถ์ ์ฐ๋ฆฌ๊ฐ ํ์ธํ๋ ๊ฒ, ์ฆ ๋ฌด์์ ๋ฌด์๊ณผ ๋น๊ตํ ๊ฒ์ธ์ง์ ๋๋ค. ๊ตฌ์ฑ์์ ํ๋ ์ด์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์์ธ ๋ฑ์ ์์ฑํ ์ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์คํ์ ์์ํ๊ณ ์์ต๋๋ค. ์ฌ๊ธฐ pg_stat_statements๊ฐ ์์ต๋๋ค. ์ผ์ชฝ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์ ๋๋ค. ์ค๋ฅธ์ชฝ - ๋ฌด์จ ์ผ์ด ์์๋์?
์ผ์ชฝ์์๋ default_statistics_target = 100, ์ค๋ฅธ์ชฝ์์๋ =1. ์ด๊ฒ์ด ๋์์ด ๋์์์ ์ ์ ์์ต๋๋ค. ์ ๋ฐ์ ์ผ๋ก ๋ชจ๋ ๊ฒ์ด 000% ํฅ์๋์์ต๋๋ค.
๊ทธ๋ฌ๋ ์๋๋ก ์คํฌ๋กคํ๋ฉด pgBadger ๋๋ pg_stat_statements์ ์์ฒญ ๊ทธ๋ฃน์ด ์์ ๊ฒ์ ๋๋ค. ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. ์ผ๋ถ ์์ฒญ์ด 88% ๊ฐ์ํ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์์ง๋์ด๋ง ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. ์ ๊ฐ๋ผ์์๋์ง ๊ถ๊ธํ๊ธฐ ๋๋ฌธ์ ๋ ์์ชฝ์ ํํค์ณ ๋ณผ ์ ์์ต๋๋ค. ํต๊ณ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์ดํดํด์ผ ํฉ๋๋ค. ํต๊ณ์ ๋ฒํท์ด ๋ง์์๋ก ๊ฒฐ๊ณผ๊ฐ ๋ ๋๋น ์ง๋ ์ด์
๋๋ ํํค์น ์ ์์ง๋ง "ALTER TABLE ... ALTER COLUMN"์ ์ํํ๊ณ ์ด ์ด์ ํต๊ณ์ 100๊ฐ์ ๋ฒํท์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ ๋ค๋ฅธ ์คํ์ ํตํด ์ด ํจ์น๊ฐ ๋์์ด ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ชจ๋. ์ด๋ ์ง๊ด๋ณด๋ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฐ ๊ทธ๋ฆผ์ ๋ณด๊ณ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๋ฐ ๋์์ด ๋๋ ์์ง๋์ด๋ง ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
๋ค๋ฅธ ์ง์ญ์ ๋ช ๊ฐ์ง ์. ์๋ ๋์ ํ ์คํธ์๋ CI ํ ์คํธ๊ฐ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ํ๋ ํ ์คํธ ์์ด๋ ์ ๋๋ก ๋ ํ๋ก์ ํธ๊ฐ ์์ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ์ฐ์ ๋ถ์ผ: ํญ๊ณต, ์๋์ฐจ ์ฐ์ ์์๋ ๊ณต๊ธฐ์ญํ์ ํ ์คํธํ ๋ ์คํ์ ํ ๊ธฐํ๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ฆผ์์ ์ง์ ์ฐ์ฃผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐ์ฌํ์ง ์์ ๊ฒ์ด๋ฉฐ, ์๋์ฐจ๋ฅผ ์ฆ์ ํธ๋์ผ๋ก ๊ฐ์ ธ๊ฐ์ง ์์ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋์ด ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ค๋ฅธ ์ฐ์ ์ ๊ด์ฐฐํ์ฌ ๊ฒฐ๋ก ์ ๋์ถํ ์ ์์ต๋๋ค.
์ฒซ์งธ, ์ฐ๋ฆฌ๋ ํน๋ณํ ํ๊ฒฝ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์์ฐ์ ๊ฐ๊น์ง๋ง ๊ฐ๊น์ง๋ ์์ต๋๋ค. ์ฃผ์ ํน์ง์ ์ ๋ ดํ๊ณ ๋ฐ๋ณต ๊ฐ๋ฅํ๋ฉฐ ์ต๋ํ ์๋ํ๋์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ธํ ๋ถ์์ ์ํํ๊ธฐ ์ํ ํน๋ณํ ๋๊ตฌ๋ ์์ด์ผ ํฉ๋๋ค.
์๋ง๋ ๋นํ๊ธฐ๋ฅผ ์ด๋ฅํ๊ณ ๋นํํ ๋ ํ๋์์๋ณด๋ค ๋ ๊ฐ ํ๋ฉด์ ๋ชจ๋ ๋ฐ๋ฆฌ๋ฏธํฐ๋ฅผ ์ฐ๊ตฌํ ๊ธฐํ๊ฐ ๋ ์ ์ ๊ฒ์ ๋๋ค. ๋ ๋ง์ ์ง๋จ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋นํ๊ธฐ์ ์ค์ ์ ์๋ ๋ฌด๊ฑฐ์ด ๋ฌผ๊ฑด์ ๋ ๋ง์ด ์ด๋ฐํ ์ฌ์ ๊ฐ ์์ต๋๋ค. ํฌ์คํธ๊ทธ๋ ์ค์ ๋์ผํฉ๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์คํ ์ค์ ์ ์ฒด ์ฟผ๋ฆฌ ๋ก๊น ์ ํ์ฑํํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ํ๋ก๋์ ํ๊ฒฝ์์ ์ด๋ฐ ์ผ์ ํ๊ณ ์ถ์ง ์์ต๋๋ค. auto_explain์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ํ์ฑํํ ๊ณํ๋ ์์ต๋๋ค.
์ ๊ฐ ๋งํ๋ฏ์ด ๋์ ์์ค์ ์๋ํ๋ ๋ฒํผ์ ๋๋ฅด๊ณ ๋ฐ๋ณตํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๊ฒ ํด์ผ ๋ง์ ์คํ์ด ๊ฐ๋ฅํ๊ณ ์คํธ๋ฆฌ๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
Nancy CLI - "๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ตฌ์"์ ๊ธฐ์ด
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ด ์ผ์ ํ์ต๋๋ค. ์ฆ, ์ ๋ ๊ฑฐ์ XNUMX๋ ์ ์ธ XNUMX์์ ์ด๋ฌํ ์์ด๋์ด์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์คํ ์์ค์ Nancy CLI๋ผ๋ ๊ฒ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ตฌ์ค์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ธฐ๋ฐ์ด๋ค.
๋ฌผ๋ก ์์ง ๊ฐ๋ฐ ์ค์ธ ๋ถ๋ถ๋ ๋ง์ต๋๋ค. ๊ฑฐ๊ธฐ์๋ ๋ง์ ์์ด๋์ด๊ฐ ์์ต๋๋ค. ํ์ง๋ง ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ฑฐ์ ๋งค์ผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ด๋์ด๊ฐ ์๊ธฐ๋ฉด 40๊ฐ์ ๋ผ์ธ์ ์ญ์ ํ๋ฉด ๋ชจ๋ ๊ฒ์ด IO๋ก ๊ท๊ฒฐ๋๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๊ทธ๋ฐ ๋ค์ ์คํ์ ์ํํ๊ณ ๋ ์์ธํ ์ดํด๋ณด๊ณ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ ๋ค์ ์ฆ์์์ ์์ ํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ์คํ์ ํ๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์กฐ์ ํ๊ณ ๊ฒฐ๊ตญ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ด๋ฐ ์ผ์ ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ด ์์ด๋์ด์ ๋ณธ์ง์ ๋๋ค.
์ด๊ฒ์ ์ด๋์์ ์๋ํ ์ ์๋์? ์ด๋ ๋ก์ปฌ์์ ์๋ํ ์ ์์ต๋๋ค. ์ฆ, ์ด๋์๋ ์ํํ ์ ์์ผ๋ฉฐ MacBook์์๋ ์คํํ ์ ์์ต๋๋ค. ๋์ปค๊ฐ ํ์ํด์. ๊ฐ์. ๊ทธ๊ฒ ๋ค์ผ. ํ๋์จ์ด๋ ๊ฐ์ ๋จธ์ ๋ฑ ์ด๋ ๊ณณ์์๋ ์คํํ ์ ์์ต๋๋ค.
๋ํ EC2 ์ธ์คํด์ค์ Amazon์์ ์๊ฒฉ์ผ๋ก ์คํํ ์ ์๋ ๊ธฐํ๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋งค์ฐ ๋ฉ์ง ๊ธฐํ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด์ ์ฐ๋ฆฌ๋ i500 ์ธ์คํด์ค์ ๋ํด ๊ฐ์ฅ ์ด๋ฆฐ ์ธ์คํด์ค๋ถํฐ ์์ํ์ฌ i3-3-xlarge๊น์ง 16๊ฐ ์ด์์ ์คํ์ ์ํํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ 500๋ฒ์ ์คํ์ 64๋ฌ๋ฌ์ ๋น์ฉ์ด ๋ค์์ต๋๋ค. ๊ฐ๊ฐ 15๋ถ ๋์ ์ง์๋์์ต๋๋ค. ์ฆ, ์คํ์ด ์ฌ์ฉ๋๋ค๋ ์ฌ์ค๋ก ์ธํด ๋งค์ฐ ์ ๋ ดํฉ๋๋ค. Amazon์ ์ด๋น ์ฒญ๊ตฌ์ก ์ธ 70 % ํ ์ธ์ ๋๋ค. ๋น์ ์ ๋ง์ ์ผ์ ํ ์ ์์ต๋๋ค. ์ค์ ์ฐ๊ตฌ๋ฅผ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Postgres์ ์ธ ๊ฐ์ง ์ฃผ์ ๋ฒ์ ์ด ์ง์๋ฉ๋๋ค. ์ผ๋ถ ์ค๋๋ ๋ฒ์ ๊ณผ ์๋ก์ด 12๋ฒ์งธ ๋ฒ์ ์ ์์ฑํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ด๊ฒ:
- ๋คํ/SQL ํ์ผ.
- ์ฃผ์ ๋ฐฉ๋ฒ์ PGDATA ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณต์ ํ๋ ๊ฒ์ ๋๋ค. ์์น์ ์ผ๋ก ๋ฐฑ์ ์๋ฒ์์ ๊ฐ์ ธ์ต๋๋ค. ์ผ๋ฐ ๋ฐ์ด๋๋ฆฌ ๋ฐฑ์ ์ด ์๋ ๊ฒฝ์ฐ ๊ฑฐ๊ธฐ์์ ํด๋ก ์ ๋ง๋ค ์ ์์ต๋๋ค. ํด๋ผ์ฐ๋๊ฐ ์๋ค๋ฉด Amazon ๋ฐ Google๊ณผ ๊ฐ์ ํด๋ผ์ฐ๋ ์คํผ์ค๊ฐ ์ด๋ฅผ ๋์ ํด ๋๋ฆฝ๋๋ค. ์ด๋ ์ค์ ํ๋ก๋์ ์ ๋ณต์ ํ๋ ๊ฐ์ฅ ์ค์ํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ํผ์น๋ ๋ฐฉ์์ ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ๋ฐฉ๋ฒ์ Postgres์์ ์ด๋ค ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ค๋ ์ฐ๊ตฌ์ ์ ํฉํฉ๋๋ค. pgbench ์ ๋๋ค. pgbench๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ํ๋์ "db-pgbench" ์ต์ ์ผ ๋ฟ์ ๋๋ค. ๋น์ ์ ๊ทธ์๊ฒ ๊ท๋ชจ๋ฅผ ๋งํด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ช ์๋ ๋๋ก ๋ชจ๋ ๊ฒ์ด ํด๋ผ์ฐ๋์์ ์์ฑ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์์ ๋ก๋ํ์ธ์.
- ํ๋์ SQL ์ค๋ ๋์์ ๋ก๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๊ฐ์ฅ ์์์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ก๋๋ฅผ ์๋ฎฌ๋ ์ดํธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ฐ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฅผ ์๋ฎฌ๋ ์ดํธํ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ก๊ทธ๋ฅผ ์์งํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๊ณ ํต์ค๋ฝ์ต๋๋ค. ๊ทธ ์ด์ ๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Nancy์ ๋ด์ฅ๋ pgreplay๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ดํฉ๋๋ค.
- ์๋๋ฉด ๋ค๋ฅธ ์ต์ . ์ฐ๋ฆฌ๋ ์ด๋ ์ ๋์ ๋ ธ๋ ฅ์ ๋ค์ฌ ์์ ์ ์ํํฉ๋๋ค. ์ ํฌ ์์คํ ์ ํ์ฌ ๋ถํ๋ฅผ ๋ถ์ํ์ฌ ๊ฐ์ฅ ๋์ ์์ฒญ ๊ทธ๋ฃน์ ์ถ์ถํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ pgbench๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ์ค์์ ์ด ๋ถํ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค.
- ์ผ์ข ์ SQL์ ์ํํด์ผ ํฉ๋๋ค. ์ฆ, ์ผ์ข ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ํ์ธํ๊ณ ๊ฑฐ๊ธฐ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ณ ๊ฑฐ๊ธฐ์์ ANALAZE๋ฅผ ์คํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ง๊ณต์ด ์๊ธฐ ์ ๊ณผ ์ง๊ณต์ด ๋๋ ํ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์ดํด๋ด ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ SQL.
- ๊ตฌ์ฑ์์ ํ๋ ์ด์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ ๋ผ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด Amazon์์ 100๊ฐ์ ๊ฐ์ ํ์ธํ๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ช ์๊ฐ ์์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ ๋ผ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ๋ช ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ํ์ง๋ง ๊ฐ๋ฐ ์ค์ธ ํจ์น๊ฐ ์์ต๋๋ค. ์ผ๋ จ์ ํจ์น๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, ๋์ผํ ์๋ฒ์์ ๋์ผํ pgdata๋ฅผ ์ผ๊ด๋๊ฒ ์ฌ์ฉํ๊ณ ํ์ธํ ์ ์์ต๋๋ค. Postgres๊ฐ ๋ค์ ์์๋๊ณ ์บ์๊ฐ ์ฌ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ๋ถํ๋ฅผ ์ด์ ํ ์ ์์ต๋๋ค.
- pg ์ค๋ ์ท๋ถํฐ ์์ํ์ฌ ๋ค์ํ ํ์ผ๊ณผ ํจ๊ป ๋๋ ํ ๋ฆฌ๊ฐ ๋์ฐฉํฉ๋๋ค.์คํฏ***. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๊ฒ์ pg_stat_statements, pg_stat_kcacke์ ๋๋ค. ์ด๋ ์์ฒญ์ ๋ถ์ํ๋ ๋ ๊ฐ์ง ํ์ฅ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ pg_stat_bgwriter์๋ pgwriter ํต๊ณ๋ฟ๋ง ์๋๋ผ ์ฒดํฌํฌ์ธํธ์ ๋ฐฑ์๋ ์์ฒด๊ฐ ๋ํฐ ๋ฒํผ๋ฅผ ๋์ฒดํ๋ ๋ฐฉ๋ฒ๋ ํฌํจ๋์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณด๋ ๊ฒ์ ๋ชจ๋ ํฅ๋ฏธ ๋กญ์ต๋๋ค. ์๋ฅผ ๋ค์ด, shared_buffers๋ฅผ ์ค์ ํ ๋ ๋ชจ๋ ์ฌ๋์ด ์ผ๋ง๋ ๊ต์ฒด๋์๋์ง ํ์ธํ๋ ๊ฒ์ ๋งค์ฐ ํฅ๋ฏธ๋กญ์ต๋๋ค.
- Postgres ๋ก๊ทธ๋ ๋์ฐฉํฉ๋๋ค. ๋ ๊ฐ์ ๋ก๊ทธ โ ์ค๋น ๋ก๊ทธ์ ๋ก๋ ์ฌ์ ๋ก๊ทธ.
- ๋น๊ต์ ์๋ก์ด ๊ธฐ๋ฅ์ FlameGraphs์ ๋๋ค.
- ๋ํ ๋ก๋ ์ฌ์์ ์ํด pgreplay ๋๋ pgbench ์ต์ ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ํด๋น ์ถ๋ ฅ์ ๊ธฐ๋ณธ ์ถ๋ ฅ์ด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๊ธฐ ์๊ฐ๊ณผ TPS๊ฐ ํ์๋ฉ๋๋ค. ๊ทธ๋ค์ด ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ๋ณด์๋์ง ์ดํดํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค.
- ์์คํ ์ ๋ณด.
- ๊ธฐ๋ณธ CPU ๋ฐ IO ๊ฒ์ฌ. ์ด๋ Amazon์ EC2 ์ธ์คํด์ค์ ๋ ๋ง์ ๊ฒ์ ๋๋ค. ์ค๋ ๋์์ 100๊ฐ์ ๋์ผํ ์ธ์คํด์ค๋ฅผ ์์ํ๊ณ ๊ทธ๊ณณ์์ 100๊ฐ์ ๋ค๋ฅธ ์คํ์ ์คํํ๋ ค๋ ๊ฒฝ์ฐ 10๋ฒ์ ์คํ์ ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ๋๊ตฐ๊ฐ์ ์ํด ์ต์๋ฐ๊ณ ์๋ ๊ฒฐํจ ์๋ ์ฌ๋ก๋ฅผ ์ ํ์ง ์๋๋ก ํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด ํ๋์จ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ฆฌ์์ค๊ฐ ๊ฑฐ์ ๋จ์ ์์ง ์์ต๋๋ค. ๊ทธ๋ฌํ ๊ฒฐ๊ณผ๋ ํ๊ธฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Alexey Kopytov์ sysbench์ ๋์์ผ๋ก ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๊ฒ๊ณผ ๋น๊ตํ ์ ์๋ ๋ช ๊ฐ์ง ๊ฐ๋จํ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. ์ฆ, CPU ์๋ ๋ฐฉ์๊ณผ IO ์๋ ๋ฐฉ์์ ์ดํดํ ์ ์์ต๋๋ค.
์ฌ๋ฌ ํ์ฌ์ ์ฌ๋ก๋ฅผ ๋ณด๋ฉด ๊ธฐ์ ์ ์ธ ์ด๋ ค์์ ๋ฌด์์ ๋๊น?
๋ก๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ก๋๋ฅผ ๋ฐ๋ณตํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์คํ ์์ค pgreplay์ ์์ฑํ๋ฉด ์ข์ ์์ด๋์ด์ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง ์ ๋๋ก ์๋ํ๋ ค๋ฉด ๋งค๊ฐ๋ณ์์ ํ์ด๋ฐ์ ์ฌ์ฉํ์ฌ ์ ์ฒด ์ฟผ๋ฆฌ ๋ก๊น ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
๊ธฐ๊ฐ๊ณผ ํ์์คํฌํ์๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ถ์ ์ ์ฒด๋ฅผ ๋น์ธ ๊ฑฐ์์. ๊ฐ์ฅ ์ค์ํ ์ง๋ฌธ์ ๋น์ ์ด ๊ทธ๊ฒ์ ๊ฐ๋นํ ์ ์๋์ง ์ฌ๋ถ์ ๋๋ค.
๋ฌธ์ ๋ ์ฌ์ฉํ์ง ๋ชปํ ์๋ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ฐ์ , ๋ก๊ทธ์ ์ด๋ค ์คํธ๋ฆผ์ด ๊ธฐ๋ก๋ ๊ฒ์ธ์ง ์ดํดํด์ผ ํฉ๋๋ค. pg_stat_statements๊ฐ ์๋ ๊ฒฝ์ฐ ์ด ์ฟผ๋ฆฌ(๋งํฌ๋ ์ฌ๋ผ์ด๋์ ์์)๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋น ๊ธฐ๋ก๋๋ ๋ฐ์ดํธ ์๋ฅผ ๋๋ต์ ์ผ๋ก ์ดํดํ ์ ์์ต๋๋ค.
์์ฒญ์ ๊ธธ์ด๋ฅผ ์ดํด๋ด ๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ์๋ค๋ ์ฌ์ค์ ๋ฌด์ํ๊ณ ์์ง๋ง ์์ฒญ ๊ธธ์ด์ ์ด๋น ์คํ ํ์๋ฅผ ์๊ณ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋๋ต ์ด๋น ๋ฐ์ดํธ ์๋ฅผ ์ถ์ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ ๋ฐฐ์ ์ค์๋ฅผ ํ ์๋ ์์ง๋ง, ์ด๋ฐ ์์ผ๋ก ์์๋ฅผ ํ์คํ ์ดํดํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ด ์์ฒญ์ด ์ด๋น 802๋ฒ ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋น bytes_per - 300 kB/s๊ฐ ํ๋ฌ์ค ๋๋ ๋ง์ด๋์ค๋ก ๊ธฐ๋ก๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์น์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๊ทธ๋ฌํ ํ๋ฆ์ ๊ฐ๋นํ ์ ์์ต๋๋ค.
ํ์ง๋ง! ์ฌ์ค์ ๋ค์ํ ๋ก๊น ์์คํ ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์ ๊ธฐ๋ณธ๊ฐ์ ๋๊ฐ "syslog"์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ syslog๊ฐ ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ฆผ์ด ๋ํ๋ ์ ์์ต๋๋ค. pgbench๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๋ก๊น ์ ํ์ฑํํ๊ณ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ก๊น ํ์ง ์์ - ์ผ์ชฝ ์ด์ ๋๋ค. ์ฐ๋ฆฌ๋ 161TPS๋ฅผ ์ป์์ต๋๋ค. syslog๋ฅผ ์ฌ์ฉํ๋ฉด Amazon์ Ubuntu 000์์ 16.04TPS๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๊ฐ์ง ๋ค๋ฅธ ๋ก๊น ๋ฐฉ๋ฒ์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ์ํฉ์ด ํจ์ฌ ์ข์์ง๋๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ํ๋ฝํ ๊ฒ์ผ๋ก ์์ํ์ง๋ง ๊ฐ์ ์ ๋๋ ์๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Journald๋ ์ฐธ์ฌํ์ฌ ์ฝ๊ฒ ๊ฒ์ํ ์ ์๋๋ก ๋ก๊ทธ๋ฅผ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ๋ณํํ๋ CentOS 7์์๋ TPS๊ฐ 44๋ฐฐ๋ ๋จ์ด์ง๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ฌ๋๋ค์ด ์ด์๊ฐ๋ ์ด์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ข ์ข ํ์ฌ, ํนํ ๋๊ท๋ชจ ํ์ฌ์์๋ ์ด๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. syslog์์ ๋ฒ์ด๋ ์ ์๋ค๋ฉด, syslog์์ ๋ฒ์ด๋์๊ธฐ ๋ฐ๋๋๋ค.
- IOPS ๋ฐ ์ฐ๊ธฐ ํ๋ฆ์ ํ๊ฐํฉ๋๋ค.
- ๋ก๊น ์์คํ ์ ํ์ธํ์ธ์.
- ์์ ๋ถํ๊ฐ ์ง๋์น๊ฒ ํฐ ๊ฒฝ์ฐ ์ํ๋ง์ ๊ณ ๋ คํ์ญ์์ค.
pg_stat_statements๊ฐ ์์ต๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด ๊ทธ๊ฒ์ ๊ฑฐ๊ธฐ์ ์์ด์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ์์ฒญ ๊ทธ๋ฃน์ ํ์ผ์์ ํน๋ณํ ๋ฐฉ์์ผ๋ก ์ทจํ๊ณ ์ค๋ช ํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ pgbench์ ๋งค์ฐ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ "-f" ์ต์ ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ์ผ์ ์ฝ์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
"-f"๋ฅผ ๋ง์ด ์ดํดํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ "@"์ ์ฌ์ฉํ์ฌ ๊ฐ ํ์ผ์ด ์ด๋ค ๊ณต์ ๋ฅผ ๊ฐ์ ธ์ผ ํ๋์ง ์ ์ ์์ต๋๋ค. ์ฆ, 10%์ ๊ฒฝ์ฐ์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๊ณ 20%์ ๊ฒฝ์ฐ์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์์ฐ ํ์ฅ์์ ๋ณด๋ ๊ฒ๊ณผ ๋ ๊ฐ๊น์์ง ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์์ฐ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์ด๋ป๊ฒ ์ดํดํ ๊ฒ์ธ๊ฐ? ์ด๋ค ๋ชซ๊ณผ ์ด๋ป๊ฒ? ์ด๊ฒ์ ์ฝ๊ฐ์ ์ ์ณ๋๊ณ ์์ต๋๋ค. ์ ํ์ด ํ๋ ๋ ์์ด์
๊ทธ๋ ์ฝ๊ฐ ๋ค๋ฅธ ์ด์ ๋ก ํ์ด๋ฌ์ต๋๋ค. ๋ชจ๋ํฐ๋ง๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, ์์ ๊ธฐ๋ฐ์ ์ดํด๋ณด๊ณ ์กด์ฌํ๋ ๋ฌธ์ ๋ฅผ ์ดํด๋ณด์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ์์น์ ์ผ๋ก health_check๋ฅผ ์ํํฉ๋๋ค. ์๋ จ๋ DBA๋ผ๋ฉด health_check๋ฅผ ์ํํ์ธ์. ์ธ๋ฑ์ค ์ฌ์ฉ ๋ฑ์ ์ดํด๋ณด์์ต๋๋ค. OKmeter๊ฐ ์๋ค๋ฉด ์ข์ต๋๋ค. ์ด๊ฒ์ Postgres์ ๋ํ ๋ฉ์ง ๋ชจ๋ํฐ๋ง์ ๋๋ค. OKmeter.io โ ์ค์นํด ์ฃผ์ธ์. ๋ชจ๋ ๊ฒ์ด ์ ์๋ฃ๋์์ต๋๋ค. ์ ๋ฃ์ ๋๋ค.
ํ๋๋ ์์ผ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ง์ง ์์ต๋๋ค. ๋ชจ๋ํฐ๋ง์๋ ์ผ๋ฐ์ ์ผ๋ก CPU, IO, ์์ฝ์ด ์๊ณ ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ ๋ง์ ๊ฒ์ด ํ์ํฉ๋๋ค. autovacuum์ด ์ด๋ป๊ฒ ์๋ํ๋์ง, ์ฒดํฌํฌ์ธํธ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. io์์๋ ์ฒดํฌํฌ์ธํธ๋ฅผ bgwriter ๋ฐ ๋ฐฑ์๋ ๋ฑ์์ ๋ถ๋ฆฌํด์ผ ํฉ๋๋ค.
๋ฌธ์ ๋ ๋๊ธฐ์ ์ ๋์์ ์ค ๋ ๋ญ๊ฐ๋ฅผ ๋นจ๋ฆฌ ๊ตฌํํ์ง ๋ชปํ๋ค๋ ์ ์ด๋ค. ๊ทธ๋ค์ OKmeter๋ฅผ ๋นจ๋ฆฌ ๊ตฌ์ ํ ์ ์์ต๋๋ค. ์๋ง๋ ๊ทธ๋ค์ XNUMX๊ฐ์ ์์ ๊ทธ๊ฒ์ ์ด ๊ฒ์ ๋๋ค. ์ผ๋ถ ํจํค์ง๋ ์ ์ํ๊ฒ ๋ฐฐ์กํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์๋ฌด๊ฒ๋ ์ค์นํ ํ์๊ฐ ์๋ ํน๋ณํ ๋๊ตฌ๊ฐ ํ์ํ๋ค๋ ์์ด๋์ด๋ฅผ ๋ด๋์์ต๋๋ค. ์ฆ, ํ๋ก๋์ ํ๊ฒฝ์์๋ ์๋ฌด๊ฒ๋ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค. ๋ ธํธ๋ถ์ ์ค์นํ๊ฑฐ๋ ์คํํ ๊ด์ฐฐ ์๋ฒ์ ์ค์นํ์ธ์. ๊ทธ๋ฆฌ๊ณ ์ด์ ์ฒด์ , ํ์ผ ์์คํ , Postgres ์์ฒด ๋ฑ ๋ง์ ๊ฒ์ ๋ถ์ํ์ฌ ํ๋ก๋์ ์์ ์ง์ ์คํํ ์ ์๊ณ ์๋ฌด ๊ฒ๋ ์คํจํ์ง ์๋ ๊ฐ๋จํ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๊ฒ์ Postgres-checkup์ด๋ผ๊ณ ๋ถ๋ ์ต๋๋ค. ์ํ์ ์ผ๋ก๋ ์ ๊ธฐ์ ์ธ ๊ฑด๊ฐ๊ฒ์ง์ ๋๋ค. ์๋์ฐจ๋ฅผ ์ฃผ์ ๋ก ํ๋ค๋ฉด ์ ์ง๋ณด์์ ๋น์ทํฉ๋๋ค. ๋ธ๋๋์ ๋ฐ๋ผ ์๋์ฐจ ์ ๋น๋ XNUMX๊ฐ์ ๋๋ XNUMX๋ ์ ํ ๋ฒ์ฉ ์ค์๋ฉ๋๋ค. ๊ธฐ์ง ์ ์ง๋ณด์ ์ ๋ฌด๋ฅผ ๋ด๋นํ์๋์? ์ฆ, ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ธต ์กฐ์ฌ๋ฅผ ํ์๋์? ๋ฐ๋์ ์ด๋ฃจ์ด์ ธ์ผ ํฉ๋๋ค. ๋ฐฑ์ ์ ํ ๋ค์ ์ ๊ฒ์ ์ํํ๋ฉด ๊ทธ๋ค์ง ์ค์ํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์๊ฒ๋ ๊ทธ๋ฌํ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ๋ถ๊ณผ XNUMX๊ฐ์ ์ ๋ ์ ๋ถํฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฑ์ฅํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ ์์ง ์ด๋ฆฌ์ง๋ง ๊ฑฐ๊ธฐ์๋ ๋ง์ ๊ฒ์ด ์์ต๋๋ค.
๊ฐ์ฅ "์ํฅ๋ ฅ ์๋" ์ฟผ๋ฆฌ ๊ทธ๋ฃน ์์ง - Postgres-checkup์์ K003 ๋ณด๊ณ
๊ทธ๋ฆฌ๊ณ ๋ณด๊ณ ์ K๊ฐ ์์ต๋๋ค. ์ง๊ธ๊น์ง ์ธ ๊ฐ์ ๋ณด๊ณ ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฐ ๋ณด๊ณ ์ K003์ด ์์ต๋๋ค. total_time๋ณ๋ก ์ ๋ ฌ๋ pg_stat_statements์ ์๋จ์ด ์์ต๋๋ค.
์์ฒญ ๊ทธ๋ฃน์ total_time๋ณ๋ก ์ ๋ ฌํ๋ฉด ๋งจ ์์ ์์คํ ์ ๊ฐ์ฅ ๋ง์ด ๋ก๋ํ๋ ๊ทธ๋ฃน, ์ฆ ๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์๋นํ๋ ๊ทธ๋ฃน์ด ํ์๋ฉ๋๋ค. ์ฟผ๋ฆฌ ๊ทธ๋ฃน ์ด๋ฆ์ ์ง์ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ ๋ ์ด์ ์์ฒญ์ด ์๋๋ผ ์์ฒญ ๊ทธ๋ฃน์ ๋๋ค. ์ฆ, ์ถ์ํ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ ์๋๋ก ์ต์ ํํ๋ฉด ๋ฆฌ์์ค๊ฐ ์ค์ด๋ค๊ณ ์ ๊ทธ๋ ์ด๋๊ฐ ํ์ํ ์๊ฐ์ด ์ง์ฐ๋ฉ๋๋ค. ์ด๊ฒ์ ๋์ ์ ์ฝํ๋ ์์ฃผ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด์ฉ๋ฉด ์ด๊ฒ์ ์ฌ์ฉ์๋ฅผ ๋๋ณด๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋ ์๋ ์์ต๋๋ค. ๋๋ฌผ์ง๋ง ์ฌ๋์ด 15์ด๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋งค์ฐ ์ง์ฆ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ์ฒด์ ์ผ๋ก๋ ๋๋ฌด ๋๋ฌผ์ด์ ๋ณผ ์ ์์ง๋ง ์ฐ๋ฆฌ๋ ์์์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
์ด ํ ์ด๋ธ์์๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์? ์ฐ๋ฆฌ๋ ๋ ์ฅ์ ์ค๋ ์ท์ ์ฐ์์ต๋๋ค. Postgres_checkup์ ์ด ์๊ฐ, ํธ์ถ, ํ, shared_blks_read ๋ฑ ๊ฐ ์ธก์ ํญ๋ชฉ์ ๋ํ ๋ธํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค. ๋ธํ๊ฐ ๊ณ์ฐ๋์์ต๋๋ค. pg_stat_statements์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ์ธ์ ์ฌ์ค์ ๋์๋์ง ๊ธฐ์ตํ์ง ๋ชปํ๋ค๋ ๊ฒ์ ๋๋ค. pg_stat_database๊ฐ ๊ธฐ์ตํ๋ฉด pg_stat_statements๋ ๊ธฐ์ตํ์ง ์์ต๋๋ค. 1์ด๋ผ๋ ์ซ์๊ฐ ์๋ค๋ ๊ฒ์ ์ ์ ์์ง๋ง ์ฐ๋ฆฌ๋ ์ด๋์ ์ธ์๋์ง ๋ชจ๋ฆ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์๋ ๋ ๊ฐ์ ์ค๋ ์ท์ด ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ธํ๋ 56์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๋งค์ฐ ์งง์ ๊ฐ๊ฒฉ์ ๋๋ค. total_time์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ตฌ๋ณํ ์ ์์ต๋๋ค. ์ฆ, ๋ชจ๋ ์ธก์ ํญ๋ชฉ์ ๊ธฐ๊ฐ๋ณ๋ก ๋๋๋๋ค. ๊ฐ ์งํ๋ฅผ ๊ธฐ๊ฐ์ผ๋ก ๋๋๋ฉด ์ด๋น ํธ์ถ ์๊ฐ ํ์๋ฉ๋๋ค.
๋ค์์ผ๋ก ์ด๋น total_time์ ์ ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ธก์ ํญ๋ชฉ์ ๋๋ค. ์ด๋ ์ด๋น ์ด ๋จ์๋ก ์ธก์ ๋ฉ๋๋ค. ์ฆ, ์์คํ ์ด ์ด๋น ์ด ์์ฒญ ๊ทธ๋ฃน์ ์คํํ๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ(์ด)์ ๋๋ค. ๊ฑฐ๊ธฐ์ ์ด๋น XNUMX์ด ์ด์์ด ๋ณด์ธ๋ค๋ฉด ์ฝ์ด๋ฅผ XNUMX๊ฐ ์ด์ ์ฃผ์ด์ผ ํ๋ค๋ ์๋ฏธ์ ๋๋ค. ์ด๊ฒ์ ๋งค์ฐ ์ข์ ์งํ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ด ์น๊ตฌ์๊ฒ๋ ์ต์ํ XNUMX๊ฐ์ ์ฝ์ด๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ดํดํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ์ฐ๋ฆฌ์ ๋ ธํ์ฐ์ ๋๋ค. ์ด๋์๋ ์ด๋ฐ ๊ฒ์ ๋ณธ ์ ์ด ์์ต๋๋ค. ์ฐธ๊ณ ํ์ธ์ - ์ด๊ฒ์ ๋งค์ฐ ๊ฐ๋จํ ๊ฒ์ ๋๋ค - ์ด๋น 100์ด์ ๋๋ค. ๋๋ก๋ CPU๊ฐ XNUMX%์ผ ๋ ์ด๋น XNUMX๋ถ, ์ฆ ์ด ์์ฒญ์๋ง XNUMX๋ถ์ ์๋นํ ๊ฒ์ ๋๋ค.
๋ค์์ผ๋ก ์ด๋น ํ์ ํ์ธํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ๋ฐํํ ์ด๋น ํ ์๋ฅผ ์๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํฅ๋ฏธ๋ก์ด ๊ฒ๋ ์์ต๋๋ค. shared_buffers ์์ฒด์์ ์ด๋น ์ฝ๋ shared_buffers ์์ ๋๋ค. ์กฐํ์๋ ์ด๋ฏธ ์์๊ณ ์ด์ ์ฒด์ ์บ์๋ ๋์คํฌ์์ ํ์ ๊ฐ์ ธ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ต์ ์ ๋น ๋ฅด๋ฉฐ ๋ ๋ฒ์งธ ์ต์ ์ ์ํฉ์ ๋ฐ๋ผ ๋น ๋ฅด๊ฑฐ๋ ๋น ๋ฅด์ง ์์ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ฒ์งธ ์ฐจ๋ณํ ๋ฐฉ๋ฒ์ ์ด ๊ทธ๋ฃน์ ์์ฒญ ์๋ฅผ ๋๋๋ ๊ฒ์ ๋๋ค. ๋ ๋ฒ์งธ ์ด์๋ ํญ์ ์ฟผ๋ฆฌ๋น ํ๋์ ์ฟผ๋ฆฌ๊ฐ ๊ตฌ๋ถ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํฅ๋ฏธ๋ก์ด ์ ์ ์ด ์์ฒญ์ ๋ช ๋ฐ๋ฆฌ์ด๊ฐ ๊ฑธ๋ ธ๋์ง์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด ์ฟผ๋ฆฌ๊ฐ ํ๊ท ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์๊ณ ์์ต๋๋ค. ๊ฐ ์์ฒญ์๋ 101๋ฐ๋ฆฌ์ด๊ฐ ํ์ํ์ต๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ดํดํด์ผ ํ ์ ํต์ ์ธ ์ธก์ ๊ธฐ์ค์ ๋๋ค.
๊ฐ ์ฟผ๋ฆฌ๋ ํ๊ท ์ ์ผ๋ก ๋ช ๊ฐ์ ํ์ ๋ฐํํ์ต๋๊น? ์ฐ๋ฆฌ๋ ์ด ๊ทธ๋ฃน์ด 8๊ฐ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋ด ๋๋ค. ํ๊ท ์ ์ผ๋ก ์บ์์์ ๊ฐ์ ธ์ ์ฝ์ ์์ ๋๋ค. ๋ชจ๋ ๊ฒ์ด ํ๋ฅญํ๊ฒ ์บ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๊ทธ๋ฃน์ ๊ฒฌ๊ณ ํ ํํธ์.
๊ทธ๋ฆฌ๊ณ ๊ฐ ์ค์ ๋ค ๋ฒ์งธ ํ์ ๋ฌธ์์ด์ ์ ์ฒด์ ๋ช ํผ์ผํธ์ธ์ง๋ฅผ ๋ํ๋ ๋๋ค. ์ ํ๊ฐ ์์ต๋๋ค. 1์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉด ์ด ๊ทธ๋ฃน์ด ์ด๋ค ๊ธฐ์ฌ๋ฅผ ํ๋์ง ์ดํดํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ๊ทธ๋ฃน์ ๊ธฐ์ฌ๋๊ฐ 000% ๋ฏธ๋ง์์ ์ ์ ์์ต๋๋ค. ์ฆ, ๋๋ฌด ๋๋ ค์ ์ ์ฒด ๊ทธ๋ฆผ์์ ๋ณผ ์ ์์ต๋๋ค. ๋ ๋ฒ์งธ ๊ทธ๋ฃน์ ํตํ ์๊ธ์ด 000%์ ๋๋ค. ์ฆ, ์ ์ฒด ํตํ์ 0,01%๊ฐ ๋ ๋ฒ์งธ ๊ทธ๋ฃน์ ๋๋ค.
Total_time๋ ํฅ๋ฏธ๋กญ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฒซ ๋ฒ์งธ ์์ฒญ ๊ทธ๋ฃน์ ์ด ์์ ์๊ฐ์ 14%๋ฅผ ์๋นํ์ต๋๋ค. ๋ ๋ฒ์งธ - 11% ๋ฑ
์์ธํ ์ค๋ช ํ์ง๋ ์๊ฒ ์ง๋ง ๋ฏธ๋ฌํ ๋ถ๋ถ์ด ์์ต๋๋ค. ๋น๊ตํ ๋ ์ค๋ ์ท์ด ๋ถ๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋จ์ ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค. ์ฆ, ์ผ๋ถ ์์ฒญ์ด ๋๋ฝ๋์ด ๋ ๋ฒ์งธ ์์ฒญ์ ๋ ์ด์ ์กด์ฌํ ์ ์๊ณ ์ผ๋ถ ์๋ก์ด ์์ฒญ์ด ๋ํ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์์ ์ค๋ฅ๋ฅผ ๊ณ์ฐํฉ๋๋ค. 0์ด ๋ณด์ด๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ค๋ฅ๊ฐ ์์ต๋๋ค. ์ค๋ฅ์จ์ด ์ต๋ 20%์ด๋ฉด ๊ด์ฐฎ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ฃผ์ ๋ก ๋์๊ฐ๋๋ค. ์ฐ๋ฆฌ๋ ์ํฌ๋ก๋๋ฅผ ์ ์ํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์์์ ์๋๋ก ๊ฐ์ ธ์ 80% ๋๋ 90%์ ๋๋ฌํ ๋๊น์ง ์งํํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ 10-20 ๊ทธ๋ฃน์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ pgbench์ฉ ํ์ผ์ ๋ง๋ญ๋๋ค. ์ฐ๋ฆฌ๋ ๊ฑฐ๊ธฐ์์ ๋ฌด์์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ถํํ๊ฒ๋ ์ด๊ฒ์ด ํจ๊ณผ๊ฐ ์์ ๋๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Postgres 12์์๋ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐํ๊ฐ ๋ ๋ง์์ง ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก total_time์ 80-90%๋ฅผ ์ป์ต๋๋ค. โ@โ ๋ค์์๋ ๋ฌด์์ ๋ฃ์ด์ผ ํ๋์? ์ฐ๋ฆฌ๋ ์ ํ๋ฅผ ๋ณด๊ณ ์ผ๋ง๋ ๋ง์ ๊ด์ฌ์ด ์๋์ง ์ดํด๋ณด๊ณ ์ฌ๊ธฐ์ ๋ง์ ๊ด์ฌ์ด ์๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ์ด ๋น์จ์ ํตํด ๊ฐ ํ์ผ์ ๊ท ํ์ ๋ง์ถ๋ ๋ฐฉ๋ฒ์ ์ดํดํ ์ ์์ต๋๋ค. ๊ทธ ํ ์ฐ๋ฆฌ๋ pgbench๋ฅผ ์ฌ์ฉํ๊ณ ์์ ์ ๋ค์ด๊ฐ๋๋ค.
K001๊ณผ K002๋ ์์ต๋๋ค.
K001์ 75๊ฐ์ ํ์ ๋ฌธ์์ด์ด ์๋ ํ๋์ ํฐ ๋ฌธ์์ด์ ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ ์ ์ฒด ๋ถํ์ ํน์ง์ ๋๋ค. ๋ ๋ฒ์งธ ์ด๊ณผ ๋ ๋ฒ์งธ ํ์ ํ์ ์ฐธ์กฐํ์ธ์. ์ด๋น ์ฝ 10์ด, ์ฆ ์ฝ์ด๊ฐ XNUMX๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ฉ๋์ ์ฝ XNUMX%๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ด๋ ๊ฒ ์๋ํ ๊ฒ์ ๋๋ค. ์ฝ์ด๊ฐ XNUMX๊ฐ๋ผ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ฐจ๋ถํ ๊ฒ์ ๋๋ค. ์ด๋ฐ ์์ผ๋ก ์ฐ๋ฆฌ๋ ์์์ ํ๊ฐํ ์ ์์ต๋๋ค.
K002๋ ๋ด๊ฐ ์ฟผ๋ฆฌ ํด๋์ค(์: SELECT, INSERT, UPDATE, DELETE)๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ธ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก SELECT FOR UPDATE๋ฅผ ์ํํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์์ SELECT๋ ์ผ๋ฐ ๋ ์(๋ชจ๋ ํธ์ถ์ 82%์ด์ง๋ง ๋์์ total_time์์๋ 74%)๋ผ๋ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์์ต๋๋ค. ์ฆ, ๋ง์ด ํธ์ถ๋์ง๋ง ๋ฆฌ์์ค๋ฅผ ๋ ์๋นํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ "์ฌ๋ฐ๋ฅธ shared_buffers๋ฅผ ์ด๋ป๊ฒ ์ ํํ ์ ์์ต๋๊น?"๋ผ๋ ์ง๋ฌธ์ผ๋ก ๋์๊ฐ๋๋ค. ๋๋ ๋๋ถ๋ถ์ ๋ฒค์น๋งํฌ๊ฐ ์์ด๋์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค๋ ๊ฒ์ ๊ด์ฐฐํ์ต๋๋ค. ์ฒ๋ฆฌ๋์ด ์ผ๋ง๋ ๋ ์ง, ์ฆ ์ฒ๋ฆฌ๋์ด ์ผ๋ง๋ ๋ ์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก TPS ๋๋ QPS๋ก ์ธก์ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ํ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ฐจ์์ ์ด๋น ๊ฐ๋ฅํ ๋ง์ ํธ๋์ญ์ ์ ์ง๋ด๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค. ์ ํ์ ๊ฒฝ์ฐ ์ ํํ ์ด๋น 311์ ๋๋ค.
๊ทธ๋ฌ๋ ๋๊ตฌ๋ ์ ์๋ ฅ์ผ๋ก ์ถ๊ทผํ๊ณ ์ง์ผ๋ก ๋์๊ฐ๋ ์ฌ๋์ ์์ต๋๋ค. ์ด๊ฒ์ ์ด๋ฆฌ์์ ์ผ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์ผํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ต๊ณ ์๋๋ก ์ด์ ํ ํ์๊ฐ ์๊ณ , ๋๊ตฌ๋ ๊ทธ๋ ๊ฒ ํ์ง ์์ต๋๋ค. CPU๊ฐ 100%์ธ ํ๋ก๋์ ์๋ ์๋ฌด๋ ์ด์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ด ์๋ ์์ง๋ง ์ด๊ฒ์ ์ข์ง ์์ต๋๋ค.
์์ด๋์ด๋ ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฉ๋์ 20%, ๋ฐ๋์งํ๊ฒ๋ 50% ์ดํ๋ก ์ด์ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค๋ ์ฌ์ฉ์๋ฅผ ์ํ ์๋ต ์๊ฐ์ ์ต์ ํํ๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค. ์ฆ, ์กฐ๊ฑด๋ถ๋ก 20% ์๋์์ ์ต์ ์ง์ฐ ์๊ฐ์ด ์๋๋ก ์์ก์ด๋ฅผ ๋๋ ค์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์คํ์์๋ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ์์ด๋์ด์ ๋๋ค.
๋ง์ง๋ง์ผ๋ก ๊ถ์ฅ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ตฌ์ค์ ๊ผญ ํด๋ณด์ธ์.
- ๊ฐ๋ฅํ๋ค๋ฉด ์ ์ ๋์ ํผ์ณ์ง ์ ์๋๋ก ์์ฒญ์ ๋ฐ๋ผ ์ํํ์ญ์์ค. ํ๋ ์ดํ๊ณ ๋ฒ๋ฆฌ์ญ์์ค. ๊ตฌ๋ฆ์ด ์๋ค๋ฉด ์ด๋ ๋งํ ํ์๋ ์์ต๋๋ค. ์ฆ, ์ ์๋ ๊ฒ์ด ๋ง์ต๋๋ค.
- ํธ๊ธฐ์ฌ์ ๊ฐ์ง์ธ์. ๊ทธ๋ฆฌ๊ณ ๋ญ๊ฐ ์๋ชป๋ ๊ฒฝ์ฐ ์คํ์ ํตํด ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํ์ญ์์ค. ๋ธ์๋ ๊ธฐ์ง๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํ๋๋ก ์ค์ค๋ก ํ๋ จํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ต์ ์๋ต ์๊ฐ์ ๋ชฉํ๋ก ํ์ธ์.
- ๊ทธ๋ฆฌ๊ณ Postgres ์์ค๋ฅผ ๋๋ ค์ํ์ง ๋ง์ญ์์ค. ์์ค ์์ ์ ํ ๋๋ ์์ด๋ฅผ ์์์ผ ํฉ๋๋ค. ๊ฑฐ๊ธฐ์๋ ๋ง์ ์๊ฒฌ์ด ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ๊ฑฐ๊ธฐ์ ์ค๋ช ๋์ด ์์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ ๊ธฐ์ ์ผ๋ก, ์ ์ด๋ XNUMX๊ฐ์์ ํ ๋ฒ์ฉ, ์๋์ผ๋ก ๋๋ Postgres ์ ๊ฒ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ฅผ ์ ๊ฒํ์ญ์์ค.
์ง๋ฌธ
์ ๋ง ๊ฐ์ฌํฉ๋๋ค! ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ๊ฒ์ ๋๋ค.
๋ ์กฐ๊ฐ.
๋ค, ๋ ์กฐ๊ฐ์ด์์. ๋๋ง ์ ์ดํด๊ฐ ์ ๋์ด์. Nancy์ ์ ๊ฐ ์์ ํ ๋ ํ๋์ ๋งค๊ฐ๋ณ์๋ง ์กฐ์ ํ ์ ์์ต๋๊น, ์๋๋ฉด ์ ์ฒด ๊ทธ๋ฃน์ ์กฐ์ ํ ์ ์์ต๋๊น?
๋ธํ ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ํ ๋ฒ์ ์ํ๋๋งํผ ๊ฑฐ๊ธฐ๋ก ๋๋ฆด ์ ์์ต๋๋ค. ํ์ง๋ง ๋ง์ ๊ฒ์ ๋ฐ๊พธ๋ฉด ์๋ชป๋ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์๋ค๋ ์ ์ ์ดํดํด์ผ ํฉ๋๋ค.
์. ๋ด๊ฐ ์ ๋ฌผ์ด๋ดค๋์? ๋งค๊ฐ๋ณ์๊ฐ ํ๋๋ง ์์ผ๋ฉด ์คํ์ ์งํํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๊ฒ์ ์กฐ์ด๊ณ ์ด๋ป๊ฒ ์๋ํ๋์ง๋ณด์ญ์์ค. ๋๋ ๊ทธ๋ฅผ ์ซ์๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค์ ์์ ์ ์์ํฉ๋๋ค.
๋์์ ์กฐ์ผ ์๋ ์์ง๋ง ๋ฌผ๋ก ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ํ์ง๋ง ํ๋์ ์์ด๋์ด๋ฅผ ํ ์คํธํด ๋ณด๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์ข์ ์๊ฐ์ ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋งค์ฐ ๊ฐ๊น์ด ์ํฉ์ ์ฒํด ์์์ต๋๋ค. ๋ ๊ฐ์ง ๊ตฌ์ฑ์ด ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ ํฐ ์ฐจ์ด๊ฐ ์๋์ง ์ดํดํ ์ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐจ์ด์ ์ด ๋ฌด์์ธ์ง ์ผ๊ด๋๊ฒ ์ดํดํ๊ณ ์ฐพ์ผ๋ ค๋ฉด ์ด๋ถ๋ฒ์ ์ฌ์ฉํด์ผํ๋ค๋ ์์ด๋์ด๊ฐ ์๊ฒผ์ต๋๋ค. ์ฆ์ ๋งค๊ฐ๋ณ์์ ์ ๋ฐ์ ๋์ผํ๊ฒ ๋ง๋ ๋ค์ XNUMX/XNUMX ๋ฑ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ์ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๋ฌธ์ด ํ๋ ๋ ์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ ์ ๊ณ ๋ฐ์ ์ค์ ๋๋ค. ๋ฌธ์๋ ์ด๋ฏธ ์ค๋น๋์ด ์์ต๋๋ค. ์์ธํ ์ค๋ช ์ด ์์ต๋๊น?
ํน๋ณํ ๋งค๊ฐ๋ณ์ ์ค๋ช ์ ๋ํ ๋งํฌ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ ๊ธฐ์์ด. ํ์ง๋ง ์์ง์ ์๋ ๊ฒ์ด ๋ง์ต๋๋ค. ๋๋ ๊ฐ์ ์๊ฐ์ ๊ฐ์ง ์ฌ๋๋ค์ ์ฐพ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณต์ฐํ ๋ ์ฐพ์์. ์ด๊ฒ์ ๋งค์ฐ ๋ฉ์ง๋ค. ๋๊ตฐ๊ฐ ์ด๋ฏธ ๋์ ํจ๊ป ์ผํ๊ณ ์๊ณ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ณณ์์ ๋ฌด์ธ๊ฐ๋ฅผ ๋์๊ณ ๋ญ๊ฐ๋ฅผํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ฃผ์ ์ ๊ด์ฌ์ด ์๋ค๋ฉด ๋ฌด์์ด ๋น ์ก๋์ง ํผ๋๋ฐฑ์ ์ฃผ์ธ์.
์คํ์ค์ ๊ตฌ์ถํ๊ณ ๋๋ฉด ์๋ง๋ ํผ๋๋ฐฑ์ด ์์ ๊ฒ์ ๋๋ค. ์ด๋ ๋ณด์. ๊ฐ์ฌํฉ๋๋ค!
์๋ ํ์ธ์! ์ ๊ณ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์๋ง์กด ์ง์์ด ์๋ค๋ ๊ฑธ ๋ดค์ต๋๋ค. GSP๋ฅผ ์ง์ํ ๊ณํ์ด ์๋์?
์ข์ ์ง๋ฌธ. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์์ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ์ ๋์ ์ ์ฝํ๊ณ ์ถ์ด์ ๋๊ฒฐํ์ต๋๋ค. ์ฆ, localhost์์ ์คํ์ ์ฌ์ฉํ๋ ์ง์์ด ์์ต๋๋ค. ์ธ์คํด์ค๋ฅผ ์ง์ ์์ฑํ๊ณ ๋ก์ปฌ์์ ์์ ํ ์ ์์ต๋๋ค. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ํ๋ ์ผ์ ๋๋ค. ์ ๋ Getlab, GSP์์ ์ด ์์ ์ ์ํํฉ๋๋ค. ํ์ง๋ง Google์๋ ์ ๋ ดํ ์๋ฆฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ง ๊ทธ๋ฌํ ์กฐ์ ์ ์ํํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๋ค. ์๋ค ??? ๊ฒฝ์ฐ๊ฐ ์์ง๋ง ์ ํ์ด ์์ต๋๋ค. ์ฒซ์งธ, ๊ทธ๋ค์ ํญ์ 70% ํ ์ธ๋ง ํ๊ณ ๊ฑฐ๊ธฐ ๊ฐ๊ฒฉ์ผ๋ก๋ ๋ ์ ์์ต๋๋ค. ํ์ฅ์์๋ ์ซ๊ฒจ๋ ๊ฐ๋ฅ์ฑ์ ์ค์ด๊ธฐ ์ํด ๊ฐ๊ฒฉ์ 5~10% ์ธ์ํฉ๋๋ค. ์ฆ, ์๋ฆฌ๋ฅผ ์ ์ฝํ์ง๋ง ์ธ์ ๋ ์ง ๊ทธ ์๋ฆฌ๋ฅผ ๋นผ์๊ธธ ์ ์์ต๋๋ค. ๋จ๋ค๋ณด๋ค ์กฐ๊ธ ๋ ๋๊ฒ ์ ์ฐฐํ๋ฉด ๋์ค์ ์ฃฝ๊ฒ ๋ฉ๋๋ค. Google์ ์์ ํ ๋ค๋ฅธ ์ธ๋ถ ์ฌํญ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ค๋ฅธ ๋งค์ฐ ๋์ ์ ํ์ด ์์ต๋๋ค. ๊ทธ๋ค์ 24์๊ฐ ๋์๋ง ์ด์๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ก๋ 5์ผ ๋์ ์คํ์ ์งํํ๊ณ ์ถ์ ๋๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์์ ์ ๋ถ๋ถ์ ์ผ๋ก ์ํํ ์ ์์ผ๋ฉฐ ๋๋ก๋ ๋ถ๋ถ์ด ๋ช ๋ฌ ๋์ ์ง์๋ฉ๋๋ค.
์๋ ํ์ธ์! ์ ๊ณ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๊ฒ์ง์ ์ธ๊ธํ์ จ๋๋ฐ์. stat_statements ์ค๋ฅ๋ ์ด๋ป๊ฒ ๊ณ์ฐํ๋์?
์์ฃผ ์ข์ ์ง๋ฌธ์ ๋๋ค. ์์ฃผ ์์ธํ๊ฒ ๋ณด์ฌ๋๋ฆฌ๊ณ ๋ง์๋๋ฆด ์ ์์ต๋๋ค. ๊ฐ๋จํ ๋งํด์, ์์ฒญ ๊ทธ๋ฃน ์ธํธ๊ฐ ์ด๋ป๊ฒ ๋ ๋ค๋๋์ง ์ดํด๋ด ๋๋ค. ์ฆ, ์ผ๋ง๋ ๋ง์ ์๊ฐ ์ฌ๋ผ์ก๊ณ ์ผ๋ง๋ ๋ง์ ์๋ก์ด ๊ทธ๋ฃน์ด ๋ํ๋ฌ๋์ง ์ดํด๋ด ๋๋ค. ๊ทธ๋ฐ ๋ค์ total_time๊ณผ ํธ์ถ์ด๋ผ๋ ๋ ๊ฐ์ง ์ธก์ ํญ๋ชฉ์ ์ดํด๋ณด๋ฏ๋ก ๋ ๊ฐ์ง ์ค๋ฅ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถ๋๊ทธ๋ฃน์ ๊ธฐ์ฌ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ ๊ฐ์ ํ์ ๊ทธ๋ฃน์ด ์์ต๋๋ค: ๋ ๋ ์ฌ๋๊ณผ ๋์ฐฉํ ์ฌ๋. ์ ์ฒด ๊ทธ๋ฆผ์ ๋ํ ๊ทธ๋ค์ ๊ธฐ์ฌ๊ฐ ๋ฌด์์ธ์ง ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
์ค๋ ์ท ์ฌ์ด์ XNUMX~XNUMX๋ฒ์ ๊ทธ ๊ณณ์ผ๋ก ๋์๊ฐ๊น ๋๋ ต์ง ์์ผ์ ๊ฐ์?
์ฆ, ๋ค์ ๋ฑ๋กํ์ต๋๊น?
์๋ฅผ ๋ค์ด, ์ด ์์ฒญ์ ์ด๋ฏธ ํ ๋ฒ ์ ์ ๋ ํ ๋ค์ ์ ์ ๋์์ผ๋ฉฐ, ๋ค์ ์์ ๋ค์ ์ ์ ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ๋ญ๊ฐ๋ฅผ ๊ณ์ฐํ๋๋ฐ ๊ทธ ๋ชจ๋ ๊ฒ์ด ์ด๋์ ์์ต๋๊น?
์ข์ ์ง๋ฌธ์ ๋๋ค. ์ข ๋ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋๋ ๋น์ทํ ์ผ์ ํ๋ค. ๋ฌผ๋ก ๋ ๊ฐ๋จํ์ต๋๋ค. ํผ์ ํ์ด์. ํ์ง๋ง stat_statements๋ฅผ ์ฌ์ค์ ํ๊ณ , ์ค๋ ์ท ์์ ์ ํน์ ๋ถ๋ถ ๋ฏธ๋ง์ด ์๋ค๋ ๊ฒ์ ์์๋ด์ผ ํ๊ณ , ์ด๋ ์ฌ์ ํ stat_statements๊ฐ ์ผ๋ง๋ ์ถ์ ๋ ์ ์๋์ง์ ๋๋ฌํ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด ์ดํด๋ ์๋ง๋ ์๋ฌด๊ฒ๋ ๋์ฒด๋์ง ์์๋ค๋ ๊ฒ์ ๋๋ค.
์, ์.
๊ทธ๋ฌ๋ ๋๋ ๊ทธ๊ฒ์ ์์ ์ ์ผ๋ก ์ํํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
์ํ๊น๊ฒ๋ ๊ฑฐ๊ธฐ์์ ์ฟผ๋ฆฌ ํ ์คํธ๋ฅผ ์ฌ์ฉํ๋์ง, ์๋๋ฉด pg_stat_statements์ ํจ๊ป queryid๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ๊ฒ์ ์ง์คํ๋์ง ์ ํํ ๊ธฐ์ต์ด ๋์ง ์์ต๋๋ค. queryid์ ์ด์ ์ ๋ง์ถ๋ฉด ์ด๋ก ์ ์ผ๋ก๋ ๋น์ทํ ํญ๋ชฉ์ ๋น๊ตํ๊ฒ ๋ฉ๋๋ค.
์๋์, ๊ทธ๋ ์ค๋ ์ท ์ฌ์ด์ ์ฌ๋ฌ ๋ฒ ๊ฐ์ ๋ก ๋๊ฐ๋ค๊ฐ ๋ค์ ์ฌ ์ ์์ต๋๋ค.
๊ฐ์ ์์ด๋๋ก?
๋ค.
์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์ฐ๊ตฌํ ๊ฒ์ ๋๋ค. ์ข์ ์ง๋ฌธ. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ฐ๊ตฌํด์ผ ํฉ๋๋ค. ํ์ง๋ง ํ์ฌ๋ก์๋ ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ๊ฒ์ 0์ผ๋ก ์ฐ์ฌ ์์ต๋๋ค...
๋ฌผ๋ก ์ด๊ฒ์ ๋๋ฌธ ๊ฒฝ์ฐ์ง๋ง stat_statemetns๊ฐ ๊ทธ๊ณณ์ผ๋ก ์ฎ๊ฒจ์ง ์ ์๋ค๋ ์ฌ์ค์ ์๊ณ ์ถฉ๊ฒฉ์ ๋ฐ์์ต๋๋ค.
Pg_stat_statements์๋ ๋ง์ ๊ฒ๋ค์ด ์์ ์ ์์ต๋๋ค. track_utility = on์ด๋ฉด ์ธํธ๋ ์ถ์ ๋๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋ค, ๋ฌผ๋ก ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ Java hibernate๊ฐ ์๋ ๊ฒฝ์ฐ ํด์ ํ ์ด๋ธ์ด ๊ฑฐ๊ธฐ์ ์์นํ๊ธฐ ์์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋งค์ฐ ๋ก๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋์๋ง์ 50-100๊ฐ์ ๊ทธ๋ฃน์ด ์์ฑ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ฒ์ด ๋ค์ ์์ ์ ์ ๋๋ค. ์ด์ ๋์ฒํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ pg_stat_statements.max๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ ๋๋ค.
์, ํ์ง๋ง ์ผ๋ง์ธ์ง ์์์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ๋ ์ฐ๋ฆฌ๋ ๊ทธ๋ฅผ ์ง์ผ๋ด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ ๋ด๊ฐํ๋ ์ผ์ด์ผ. ์ฆ, pg_stat_statements.max๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ ์ท ๋น์์๋ 70%์ ๋๋ฌํ์ง ๋ชปํ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ข์์, ๊ทธ๋ผ ์ฐ๋ฆฌ๋ ์๋ฌด๊ฒ๋ ์์ง ์์์ต๋๋ค. ์ฌ์ค์ ํฉ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ค์ ์ ์ฅํฉ๋๋ค. ๋ค์ ์ค๋ ์ท์ด 70๊ฐ ๋ฏธ๋ง์ด๋ผ๋ฉด ๋ค์๋ ์๋ฌด ๊ฒ๋ ์์ง ์์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์. ํ์ฌ ๊ธฐ๋ณธ๊ฐ์ 5์ด๋ฉฐ ๋ง์ ์ฌ๋๋ค์๊ฒ ์ด ์ ๋๋ฉด ์ถฉ๋ถํฉ๋๋ค.
๋ณดํต ๊ทธ๋ ์ต๋๋ค.
๋น๋์ค :
์ถ์ ์ ๋ฅผ ๋์ ํ์ฌ Postgres์ ๊ธฐ๋ฐ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์๊ณ ํด๋น ๋ฐ์ดํฐ๊ฐ ํ
์คํธ ํ๊ฒฝ์ ํฌํจ๋ ์ ์๋ ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ๋ง๋ถ์ด๊ฒ ์ต๋๋ค.
์ถ์ฒ : habr.com