[PostgreSQL] vacuum

PostgreSQL์ด ๋‹ค๋ฅธ RDB๋“ค๊ณผ ๋น„๊ตํ•ด์„œ ์ด์งˆ์ ์ธ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜๊ฐ€ vacuum์ด๋‹ค.

์‚ฌ์‹ค ๊ทธ๋ƒฅ DB๋ฅผ ๊ฐ–๋‹ค์“ฐ๊ธฐ๋งŒ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ฉด ์‹ ๊ฒฝ์„ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋Š”๋ฐ, DBA๋ผ๋ฉด ์ž˜ ์•Œ์•„์•ผ ํ•œ๋‹ค. ๊ธฐ๋Šฅ์ ์ธ ๋ถ€๋ถ„์ด ์•„๋‹ˆ๋ผ, ์šด์˜-๊ด€๋ฆฌ์ ์ธ ์ธก๋ฉด์—์„œ ๋ง์ด๋‹ค.

vacuum์€ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด DB์— "๋””์Šคํฌ ์กฐ๊ฐ ๋ชจ์Œ"์„ ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.




์ด๊ฒŒ ์™œ ํ•„์š”ํ•˜๋ƒ?

PostgreSQL์€ ์ข€ ํŠน์ดํ•˜๊ฒŒ, UPDATE๋‚˜ DELETE๋ฅผ ํ•˜๋”๋ผ๋„ ์›๋ณธ์„ ์ง„์งœ๋กœ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์—†์• ์ง€๋Š” ์•Š๋Š”๋‹ค. ๋ณด์ด์ง€ ์•Š๊ฒŒ๋งŒ ์ˆจ๊ฒจ๋†“์„ ๋ฟ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๊ทธ ์ˆจ๊น€ ๊ณต๊ฐ„์„ Free Space Map์ด๋ผ๊ณ  ํ•˜๊ณ , ๊ฐ€์งœ๋กœ ์‚ญ์ œ๋œ ๊ฐ’์„ dead tuple์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ์‹œ ๋กค๋ฐฑ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
MySQL์ด๋‚˜ Oracle์˜ ๊ฒฝ์šฐ์—๋Š” ๋กค๋ฐฑ ๋กœ๊ทธ๋ฅผ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•ด์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋ฌผ๋ก  ๊ฐ์ž ์žฅ๋‹จ์ ์ด ์žˆ๊ณ , ๋‘˜๋‹ค ๊ท€์ฐฎ์€ ๊ด€๋ฆฌํฌ์ธํŠธ๋Š” ์กด์žฌํ•œ๋‹ค.

์•„๋ฌดํŠผ ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, UPDATE๋‚˜ DELETE๋ฅผ ๋งŽ์ด ๋•Œ๋ฆด์ˆ˜๋ก ํ…Œ์ด๋ธ”์˜ ์ €์žฅ๊ณต๊ฐ„์€ ์ ์  ๋น„๋Œ€ํ•ด์ง„๋‹ค. ๋‹น์—ฐํžˆ ์ด๋Ÿฐ๊ฒŒ ์„ฑ๋Šฅ์— ์ข‹์„๋ฆฌ๊ฐ€ ์—†๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ Free Space Map ๊ณต๊ฐ„๋„ ๋ฌดํ•œ์ • ์ œ๊ณต๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์„œ, ์›ฌ๋งŒํ•˜๋ฉด ์ •๊ธฐ์ ์œผ๋กœ vaccum์„ ๋Œ๋ ค์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค.




Vacuum ์‚ฌ์šฉ๋ฒ•

์ด๊ฑด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด๊ฑฐ์šด ์ž‘์—…์ผ๋ฟ๋”๋Ÿฌ, ์ฒ˜๋ฆฌ์ค‘์— ํ•„์š”ํ•œ ํ…Œ์ด๋ธ”๋“ค์„ ๋‹ค Lock์ฒ˜๋ฆฌํ•œ๋‹ค.
์‹œ์Šคํ…œ์ด ๋ป—์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์„œ๋ฒ„ ์ ๊ฒ€์‹œ๊ฐ„ ๊ฐ™์€ ๋•Œ ์‚ฌ์šฉํ•ด์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค.

-- DB ์ „์ฒด์— ์‹คํ–‰
vacuum full analyze;

-- DB ์ „์ฒด์— ๊ฐ„๋‹จํ•˜๊ฒŒ๋งŒ ์‹คํ–‰
vacuum verbose analyze;

-- ํ•ด๋‹น ํ…Œ์ด๋ธ”๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹คํ–‰
vacuum analyse [ํ…Œ์ด๋ธ”๋ช…];

-- ํŠน์ • ํ…Œ์ด๋ธ”๋งŒ ํ’€ ์‹คํ–‰
vacuum full [ํ…Œ์ด๋ธ”๋ช…];




Auto Vacuum

๊ทผ๋ฐ ์ €๋Ÿฐ๊ฑธ ๋งค๋ฒˆ ์‹ ๊ฒฝ์“ฐ๋ฉด์„œ ๋‚ ๋ ค์ฃผ๋Š”๊ฒƒ๋„ ํ•˜๋‹ค๋ณด๋ฉด ๊ณ ์—ญ์ผ ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ ์ž๋™์œผ๋กœ vacuum์„ ํ•ด์ฃผ๋Š” auto vacuum์ด๋ž€ ๊ฒƒ์ด ์žˆ๋‹ค.

๊ทธ๋ƒฅ ์–ด๋А ๊ธฐ์ค€์ด ๋ ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ vacuum ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
๋ฌผ๋ก  ์ด๊ฒƒ๋„ ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์•„์„œ ์ปค์Šคํ…€ ์„ค์ •์„ ์ข€ ํ•ด์ฃผ๊ฑฐ๋‚˜, ์ˆ˜๋™ vacuum์„ ์จ์ฃผ๊ธฐ๋„ ํ•ด์•ผ ํ•œ๋‹ค.

์„ค์ •๊ฐ’์€ postgresql.conf ์„ค์ •ํŒŒ์ผ์— ์žˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค.
https://www.postgresql.org/docs/current/runtime-config-autovacuum.html



์ฐธ์กฐ
https://blog.gaerae.com/2015/09/postgresql-vacuum-fsm.html
https://nrise.github.io/posts/postgresql-autovacuum/