๐Ÿ” Oracle SHRINK ๊ธฐ๋ฒ• ์™„๋ฒฝ ์ •๋ฆฌ: ๊ณต๊ฐ„ ํšŒ์ˆ˜์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ํ•œ ๋ฒˆ์—

 

๐Ÿง  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 ์„ฑ๋Šฅ ์ง€ํ‘œ ๋“ฑ์„ ๋ฐ˜๋“œ์‹œ ๋น„๊ตํ•ด ๋ณด์„ธ์š”.


๋‹ค์Œ ์ด์ „