[PostgreSQL] autovacuum์ด ํฐ ํ…Œ์ด๋ธ”์—์„œ ์•ˆ ๋„๋Š” ์ด์œ 

์ง€๋‚œ ํŽธ์—์„œ ์ฃฝ์€ ํŠœํ”Œ ๋น„์œจ์ด ๊ณ„์† ์˜ฌ๋ผ๊ฐ€๊ณ  ์žˆ๋‹ค๋ฉด ์„ค์ •์„ ๋ด์•ผ ํ•œ๋‹ค๊ณ  ์ผ๋‹ค. ๊ทธ ์„ค์ • ์ด์•ผ๊ธฐ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด, autovacuum์˜ ๊ธฐ๋ณธ๊ฐ’์€ ์ž‘์€ ํ…Œ์ด๋ธ”์— ๋งž์ถฐ์ ธ ์žˆ๋‹ค. ํ…Œ์ด๋ธ”์ด ์ปค์งˆ์ˆ˜๋ก ๋Šฆ๊ฒŒ ๋Œ๊ณ , ๋Šฆ๊ฒŒ ๋„๋Š” ๋งŒํผ ํ•œ ๋ฒˆ์— ํ•  ์ผ์ด ๋งŽ์•„์ง„๋‹ค. ๋ฐœ๋™ ์กฐ๊ฑด ๊ณต์‹ autovacuum์€ ํ…Œ์ด๋ธ”๋งˆ๋‹ค ์ž„๊ณ„๊ฐ’์„ ๊ณ„์‚ฐํ•ด์„œ, ์ฃฝ์€ ํŠœํ”Œ ์ˆ˜๊ฐ€ ๊ทธ ๊ฐ’์„ ๋„˜์œผ๋ฉด ๋Œ€์ƒ์œผ๋กœ ์žก๋Š”๋‹ค. ๋ฐœ๋™ ์ž„๊ณ„๊ฐ’ = autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor ร— ํ…Œ์ด๋ธ” ํ–‰ ์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์€ ์ด๋ ‡๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ ๊ธฐ๋ณธ๊ฐ’ autovacuum_vacuum_threshold 50 autovacuum_vacuum_scale_factor 0.2 (20%) ์ง€๋ฐฐ์ ์ธ ๊ฑด ๋’ค์ชฝ ํ•ญ์ด๋‹ค. ํ–‰ ์ˆ˜์— ๊ณฑํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ...

[PostgreSQL] VACUUM์„ ๋Œ๋ ธ๋Š”๋ฐ ๋””์Šคํฌ๊ฐ€ ์•ˆ ์ค„์–ด๋“œ๋Š” ์ด์œ 

VACUUM์„ ๋Œ๋ ธ๋Š”๋ฐ ๋””์Šคํฌ๊ฐ€ ๊ทธ๋Œ€๋กœ๋ผ๋Š” ์ด์•ผ๊ธฐ๋ฅผ ์ข…์ข… ๋“ฃ๋Š”๋‹ค. ์ •์ƒ ๋™์ž‘์ด๋‹ค. VACUUM์€ ๊ณต๊ฐ„์„ ์šด์˜์ฒด์ œ์— ๋Œ๋ ค์ฃผ๋Š” ๋ช…๋ น์ด ์•„๋‹ˆ๋‹ค. VACUUM์ด ์‹ค์ œ๋กœ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€, bloat๊ฐ€ ์™œ ์Œ“์ด๊ณ  ์–ด๋–ป๊ฒŒ ์žฌ๋Š”์ง€๊นŒ์ง€ ์ •๋ฆฌํ•œ๋‹ค. ์ฃฝ์€ ํŠœํ”Œ์€ ์–ด๋–ป๊ฒŒ ์ƒ๊ธฐ๋Š”๊ฐ€ PostgreSQL์€ MVCC๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— UPDATE๊ฐ€ ์ œ์ž๋ฆฌ ์ˆ˜์ •์ด ์•„๋‹ˆ๋‹ค. ๊ธฐ์กด ํ–‰์„ ๊ณ ์น˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ƒˆ ๋ฒ„์ „์„ ํ•˜๋‚˜ ๋” ์“ฐ๊ณ , ์˜ˆ์ „ ๋ฒ„์ „์— โ€œ์ด ์‹œ์  ์ดํ›„๋กœ๋Š” ๋ฌดํšจ"๋ผ๋Š” ํ‘œ์‹œ๋ฅผ ๋‚จ๊ธด๋‹ค. DELETE๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฆ‰์‹œ ์ง€์šฐ์ง€ ์•Š๊ณ  ๋ฌดํšจ ํ‘œ์‹œ๋งŒ ํ•œ๋‹ค. ์˜ˆ์ „ ๋ฒ„์ „์„ ๋ฐ”๋กœ ๋ชป ์ง€์šฐ๋Š” ์ด์œ ๋Š” ์•„์ง ๊ทธ๊ฑธ ๋ด์•ผ ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์ด ์žˆ์„ ์ˆ˜ ์žˆ์–ด์„œ๋‹ค. ๋จผ์ € ์‹œ์ž‘๋œ ํŠธ๋žœ์žญ์…˜์—๊ฒŒ๋Š” ์—ฌ์ „ํžˆ ๊ทธ ๋ฒ„์ „์ด ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋‹ค. ...

