๐ Vacuum์ด๋?
PostgreSQL์ MVCC (Multi-Version Concurrency Control)์ ์ฌ์ฉํ์ฌ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋๋ฐ, ์ด๋ฅผ ์ํด ์ญ์ ๋๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ ๋ ์ฝ๋(ํํ)๊ฐ ์ฆ์ ์ ๊ฑฐ๋์ง ์๊ณ Dead Tuple๋ก ๋จ์ ์๊ฒ ๋๋ฉฐ, ์ด๋ฅผ ์ ๋ฆฌํ๋ ๊ณผ์ ์ VACUUM์ด๋ผ ๋ถ๋ฆ.
+ Dead Tuple : UPDATE์ DELETE ์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ์ญ์ ํ์ง ์๊ณ ์ด์ ๋ฒ์ ์ผ๋ก ๋จ๊ฒจ๋ ์ผ๋ก์จ ์๊ธฐ๋ ๋ฏธ์ฌ์ฉ ๋ฐ์ดํฐ.
๐ MVCC (Multi-Version Concurrency Control)๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ์ ๊ทผํ ๋ ์ผ๊ด์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ผ๋ก PostgreSQL, Oracle, MySQL (InnoDB), MS SQL Server ๋ฑ ์ฌ๋ฌ DBMS์์ ์ฌ์ฉ.
MVCC๋ ์ฝ๊ธฐ ์์ (SELECT)๊ณผ ์ฐ๊ธฐ ์์ (INSERT, UPDATE, DELETE)์ ์ถฉ๋ ์์ด ์ฒ๋ฆฌํ ์ ์๋๋ก ์ฌ๋ฌ ๋ฒ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ ๋ฐฉ์ ์ด๋ฅผ ํตํด ํธ๋์ญ์ ๊ฐ ๋ฝ(lock) ์ถฉ๋์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์
1. ํธ๋์ญ์ ์ ๊ณ ์ ID (Transaction ID, XID)
PostgreSQL์์๋ ๊ฐ ํธ๋์ญ์ ๋ง๋ค ๊ณ ์ ํ ID๊ฐ ํ ๋น๋๋ฉฐ, MVCC๋ ์ด ID๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ์ ๊ฐ์์ฑ์ ํ๋จํจ.
2. ๋ฐ์ดํฐ ๋ฒ์ ๊ด๋ฆฌ
- INSERT: ์๋ก์ด ํ(row)์ด ์ถ๊ฐ๋๋ฉด ํด๋น ํ์ ํธ๋์ญ์ ID(XID)๊ฐ ํ ๋น
- UPDATE: ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ก์ด ๋ฒ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ฉฐ, ๊ธฐ์กด ๋ฐ์ดํฐ๋ ์ญ์ ๋์ง ์๊ณ ๋จ์ ์์
- DELETE: ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ์ญ์ ํ๋ ๊ฒ์ด ์๋๋ผ, ํด๋น ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์๋ค๋ ํ์๋ง ๋จ๊ธฐ๊ณ ์ ์ง
๐ Vacuum์ ํ์์ฑ
- ๋์คํฌ ๊ณต๊ฐ ์ ์ฝ
- ๋ถํ์ํ Dead Tuple์ ์ ๊ฑฐํ์ฌ ๊ณต๊ฐ์ ์ฌ์ฌ์ฉํ ์ ์์
- ์ฟผ๋ฆฌ ์ฑ๋ฅ ์ ์ง
- ์ธ๋ฑ์ค๊ฐ Dead Tuple์ ํฌํจํ๋ฉด ๊ฒ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์
- Freezing (ํธ๋์ญ์
ID wraparound ๋ฐฉ์ง)
- PostgreSQL์์๋ ํธ๋์ญ์ ID(XID) ์ค๋ฒํ๋ก์ฐ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฃผ๊ธฐ์ ์ผ๋ก VACUUM์ด ํ์
- Autovacuum์ด ์ถฉ๋ถํ์ง ์์ ๋
- DELETE ๋๋ UPDATE ์์ ์ด ๋ง์ผ๋ฉด autovacuum๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ ์ ์์
๐ Vacuum ์คํ ๊ด๋ จ ๋ช ๋ น์ด
-- DB ์ ์ฒด ํ ์คํ
vacuum full analyze;
-- DB ์ ์ฒด ๊ฐ๋จํ๊ฒ ์คํ
vacuum verbose analyze;
-- ํด๋น ํ
์ด๋ธ๋ง ๊ฐ๋จํ๊ฒ ์คํ
vacuum analyze [ํ
์ด๋ธ ๋ช
];
-- ํน์ ํ
์ด๋ธ๋ง ํ ์คํ
vacuum full [ํ
์ด๋ธ๋ช
];
๐ AutoVacuum
Vacuum์ด DB๋จ์์ ์๊ณ์น์ ๋ฐ๋ผ ์๋์ผ๋ก ์ํ๋๋ ๊ฒ์ AutoVacuum์ด๋ผ๊ณ ํ๋ฉฐ, AutoVacuum์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ๋๊ฐ์ง ์ํฉ์์ ์ํ๋๋ค.
- Dead Tuple์ ๊ฐ์์ ๋์ ์น๊ฐ ์๊ณ์น์ ๋๋ฌํ์ ๋
- Table์ด๋ Tuple์ age๊ฐ ๋์ ๋์ด ์๊ณ์น์ ๋๋ฌํ์ ๋
'Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] B-Tree ์ธ๋ฑ์ค (0) | 2025.03.26 |
---|---|
[PostgreSQL] ํธ๋ฆฌ๊ฑฐ (0) | 2025.03.18 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค/JAVA] Connection Pool (0) | 2025.02.19 |