๐ง 1. SHRINK๋ ๋ฌด์์ธ๊ฐ?
Oracle์ SHRINK SPACE ๊ธฐ๋ฅ์ ์ธ๊ทธ๋จผํธ(ํ ์ด๋ธ, ์ธ๋ฑ์ค ๋ฑ)์ ํ ๋น๋ ์ฌ์ ๊ณต๊ฐ์ ์ค์ด๋ ์์ ์ ๋๋ค. ํนํ DML(INSERT/DELETE ๋ฑ) ์์ ์ด ๋ง์ OLTP ํ๊ฒฝ์์ ๋ถํ์ํ๊ฒ ์ปค์ง ํ ์ด๋ธ์ ๊ณต๊ฐ์ ์ค์ด๊ณ I/O ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค.
๐️ 2. ๋์ ์๋ฆฌ
- DELETE ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ง์๋ ์ค์ ํ ์ด๋ธ ํฌ๊ธฐ๋ ์ค์ด๋ค์ง ์์ต๋๋ค.
- SHRINK์ ๋ด๋ถ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ๋ ฌํ๊ณ HWM(High Water Mark) ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ด ๋ฃ์ ํ, ๋ถํ์ํ ๋ธ๋ก์ ๋ฐํํฉ๋๋ค.
- ๋ฐํ๋ ๋ธ๋ก์ tablespace์ ๋ฐํ๋์ด ๋ค๋ฅธ ๊ฐ์ฒด์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋๋ค.
⚙️ 3. SHRINK ์ฌ์ฉ ์กฐ๊ฑด
์กฐ๊ฑด | ์ค๋ช |
ASSM(Automatic Segment Space Management) ์ฌ์ฉ | SHRINK๋ ASSM์ด ์ค์ ๋ tablespace์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ |
ROW MOVEMENT ํ์ฉ | ํ ์ด๋ธ์์ ํ์ด ์ฌ๋ฐฐ์น๋๋ฏ๋ก, ROW MOVEMENT๋ฅผ ENABLE ํด์ผ ํจ |
ํ ์ด๋ธ์ด ํํฐ์ ์ด ์๋ ๊ฒฝ์ฐ | ๋นํํฐ์ ํ ์ด๋ธ์ ๋ฐ๋ก shrink ๊ฐ๋ฅ (ํํฐ์ ํ ์ด๋ธ์ ๊ฐ๋ณ ํํฐ์ ๋จ์ shrink ํ์) |
๐ป 4. SHRINK ์ฌ์ฉ ์์
1) ์ค๋น: ROW MOVEMENT ํ์ฑํ
ALTER TABLE employees ENABLE ROW MOVEMENT;
2) ํ ์ด๋ธ SHRINK (์์ถ + ๊ณต๊ฐ ๋ฐํ)
ALTER TABLE employees SHRINK SPACE;
๐ ์ด ๋ช
๋ น์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐฐ์นํ ๋ค HWM์ ๋ฎ์ถ๊ณ ์ฌ์ ๊ณต๊ฐ์ ๋ฐํํฉ๋๋ค.
3) ๋จ๊ณ์ SHRINK (๋จ๊ณ์ ์ผ๋ก ์์
ํ ๊ฒฝ์ฐ)
ALTER TABLE employees SHRINK SPACE COMPACT; -- ์ฌ๋ฐฐ์น๋ง ์ํ
ALTER TABLE employees SHRINK SPACE; -- HWM ๋ฎ์ถ๊ธฐ ๋ฐ ๊ณต๊ฐ ๋ฐํ
4) ์ธ๋ฑ์ค SHRINK
ALTER INDEX emp_name_idx SHRINK SPACE;
๐จ 5. ์ฃผ์์ฌํญ
- SHRINK ์ค ์ ๊ธ(Lock): Compact ๋จ๊ณ๋ ๊ณต์ ์ ๊ธ, ์ ์ฒด SHRINK๋ ์ผ์์ ์ผ๋ก Exclusive ์ ๊ธ์ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ROWID ๋ณ๊ฒฝ: SHRINK๋ ํ ์ฌ๋ฐฐ์น๋ฅผ ์๋ฐํ๋ฏ๋ก ROWID๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค. ROWID๋ฅผ ์ธ๋ถ์์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ ์ฃผ์!
- LOB ์ปฌ๋ผ SHRINK ๋ถ๊ฐ: ์ผ๋ฐ ํ ์ด๋ธ์ ๊ฐ๋ฅํ์ง๋ง, LOB๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ผ๋ถ ์ ํ์ด ์์ต๋๋ค.
- ํํฐ์ ํ ์ด๋ธ: ๊ฐ ํํฐ์ ๋ณ๋ก ๋ณ๋๋ก SHRINKํด์ผ ํฉ๋๋ค.
๐ 6. SHRINK ์ ํ ๋น๊ต ์์
-- SHRINK ์ ๊ณต๊ฐ ํ์ธ
SELECT table_name, blocks FROM user_tables WHERE table_name = 'EMPLOYEES';
-- SHRINK ์ํ
ALTER TABLE employees ENABLE ROW MOVEMENT;
ALTER TABLE employees SHRINK SPACE;
-- SHRINK ํ ๊ณต๊ฐ ํ์ธ
SELECT table_name, blocks FROM user_tables WHERE table_name = 'EMPLOYEES';
๐งฉ 7. ์ธ์ SHRINK๋ฅผ ์ฌ์ฉํ ๊น?
์ํฉ | ๊ถ์ฅ ์ฌ๋ถ |
๋๋ DELETE ํ ๊ณต๊ฐ์ด ๋น์์ ๋ | ✅ ์ ๊ทน ๊ถ์ฅ |
OLTP ์์คํ ์์ ๋น๋ฒํ DML์ด ์๋ ํ ์ด๋ธ | ✅ ์ฃผ๊ธฐ์ SHRINK ๊ณ ๋ ค |
ROWID๋ฅผ ์ธ๋ถ์์ ์ฐธ์กฐ ์ค | ❌ ๋น๊ถ์ฅ |
์ด์ ์์คํ ์์ ์ค์๊ฐ SHRINK | ⚠️ ๋ถํ ๊ณ ๋ ค ํ์ (ํ ์คํธ ํ ์ ์ฉ ๊ถ์ฅ) |
๐ ๋ง๋ฌด๋ฆฌ
Oracle SHRINK๋ ๊ณต๊ฐ ์ ๊ฐ๊ณผ I/O ์ฑ๋ฅ ๊ฐ์ ์ ์ง์ ์ ์ธ ์ํฅ์ ์ค ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. ํ์ง๋ง ๋ชจ๋ ํ๊ฒฝ์ ๋ฌด์์ ์ ์ฉํ๊ธฐ๋ณด๋ค๋ ํ ์ด๋, ์ ๊ธ, ์ฑ๋ฅ ์ํฅ ๋ฑ์ ๊ณ ๋ คํ ํ ์ด์ ์ ์ฑ ์ ๋ง๊ฒ ์ฃผ๊ธฐ์ ๋๋ ์๋์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
✅ ํ: ์ฃผ๊ธฐ์ ์ธ SHRINK ์์ ์ ๋ฐฐ์น๋ ์ผ๊ฐ ์๊ฐ์ ์คํํ๊ณ , ์์ ์ ํ ROWID, ๊ณต๊ฐ ๋ธ๋ก ์, I/O ์ฑ๋ฅ ์งํ ๋ฑ์ ๋ฐ๋์ ๋น๊ตํด ๋ณด์ธ์.