๋กœ๊ทธ๊ฐ€ 0์ค„์ธ ๊ฒƒ์€ ์•„๋ฌด ์ผ๋„ ์—†์—ˆ๋‹ค๋Š” ๋œป์ด ์•„๋‹ˆ๋‹ค

๋‘ ๋‹ฌ ๋™์•ˆ ๊ด€์ฐฐ ๋ชจ๋“œ๋กœ ๋Œ๋ ค๋‘” ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๋‹ค. ์‹ค์ œ ์ฐจ๋‹จ์€ ํ•˜์ง€ ์•Š๊ณ  โ€œ์ฐจ๋‹จํ–ˆ์„ ๊ฒƒ"๋งŒ ๋กœ๊ทธ๋กœ ๋‚จ๊ธฐ๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค. ์ „ํ™˜ ์‹œ์ ์ด ๋˜์–ด ๋กœ๊ทธ๋ฅผ ํ™•์ธํ–ˆ๋”๋‹ˆ ๊ด€๋ จ ๋กœ๊ทธ๊ฐ€ ํ•œ ์ค„๋„ ์—†์—ˆ๋‹ค. ์ฒ˜์Œ ๋“  ์ƒ๊ฐ์€ โ€œ์˜คํƒ์ด 0์ด๊ตฌ๋‚˜, ์•ˆ์ „ํ•˜๊ฒŒ ์ผœ๋„ ๋˜๊ฒ ๋‹ค"์˜€๋‹ค. ๋‹คํ–‰ํžˆ ์ผœ๊ธฐ ์ „์— ํ•œ ๋ฒˆ ๋” ๋ดค๋Š”๋ฐ, ์‹ค์ œ๋กœ๋Š” ์˜คํƒ์ด 0์ด ์•„๋‹ˆ๋ผ ๊ด€์ฐฐ ๊ฒฐ๊ณผ๊ฐ€ ํ•œ ์‹œ๊ฐ„ ์ด์ƒ ๋‚จ์ง€ ์•Š๋Š” ์ƒํƒœ์˜€๋‹ค. ๋กœ๊ทธ๋ฅผ ๋งค์‹œ๊ฐ„ ๋น„์šฐ๋Š” ํฌ๋ก ์ด ๋”ฐ๋กœ ๋Œ๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ๋‘ ๋‹ฌ์น˜ ๊ด€์ฐฐ์„ ํ–ˆ๋‹ค๊ณ  ๋ฏฟ์—ˆ์ง€๋งŒ ์‹ค์ œ๋กœ ๋ณธ ๊ฒƒ์€ ์ง์ „ ๋ช‡์‹ญ ๋ถ„์ด์—ˆ๋‹ค. ๊ทธ ๋’ค๋กœ ๋น„์Šทํ•œ ์œ ํ˜•์„ ๋ช‡ ๋ฒˆ ๋” ๋ฐŸ์•˜๊ณ , ๊ณตํ†ต์ ์ด ์žˆ์–ด์„œ ์ •๋ฆฌํ•ด๋‘”๋‹ค. ์ „๋ถ€ ๊ด€์ฐฐ ๊ฒฐ๊ณผ๊ฐ€ ๊ด€์ฐฐ ๋Œ€์ƒ๋ณด๋‹ค ๋จผ์ € ์‚ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๋‹ค. ...

console.log๋Š” ๋กœ๊น…์ด ์•„๋‹ˆ๋‹ค โ€” ์šด์˜์—์„œ ์‚ด์•„๋‚จ๋Š” ๋กœ๊ทธ ์„ค๊ณ„

