ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿ“Œ PostgreSQL๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ด๋ก ๊ณผ ์‹ค์Šต

5.2 PostgreSQL ์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ์ „๋žต

PostgreSQL์„ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•˜๋ ค๋ฉด ์ง€์†์ ์ธ ์œ ์ง€๋ณด์ˆ˜์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”, ์žฅ์•  ๋Œ€์‘ ์ „๋žต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” PostgreSQL ์šด์˜ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ํ•ต์‹ฌ ์œ ์ง€๋ณด์ˆ˜ ์ „๋žต๊ณผ ์žฅ์•  ๋Œ€์‘ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.


5.2.1 PostgreSQL ์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๊ฐœ์š”

PostgreSQL์„ ์šด์˜ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ฃผ์š” ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

โœ… ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ๊ด€๋ฆฌ (์ •๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ๋ฐฑ์—…)
โœ… ์„œ๋ฒ„ ์„ฑ๋Šฅ ์ตœ์ ํ™” (postgresql.conf ํŠœ๋‹)
โœ… ์ž๋™ํ™”๋œ ๋ฐ์ดํ„ฐ ์œ ์ง€๋ณด์ˆ˜ (VACUUM, ANALYZE)
โœ… ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์žฅ์•  ๋Œ€์‘ (pg_stat_statements, Prometheus, Grafana)
โœ… ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ ๋ฐ ํŒจ์น˜ ๊ด€๋ฆฌ

๊ฐ ํ•ญ๋ชฉ์„ ์ƒ์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


5.2.2 ์ •๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ์ „๋žต

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋น ๋ฅธ ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด ์ •๊ธฐ์ ์ธ ๋ฐฑ์—…์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
PostgreSQL์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฑ์—… ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ๋ฐฑ์—… ์ „๋žต ๋น„๊ต

๋ฐฑ์—… ๋ฐฉ์‹ ํŠน์ง• ๋ณต๊ตฌ ์†๋„ ์‚ฌ์šฉ ์‚ฌ๋ก€

pg_dump SQL ํŒŒ์ผ ๋˜๋Š” ์••์ถ• ๋ฐฑ์—… ๋А๋ฆผ ์†Œ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ฐฑ์—…
pg_basebackup ์ „์ฒด ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฐฑ์—… ๋น ๋ฆ„ ์šด์˜ ํ™˜๊ฒฝ ๊ธฐ๋ณธ ๋ฐฑ์—…
PITR (Point-In-Time Recovery) ํŠน์ • ์‹œ์  ๋ณต๊ตฌ ๊ฐ€๋Šฅ ๋น ๋ฆ„ ๊ธˆ์œต, ํŠธ๋žœ์žญ์…˜ ์„œ๋น„์Šค

๐Ÿ”น ์ •๊ธฐ์ ์ธ pg_basebackup ์ˆ˜ํ–‰

pg_basebackup -U postgres -D /backup/postgres -Ft -z -P

โœ… ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ฐฑ์—…์œผ๋กœ ์ „์ฒด ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

๐Ÿ”น WAL ๋กœ๊ทธ๋ฅผ ํ™œ์šฉํ•œ PITR ๋ฐฑ์—… ์„ค์ •

wal_level = replica
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'

โœ… PITR(Point-In-Time Recovery)์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์‹œ์ ์œผ๋กœ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

๐Ÿ’ก ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” pg_basebackup + PITR์„ ์กฐํ•ฉํ•˜์—ฌ ๋ฐฑ์—… ์ž๋™ํ™” ํ•„์š”


5.2.3 ์„ฑ๋Šฅ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•œ ์ž๋™ํ™” ์„ค์ • (VACUUM, ANALYZE)

PostgreSQL์€ MVCC(Multi-Version Concurrency Control) ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ด ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ(VACUUM)์™€ ํ†ต๊ณ„ ๋ถ„์„(ANALYZE)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

โœ… VACUUM๊ณผ ANALYZE์˜ ์ฐจ์ด์ 

๋ช…๋ น์–ด ๊ธฐ๋Šฅ ์‹คํ–‰ ์ฃผ๊ธฐ

VACUUM ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ ์ •๊ธฐ์ ์œผ๋กœ ์‹คํ–‰
ANALYZE ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ SELECT ์„ฑ๋Šฅ ํ–ฅ์ƒ

