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

๋ฐ˜์‘ํ˜•

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

3.3 PostgreSQL ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

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


3.3.1 PostgreSQL ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ฐœ์š”

PostgreSQL์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… ์ฟผ๋ฆฌ ์ตœ์ ํ™” (EXPLAIN ANALYZE, ์ธ๋ฑ์Šค ํ™œ์šฉ)
โœ… ์„œ๋ฒ„ ํŠœ๋‹ (postgresql.conf ์„ค์ • ์ตœ์ ํ™”)
โœ… ์ž๋™ ๊ด€๋ฆฌ(Auto Vacuum) ์„ค์ •
โœ… ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์„ฑ๋Šฅ ๋ถ„์„

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


3.3.2 EXPLAIN ANALYZE๋ฅผ ํ™œ์šฉํ•œ ์ฟผ๋ฆฌ ์ตœ์ ํ™”

PostgreSQL์—์„œ SQL ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๋ ค๋ฉด EXPLAIN๊ณผ EXPLAIN ANALYZE๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น EXPLAIN ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

โœ… ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ณ„ํš์„ ํ™•์ธํ•˜์ง€๋งŒ ์‹ค์ œ ์‹คํ–‰๋˜์ง€๋Š” ์•Š์Œ

๐Ÿ”น EXPLAIN ANALYZE ์‚ฌ์šฉ๋ฒ•

EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';

โœ… ์ฟผ๋ฆฌ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๊ณ  ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋ถ„์„

๐Ÿ”น ์‹คํ–‰ ๊ณ„ํš ์˜ˆ์ œ

Seq Scan on users  (cost=0.00..12.75 rows=1 width=55) (actual time=0.015..0.020 rows=1 loops=1)

โœ… Seq Scan(์ˆœ์ฐจ ๊ฒ€์ƒ‰) ๋Œ€์‹  ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ๊ฐœ์„  ๊ฐ€๋Šฅ


3.3.3 ์ธ๋ฑ์Šค ์ตœ์ ํ™” (CREATE INDEX)

PostgreSQL์—์„œ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”น ๊ธฐ๋ณธ B-TREE ์ธ๋ฑ์Šค ์ƒ์„ฑ

CREATE INDEX idx_users_email ON users(email);

โœ… ์ด๋ฉ”์ผ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ

๐Ÿ”น ๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค ์ƒ์„ฑ

CREATE INDEX idx_users_name_email ON users(name, email);

โœ… ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ๊ฐœ์„ 

๐Ÿ”น ์ธ๋ฑ์Šค ์ œ๊ฑฐ (DROP INDEX)

DROP INDEX idx_users_email;

โœ… ๋ถˆํ•„์š”ํ•œ ์ธ๋ฑ์Šค๋Š” ์‚ญ์ œํ•˜์—ฌ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ

๐Ÿ’ก ์ธ๋ฑ์Šค๊ฐ€ ๋งŽ์œผ๋ฉด INSERT ๋ฐ UPDATE ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•„์š”ํ•  ๋•Œ๋งŒ ์ถ”๊ฐ€


3.3.4 postgresql.conf ์„œ๋ฒ„ ํŠœ๋‹

PostgreSQL์˜ ๊ธฐ๋ณธ ์„ค์ •๊ฐ’์€ ๋ชจ๋“  ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋˜์ง€ ์•Š์Œ
๋”ฐ๋ผ์„œ ์„œ๋ฒ„ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋ ค๋ฉด ์ฃผ์š” ์„ค์ •์„ ํŠœ๋‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น ๋ฉ”๋ชจ๋ฆฌ ์„ค์ • ์ตœ์ ํ™”

์„ค์ • ํ•ญ๋ชฉ ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’ ์ถ”์ฒœ ๊ฐ’

shared_buffers PostgreSQL์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ 128MB RAM์˜ 25~40%
work_mem ์ •๋ ฌ ๋ฐ ํ•ด์‹œ ์กฐ์ธ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ 4MB 16MB ์ด์ƒ
maintenance_work_mem ์ธ๋ฑ์Šค ์ƒ์„ฑ ๋ฐ VACUUM์— ์‚ฌ์šฉ 64MB 256MB ์ด์ƒ
shared_buffers = 4GB
work_mem = 32MB
maintenance_work_mem = 512MB

โœ… ์„œ๋ฒ„์˜ RAM ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ์กฐ์ •


3.3.5 ์ž๋™ ๊ด€๋ฆฌ: AUTOVACUUM ์„ค์ •

๋ฐ˜์‘ํ˜•

PostgreSQL์€ MVCC(Multi-Version Concurrency Control) ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ,
๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ๋ฅผ ์œ„ํ•ด VACUUM์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

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