๋ฐฐํฌ ์ „์— ์ง€์šฐ๋Š” ๋กœ๊ทธ console.log๋ฅผ ์ž”๋œฉ ๋ฐ•์•„๋‘๊ณ  ๋ฐฐํฌ ์ง์ „์— ์ „๋ถ€ ์ง€์›Œ๋ณธ ์ ์ด ์žˆ๋‹ค๋ฉด, ๊ทธ๊ฑด ๋กœ๊น…์ด ์•„๋‹ˆ๋ผ ๋””๋ฒ„๊น…์ด๋‹ค. ๋‘˜์€ ๋ชฉ์ ์ด ๋‹ค๋ฅธ ๋ณ„๊ฐœ์˜ ํ™œ๋™์ด๋‹ค. ๋””๋ฒ„๊น… ๋กœ๊น… ์ˆ˜๋ช… ์ผ์‹œ์  ์˜๊ตฌ์  ์‹œ์  ๊ฐœ๋ฐœ ์ค‘ ์šด์˜ ์ค‘์— ๋” ์ค‘์š” ๋…์ž ์‚ฌ๋žŒ ์‚ฌ๋žŒ + ๊ธฐ๊ณ„ ํ˜•์‹ ์ž์œ  ๊ตฌ์กฐํ™” ๋ฐฐํฌ ์‹œ ์‚ญ์ œ ๋‚จ๋Š”๋‹ค ์šด์˜์—์„œ์˜ ๋กœ๊น…์€ 6๊ฐœ์›” ๋’ค์— ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์–ด์ œ ์ƒˆ๋ฒฝ 2์‹œ์— ๋ฌด์Šจ ์ผ์ด ์žˆ์—ˆ๋Š”์ง€ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ์ผ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ ค๋ฉด ํ˜•์‹์ด ์žˆ์–ด์•ผ ํ•˜๊ณ , ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๊ณ , ๋ณด๊ด€๋ผ์•ผ ํ•œ๋‹ค. ์ด ์„ธ ์กฐ๊ฑด์„ ํ•˜๋‚˜์”ฉ ์งš์–ด๋ณด๋ ค ํ•œ๋‹ค. ...

[PostgreSQL] ํŠธ๋žœ์žญ์…˜ ID๋Š” 42์–ต ๊ฐœ์ธ๋ฐ ์™œ 20์–ต๋งˆ๋‹ค freeze๊ฐ€ ๋„๋Š”๊ฐ€

์‹œ์ž‘์€ ์‚ฌ์†Œํ•œ ์˜๋ฌธ์ด์—ˆ๋‹ค PostgreSQL์˜ ํŠธ๋žœ์žญ์…˜ ID(XID)๋Š” 32๋น„ํŠธ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด 2^32, ์•ฝ 42์–ต 9์ฒœ๋งŒ ๊ฐœ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์šด์˜ ๋ฌธ์„œ๋ฅผ ์ฝ๋‹ค ๋ณด๋ฉด ๊ธฐ์ค€์„ ์ด ์ž๊พธ 20์–ต ๊ทผ์ฒ˜์—์„œ ์žกํžŒ๋‹ค. autovacuum_freeze_max_age์˜ ์ƒํ•œ๋„ 20์–ต์ด๊ณ , wraparound ๊ฒฝ๊ณ ๋„ 20์–ต ์–ธ์ €๋ฆฌ์—์„œ ๋‚˜์˜จ๋‹ค. ๊ณต๊ฐ„์€ 42์–ต์ธ๋ฐ ์™œ ์ ˆ๋ฐ˜๋งŒ ์“ฐ๋Š” ๊ฑธ๊นŒ. โ€œ์•ˆ์ „ ๋งˆ์ง„์ด๊ฒ ์ง€โ€ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋‹ค๊ฐ€, ๋งˆ์ง„์น˜๊ณ ๋Š” ๋„ˆ๋ฌด ์ •ํ™•ํžˆ ์ ˆ๋ฐ˜์ด๋ผ๋Š” ๊ฒŒ ๊ณ„์† ๊ฑธ๋ ธ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌผ์–ด๋ดค๊ณ , ๋‹ต์„ ๋“ฃ๊ณ  ๋‚˜๋‹ˆ ์ด๊ฑด ๋งˆ์ง„์ด ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ์ ์œผ๋กœ ๊ทธ ์ด์ƒ ์“ธ ์ˆ˜ ์—†๋Š” ๊ฐ’์ด์—ˆ๋‹ค. ์ˆœํ™˜ ์นด์šดํ„ฐ์—๋Š” โ€œ์ ˆ๋Œ€์ ์ธ ์ „ํ›„"๊ฐ€ ์—†๋‹ค ํ•ต์‹ฌ์€ XID๊ฐ€ ๋‹จ์กฐ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์ˆœํ™˜ ์นด์šดํ„ฐ(circular counter) ๋ผ๋Š” ๋ฐ ์žˆ๋‹ค. 42์–ต๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€๋ฉด ๋‹ค์‹œ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. ...