๐Ÿ”น AUTOVACUUM ํ™œ์„ฑํ™” ํ™•์ธ

SHOW autovacuum;

โœ… ๊ธฐ๋ณธ์ ์œผ๋กœ on ์ƒํƒœ์—ฌ์•ผ ํ•จ

๐Ÿ”น VACUUM ANALYZE ์ˆ˜๋™ ์‹คํ–‰ ์˜ˆ์ œ

VACUUM ANALYZE;

โœ… ํ…Œ์ด๋ธ”์˜ ์ •๋ฆฌ ๋ฐ ํ†ต๊ณ„ ์—…๋ฐ์ดํŠธ

๐Ÿ’ก ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ autovacuum_vacuum_scale_factor๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์ตœ์ ํ™” ๊ฐ€๋Šฅ

autovacuum_vacuum_scale_factor = 0.1

โœ… ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๋งŽ์„ ๊ฒฝ์šฐ 0.2 → 0.1๋กœ ์กฐ์ •ํ•˜์—ฌ ๋” ์ž์ฃผ ์‹คํ–‰


5.2.4 ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์„ฑ๋Šฅ ๋ถ„์„

๋ฐ˜์‘ํ˜•

PostgreSQL์—์„œ๋Š” pg_stat_statements์™€ ์™ธ๋ถ€ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด(Grafana, Prometheus)์„ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ์ฃผ์š” ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ

๋„๊ตฌ ์„ค๋ช…

pg_stat_statements ๊ฐ€์žฅ ๋А๋ฆฐ SQL ์ฟผ๋ฆฌ ๋ถ„์„
pgBadger PostgreSQL ๋กœ๊ทธ ๋ถ„์„ ๋ฐ ์„ฑ๋Šฅ ๋ฆฌํฌํŠธ
Prometheus + Grafana ์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง
pg_activity PostgreSQL์˜ htop ๋Œ€์ฒด ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ

๐Ÿ”น pg_stat_statements ํ™œ์„ฑํ™”

CREATE EXTENSION pg_stat_statements;

โœ… PostgreSQL์˜ SQL ์‹คํ–‰ ํ†ต๊ณ„๋ฅผ ์ˆ˜์ง‘

๐Ÿ”น ๊ฐ€์žฅ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ธด ์ฟผ๋ฆฌ ํ™•์ธ

SELECT query, calls, total_time
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 5;

โœ… ๊ฐ€์žฅ ๋А๋ฆฐ SQL์„ ์ฐพ์•„ ์ตœ์ ํ™” ๊ฐ€๋Šฅ

๐Ÿ’ก ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” Prometheus + Grafana๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌ์ถ• ํ•„์š”


5.2.5 ์žฅ์•  ๋Œ€์‘ ๋ฐ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ์ ˆ์ฐจ

PostgreSQL ์šด์˜ ์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์‹ ์†ํ•œ ๋Œ€์‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์ฃผ์š” ์žฅ์•  ๋Œ€์‘ ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

โœ… ์ฃผ์š” ์žฅ์•  ์œ ํ˜• ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์žฅ์•  ์œ ํ˜• ์›์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์„œ๋ฒ„ ๋‹ค์šด PostgreSQL ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ systemctl restart postgresql
๋””์Šคํฌ ์šฉ๋Ÿ‰ ๋ถ€์กฑ WAL ๋กœ๊ทธ ๋ฐ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€ VACUUM FULL, ๋กœ๊ทธ ์ •๋ฆฌ
๋А๋ฆฐ ์ฟผ๋ฆฌ ๋ฐœ์ƒ ์ธ๋ฑ์Šค ๋ถ€์žฌ, ANALYZE ๋ฏธ์‹คํ–‰ EXPLAIN ANALYZE๋กœ ์ตœ์ ํ™”
๋ฐ์ดํ„ฐ ์†์ƒ ์ž˜๋ชป๋œ DELETE, DROP ์‹คํ–‰ PITR ๋ณต๊ตฌ ์ˆ˜ํ–‰

๐Ÿ”น PostgreSQL ๊ฐ•์ œ ์ข…๋ฃŒ ํ›„ ๋ณต๊ตฌ ์ ˆ์ฐจ

pg_ctl restart -D /var/lib/postgresql/data