SHOW autovacuum;

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

๐Ÿ”น AUTOVACUUM ์„ค์ • ์ตœ์ ํ™” (postgresql.conf)

autovacuum = on
autovacuum_vacuum_scale_factor = 0.1  # ๊ธฐ๋ณธ๊ฐ’ 0.2 → ๋‚ฎ์ถ”๋ฉด ์ž์ฃผ ์‹คํ–‰๋จ
autovacuum_analyze_scale_factor = 0.05
autovacuum_vacuum_cost_limit = 2000

โœ… ํ…Œ์ด๋ธ” ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๊ฐ’์œผ๋กœ ์กฐ์ •

๐Ÿ’ก ํ…Œ์ด๋ธ” ํฌ๊ธฐ๊ฐ€ ํฌ๋‹ค๋ฉด autovacuum์„ ์กฐ์ •ํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐฉ์ง€


3.3.6 ์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง (pg_stat_statements)

PostgreSQL์—์„œ๋Š” SQL ์‹คํ–‰ ๋นˆ๋„ ๋ฐ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก pg_stat_statements ํ™•์žฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

CREATE EXTENSION pg_stat_statements;

โœ… PostgreSQL์— ์ฟผ๋ฆฌ ํ†ต๊ณ„๋ฅผ ๊ธฐ๋กํ•˜๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”

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

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

โœ… ๊ฐ€์žฅ ๋Š๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ์ฐพ์•„ ์ตœ์ ํ™” ๊ฐ€๋Šฅ


3.3.7 PostgreSQL ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ ํ™œ์šฉ

์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฅ๊ธฐ์ ์ธ ์„ฑ๋Šฅ ๋ถ„์„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

โœ… ์ถ”์ฒœ PostgreSQL ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ

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

pgAdmin PostgreSQL ๊ณต์‹ GUI ๊ด€๋ฆฌ ๋„๊ตฌ
pg_stat_statements SQL ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ํ™•์žฅ ๋ชจ๋“ˆ
pgBadger PostgreSQL ๋กœ๊ทธ๋ฅผ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋ถ„์„
Prometheus + Grafana ์‹ค์‹œ๊ฐ„ PostgreSQL ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง

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


3.3.8 ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ฒดํฌ๋ฆฌ์ŠคํŠธ

PostgreSQL ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๊ธฐ์ ์ธ ์ ๊ฒ€์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

โœ… EXPLAIN ANALYZE๋กœ ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ณ„ํš ํ™•์ธ
โœ… ์ ์ ˆํ•œ ์ธ๋ฑ์Šค(B-TREE, GIN, BRIN) ์‚ฌ์šฉ
โœ… postgresql.conf์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์„ค์ • ์ตœ์ ํ™”
โœ… AUTOVACUUM์„ ์กฐ์ •ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ
โœ… pg_stat_statements ํ™œ์„ฑํ™”ํ•˜์—ฌ SQL ์„ฑ๋Šฅ ๋ถ„์„
โœ… Prometheus + Grafana๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌ์ถ•


3.3.9 ๊ฒฐ๋ก : PostgreSQL ์„ฑ๋Šฅ ์ตœ์ ํ™” ํ•ต์‹ฌ ์š”์•ฝ

โœ… ์ฟผ๋ฆฌ ์ตœ์ ํ™”: EXPLAIN ANALYZE๋กœ ์‹คํ–‰ ๊ณ„ํš ํ™•์ธ
โœ… ์ธ๋ฑ์Šค ์ตœ์ ํ™”: ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์ ์ ˆํ•œ ์ธ๋ฑ์Šค ํ™œ์šฉ
โœ… ์„œ๋ฒ„ ํŠœ๋‹: postgresql.conf์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์บ์‹œ ์ตœ์ ํ™”
โœ… ์ž๋™ ๊ด€๋ฆฌ(AUTOVACUUM): ์ •๊ธฐ์ ์ธ ํ…Œ์ด๋ธ” ์ •๋ฆฌ๋กœ ์„ฑ๋Šฅ ์œ ์ง€
โœ… ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง: pg_stat_statements, pgBadger, Grafana ํ™œ์šฉ

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


๐Ÿ”Ž ๋‹ค์Œ ๊ธ€ ์˜ˆ๊ณ : PostgreSQL ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ๋ฐ ํ™•์žฅ ๋ชจ๋“ˆ ํ™œ์šฉ

๐Ÿ“Œ ๋‹ค์Œ ํŽธ: 4.1 PostgreSQL ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ๋ฐ ํ™•์žฅ ๋ชจ๋“ˆ


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

๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•