[PostgreSQL] Unlogged Table

Unlogged Table์€ ๋†’์€ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์˜ˆ์™ธ์‚ฌํ•ญ์„ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ๊ณ๊ฐ€์ง€ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด๋‹ค.
"๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”" ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋ฐ˜์ ์ธ ํ…Œ์ด๋ธ”๋ณด๋‹ค ๋น ๋ฅด๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋กœ๊ทธ๋Š” WAL์„ ๋งํ•œ๋‹ค. ์ž˜ ๋ชจ๋ฅธ๋‹ค๋ฉด ๋ณ„๋„ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.
https://blog.naver.com/sssang97/223233122052




Trade-off

์•Œ๋‹ค์‹œํ”ผ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋กœ๊ทธ์— ๊ธฐ๋ฐ˜ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
์žฅ์• ์ƒํ™ฉ์— ๋Œ€์‘ํ•˜๊ณ  ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

Unlogged Table์€ ์ด๋Ÿฐ ๋กœ๊ทธ๊ฐ€ ์ €์žฅํ•˜์ง€ ์•Š์•„์„œ ์ข€ ๋” ๋น ๋ฅธ ๋Œ€์‹ ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์–ธ์ œ๋“  ์œ ์‹ค๋˜๊ฑฐ๋‚˜ ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ํฌ๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์บ์‹ฑ, ์ž„์‹œ ๋ฐ์ดํ„ฐ ๋กœ๋“œ, ETL ๋“ฑ์— ์œ ์šฉํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ณค ํ•œ๋‹ค.




์‚ฌ์šฉ๋ฒ•

ํŠน๋ณ„ํ•œ ์‚ฌ์šฉ๋ฒ•์ด ๋”ฐ๋กœ ์žˆ์ง€๋Š” ์•Š๋‹ค. ๊ทธ๋ƒฅ ํ…Œ์ด๋ธ” ๋งŒ๋“ค๋–„ UNLOGGED ํ‚ค์›Œ๋“œ ํ•˜๋‚˜๋งŒ ๋„ฃ์–ด์„œ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

CREATE UNLOGGED TABLE unlogged_table (
    key varchar(100) PRIMARY KEY,
    value TEXT
);




์„ฑ๋Šฅ ๋น„๊ต

๊ทธ๋ƒฅ key value ํ…Œ์ด๋ธ” ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค์–ด์„œ ์šฐ๊ฒจ๋„ฃ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ€์–ด๋„ฃ์–ด๋ณด๊ฒ ๋‹ค.

CREATE UNLOGGED TABLE unlogged_table (
    key varchar(100) PRIMARY KEY,
    value TEXT
);

CREATE TABLE logged_table (
    key varchar(100) PRIMARY KEY,
    value TEXT
);

๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์— 1000๋งŒ๊ฐœ ์ •๋„๋ฅผ ๋•Œ๋ ค๋„ฃ์—ˆ์„ ๋•Œ๋Š”

\timing

insert into logged_table(key, value)
select generate_series::TEXT, 'foo'::TEXT from generate_series(0, 10000000);

25์ดˆ ์ •๋„๊ฐ€ ๊ฑธ๋ ธ๊ณ 

UNLOGGED Table์— 1000๋งŒ๊ฐœ๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ๋Š”

\timing

insert into unlogged_table(key, value)
select generate_series::TEXT, 'foo'::TEXT from generate_series(0, 10000000);

๊ทธ๊ฑฐ๋ณด๋‹จ ์ ์€ 18์ดˆ ์ •๋„๊ฐ€ ๊ฑธ๋ ธ๋‹ค.

๋ถˆ์•ˆ์ •์„ฑ์„ ๋‹ด๋ณด๋กœ ํ•œ ๊ฒƒ์น˜๊ณค ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด ์•„์ฃผ ํฌ๊ฒŒ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€๋Š” ์•Š์•˜๋‹ค. ๋‚ด ํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ์ด ์ฉ ๊ดœ์ฐฎ์€ ํŽธ์ด๊ธด ํ•œ๋ฐ, ๊ทธ๊ฑธ ๊ฐ์•ˆํ•ด๋„ ๊ทน์ ์ธ ์ •๋„๋Š” ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฑด ์ฝ๊ธฐ ์„ฑ๋Šฅ์€ ๊ฑฐ์˜ ๋˜‘๊ฐ™๋‹ค. ์“ฐ๊ธฐ ์„ฑ๋Šฅ์—์„œ๋งŒ ์œ ์˜๋ฏธํ•œ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.




๊ฒฐ๋ก 

์ด๊ฑธ Redis ๊ฐ™์€ ์ธ๋ฉ”๋ชจ๋ฆฌ DB ๋Œ€์šฉ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ฃผ์žฅ๋„ ์žˆ๋‹ค๋งŒ, ์‚ฌ์‹ค ์ด๊ฑด ๋™์˜ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
Redis๋Š” ์ฝ๊ธฐ ๋ ˆ์ดํ„ด์‹œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์— ์ฃผ ๋ชฉ์ ์ด ์žˆ๋Š”๋ฐ, UNLOGGED ์“ด๋‹ค๊ณ  ํ•ด์„œ ์ฝ๊ธฐ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง€๋Š”๊ฑด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฒฐ๊ตญ ์ด๊ฑด ๋””์Šคํฌ ์ €์žฅ์ด๋‹ค.

๋‚ด ๋ณด๊ธฐ์—” ๋ ˆ์ดํ„ด์‹œ์— ๋ฏผ๊ฐํ•˜์ง€ ์•Š์€ ์บ์‹ฑ DB๋กœ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ๋ƒฅ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“ค์–ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ค.

์ด ๊ธฐ๋Šฅ์˜ ๊ฐ€์น˜๋Š” ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์˜ฌ๋ ค์„œ ์“ฐ๋Š” ๊ฒƒ ๋ฐ–์—๋Š” ์—†๋‹ค.



์ฐธ์กฐ
https://medium.com/@wasiualhasib/unlogged-tables-in-postgresql-9d1f1f34a45b