โœ… ๊ฐ•์ œ ์ข…๋ฃŒ๋œ PostgreSQL ์„œ๋ฒ„ ์žฌ์‹œ์ž‘

๐Ÿ”น ๋””์Šคํฌ ์šฉ๋Ÿ‰ ๋ถ€์กฑ ํ•ด๊ฒฐ (pg_wal ์ •๋ฆฌ)

rm -rf /var/lib/postgresql/pg_wal/archive/*

โœ… WAL ๋กœ๊ทธ๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ์Œ“์ด๋ฉด ์‚ญ์ œ ํ›„ ์žฌ์‹œ์ž‘

๐Ÿ”น ์†์ƒ๋œ ํ…Œ์ด๋ธ” ๋ณต๊ตฌ (pg_repack ํ™œ์šฉ)

pg_repack -U postgres -d mydb -t users

โœ… ๋ฐ์ดํ„ฐ ์†์ƒ์ด ์˜์‹ฌ๋  ๊ฒฝ์šฐ pg_repack์œผ๋กœ ํ…Œ์ด๋ธ” ์ •๋ฆฌ

๐Ÿ’ก ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์žฅ์•  ๋ฐœ์ƒ ์‹œ PITR ๋ณต๊ตฌ ๋ฐ Streaming Replication ํ™œ์šฉ ํ•„์ˆ˜


5.2.6 PostgreSQL ๋ณด์•ˆ ์œ ์ง€ ๋ฐ ์ •๊ธฐ ์—…๋ฐ์ดํŠธ

์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณด์•ˆ ํŒจ์น˜ ๋ฐ ์ •๊ธฐ์ ์ธ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

โœ… PostgreSQL ๋ณด์•ˆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

โœ… scram-sha-256 ๋˜๋Š” SSL/TLS ์ธ์ฆ ์‚ฌ์šฉ (pg_hba.conf ํ™•์ธ)
โœ… GRANT ๋ฐ REVOKE๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ตœ์†Œ ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌ
โœ… pgAudit๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ SQL ๋กœ๊ทธ ๊ธฐ๋ก (CREATE EXTENSION pgaudit;)
โœ… PostgreSQL ์ตœ์‹  ๋ฒ„์ „ ์œ ์ง€ (SELECT version(); ๋กœ ํ™•์ธ)

๐Ÿ’ก ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” PostgreSQL์˜ ๋ณด์•ˆ ํŒจ์น˜๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•จ


5.2.7 PostgreSQL ์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ํ•ต์‹ฌ ์ •๋ฆฌ

โœ… ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ์ „๋žต์„ ๊ตฌ์ถ• (pg_basebackup + PITR)
โœ… VACUUM, ANALYZE๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž๋™ ์œ ์ง€๋ณด์ˆ˜
โœ… pg_stat_statements, Prometheus, Grafana๋กœ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
โœ… ์žฅ์•  ๋ฐœ์ƒ ์‹œ pg_wal ์ •๋ฆฌ ๋ฐ pg_repack์„ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ
โœ… ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ ๋ฐ ํŒจ์น˜๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰

์ด์ œ PostgreSQL ์šด์˜ ํ™˜๊ฒฝ์„ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํ˜”์Šต๋‹ˆ๋‹ค!
๋‹ค์Œ ๊ธ€์—์„œ๋Š” PostgreSQL ์ตœ์‹  ๋™ํ–ฅ ๋ฐ ๋ฏธ๋ž˜ ์ „๋ง์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€


๐Ÿ”Ž ๋‹ค์Œ ๊ธ€ ์˜ˆ๊ณ : PostgreSQL ์ตœ์‹  ๋™ํ–ฅ ๋ฐ ๋ฏธ๋ž˜ ์ „๋ง

๐Ÿ“Œ ๋‹ค์Œ ํŽธ: 6.1 PostgreSQL ์ตœ์‹  ๋™ํ–ฅ ๋ฐ ๋ฏธ๋ž˜ ์ „๋ง


์ด์ œ PostgreSQL์˜ ์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ์ „๋žต์— ๋Œ€ํ•œ ๊ธ€์ด ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!
๋‹ค์Œ ๊ธ€์—์„œ๋Š” PostgreSQL ์ตœ์‹  ๋™ํ–ฅ ๋ฐ ๋ฏธ๋ž˜ ์ „๋ง์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€๐Ÿ˜Š

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/04   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•