[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/