๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Round and Round
DB/SQLP

[SQLP] 1-1. Oracle ์•„ํ‚คํ…์ฒ˜

by ํ‰๊ธ€ํ‰๊ธ€ 2025. 2. 9.

๐Ÿงท Oracle ์•„ํ‚คํ…์ฒ˜

Oracle ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ด๋ฅผ ์•ก์„ธ์Šค ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— SGA(System Global Area)๋ผ๊ณ  ํ•˜๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ์˜์—ญ์„ ๋‘์–ด ๊ตฌ์„ฑ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„ํ‚คํ…์ฒ˜

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Database) : ๋””์Šคํฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์œผ๋กœ, ์ฃผ์š” ํŒŒ์ผ๋กœ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ(Datafile), Redo Log ํŒŒ์ผ, Control ํŒŒ์ผ์ด ํฌํ•จ๋œ๋‹ค.
  • ์ธ์Šคํ„ด์Šค(Instance) : SGA (๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ)์™€ ์ด๋ฅผ ์•ก์„ธ์Šค ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Oracle์—์„œ๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ ‘๊ทผํ•˜์ง€๋งŒ, RAC(Real Application Cluster) ํ™˜๊ฒฝ์—์„œ๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์‹œ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… RAC (Real Application Cluster)

๊ณผ๊ฑฐ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๊ณต์œ ํ•˜๋Š” ๊ณต์œ  ๋””์Šคํฌ(Shared Disk) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” ๊ธฐ์กด ๋ชจ๋ธ์„ ํ™•์žฅํ•œ ๊ณต์œ  ์บ์‹œ(Shared Cache) ๋ฐฉ์‹์„ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด Global Cache ๊ฐœ๋…์„ ์ ์šฉํ•œ๋‹ค

  • Global Cache ํ™œ์šฉ
    • ๊ฐ ์ธ์Šคํ„ด์Šค๋Š” ๋กœ์ปฌ ์บ์‹œ์— ์—†๋Š” ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ด์›ƒ ๋…ธ๋“œ์—์„œ ์ „์†ก ๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฅผ ์œ„ํ•ด ๊ฐ Instance๋ฅผ ๊ณ ์†์˜ ์ „์šฉ ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • Dirty ๋ฒ„ํผ ๊ด€๋ฆฌ
    • ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์—์„œ ๊ฐฑ์‹ ํ•˜๊ณ  ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ (Active ์ƒํƒœ์˜)๋ธ”๋ก๋„ ๋””์Šคํฌ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด Dirty ๋ฒ„ํผ (๋ฉ”๋ชจ๋ฆฌ์™€ ๋””์Šคํฌ๊ฐ„์— ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ฒ„ํผ) ์ƒํƒœ๋กœ ์„œ๋กœ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ๊ฐฑ์‹ ๋œ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ๋™๊ธฐํ™”๋ฅผ ์ตœ์ ํ™” ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค.
  • ์žฅ์ 
    • ๊ณ ๊ฐ€์šฉ์„ฑ : ํŠน์ • ๋…ธ๋“œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์ง€์†์ ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    • ํ™•์žฅ์„ฑ : ์ธ์Šคํ„ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ™•์žฅ๊ฐ€๋Šฅ ํ•˜๋‹ค.

โœ… SQL Server ์•„ํ‚คํ…์ฒ˜

  • ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋‹น ์ตœ๋Œ€ 32,767๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์„ค์น˜ ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ master, model, msdb, tempdb ๋“ฑ์˜ ์‹œ์Šคํ…œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ์—ฌ๊ธฐ์— ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ฃผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ(main) ๊ณผ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ํŒŒ์ผ ์ด ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋œ๋‹ค.
  • ํŒŒ์ผ ํ™•์žฅ์ž
    • ์ฃผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ: .mdf (Main Data File)
    • ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ํŒŒ์ผ: .ldf (Log Data File)
    • ๋ณด์กฐ ๋ฐ์ดํ„ฐ ํŒŒ์ผ: .ndf (๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ)

 

๐Ÿ–‡๏ธ ํ”„๋กœ์„ธ์Šค

Oracle์˜ ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ์€ ํฌ๊ฒŒ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค(Server Process)์™€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค(Background Process)๋กœ ๋‚˜๋‰œ๋‹ค.

Oracle Instance

  • Server Process : ์ „๋ฉด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋˜์ง€๋Š” ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค
  • Background Process : ์ง์ ‘ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ ์ฃผ์–ด์ง„ ์—ญํ•  ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค

โœ… SQL Server

  • SQL Server์€ ์Šค๋ ˆ๋“œ(Thread)๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์ด๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค ๋Œ€์‹  ์“ฐ๋ ˆ๋“œ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ž‘์—…์„ Worker Thread๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.

1. Server Process

(1) ์ฃผ์š” ์—ญํ• 

  • ๊ฐ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ „์šฉ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • SQL์„ ํŒŒ์‹ฑ(parsing) ํ•˜๊ณ , ํ•„์š”์‹œ ์ตœ์ ํ™”(optimization)๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„, ์ปค์„œ(cursor)๋ฅผ ์—ด์–ด SQL์„ ์‹คํ–‰ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ฝ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•œ ํ›„, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ(Result Set)์„ ์ƒ์„ฑํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „์†กํ•œ๋‹ค.
  • ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…์€ OS, I/O ์„œ๋ธŒ์‹œ์Šคํ…œ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค ๋“ฑ์— ๋Œ€์‹  ์ฒ˜๋ฆฌํ•˜๋„๋ก ์‹œ์Šคํ…œ Call์„ ํ†ตํ•ด ์š”์ฒญํ•œ๋‹ค.
    • ์˜ˆ์‹œ:
      • ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ DB ๋ฒ„ํผ ์บ์‹œ๋กœ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ ์žฌ
      • Dirty ๋ธ”๋ก(์ˆ˜์ •๋˜์—ˆ์ง€๋งŒ ์•„์ง ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ๋ธ”๋ก)์„ ์บ์‹œ์—์„œ ๋ฐ€์–ด๋‚ด๊ณ  Free ๋ธ”๋ก ํ™•๋ณด
      • Redo ๋กœ๊ทธ ๋ฒ„ํผ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์˜ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€

(2) ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์—ฐ๊ฒฐ ๋ฐฉ์‹

โ‘  ์ „์šฉ ์„œ๋ฒ„ ๋ฐฉ์‹ (Dedicated Server Mode)

์ „์šฉ ์„œ๋ฒ„ ๋ฐฉ์‹

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์Šค๋„ˆ(Listener)๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ํ•˜๋‚˜์˜ ๊ฐœ๋ณ„ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , PGA(Program Global Area) ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋œ๋‹ค.
  • ์ƒˆ๋กœ์šด ์š”์ฒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๋น„์šฉ์ด ๋†’์€ ๋ฐฉ์‹์ด๋‹ค.
  • SQL์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, Connection Pooling ๊ธฐ๋ฒ•์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค.

โœ… Connection Pool
→ ์ตœ์ดˆ ์—ฐ๊ฒฐ์„ ๋งบ์€ ํ›„, ์ž‘์—…์ด ๋๋‚˜๋„ ์ด๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์œ ์ง€(pooling) ํ•˜์—ฌ, ํ•„์š”ํ•  ๋•Œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

 

โ‘ก ๊ณต์œ  ์„œ๋ฒ„ ๋ฐฉ์‹ (Shared Server Mode)

๊ณต์œ  ์„œ๋ฒ„ ๋ฐฉ์‹

  • ํ•˜๋‚˜์˜ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ์„ธ์…˜์ด ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹
  • ๋ฏธ๋ฆฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋„์›Œ๋†“๊ณ , ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฅผ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
  • Connection Pooling ๊ธฐ๋ฒ•์„ DBMS ๋‚ด๋ถ€์— ๊ตฌํ˜„ํ•œ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

โ‘ข ์ „์šฉ ์„œ๋ฒ„ ๋ฐฉ์‹ vs ๊ณต์œ  ์„œ๋ฒ„ ๋ฐฉ์‹

  • ์ „์šฉ ์„œ๋ฒ„ ๋ฐฉ์‹: ์„ฑ๋Šฅ์ด ๋†’์ง€๋งŒ, ๋™์‹œ ์ ‘์†์ž๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜์—ฌ ์„œ๋ฒ„ ๋ถ€๋‹ด์ด ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • OLTP(์งง๊ณ  ๋นˆ๋ฒˆํ•œ ํŠธ๋žœ์žญ์…˜, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ™˜๊ฒฝ)์—์„œ๋Š” ๋น ๋ฅธ ์‘๋‹ต ์†๋„์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ค‘์š”ํ•˜๋ฏ€๋กœ Connection Pooling ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ณต์œ  ์„œ๋ฒ„ ๋ฐฉ์‹: ์„œ๋ฒ„ ์ž์›์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณต์œ ํ•˜๋ฏ€๋กœ CPU ๋ถ€ํ•˜๊ฐ€ ๋†’๊ฑฐ๋‚˜ ๋ณต์žกํ•œ SQL์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

2. Background Process

ํ”„๋กœ์„ธ์Šค ์„ค๋ช…
SMON (System Monitor) ์žฅ์•  ๋ฐœ์ƒ ํ›„ ์žฌ๊ฐ€๋™ ์‹œ ์ธ์Šคํ„ด์Šค ๋ณต๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ž„์‹œ ์„ธ๊ทธ๋จผํŠธ ๋ฐ ์ต์Šคํ…ํŠธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•œ๋‹ค.
PMON (Process Monitor) ์ด์ƒ์ด ์ƒ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณต๊ตฌํ•œ๋‹ค.
DBWn (Database Writer) ๋ฒ„ํผ ์บ์‹œ์— ์žˆ๋Š” Dirty ๋ธ”๋ก์„ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋กํ•œ๋‹ค.
LGWR (Log Writer) Redo ๋กœ๊ทธ ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ Redo ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•œ๋‹ค.
ARCn (Archiver) Redo ๋กœ๊ทธ๊ฐ€ ๋ฎ์–ด์“ฐ๊ธฐ ๋˜๊ธฐ ์ „์— Archive ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฑ์—…ํ•œ๋‹ค.
CKPT (Checkpoint) ๋งˆ์ง€๋ง‰ Checkpoint ์ดํ›„์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋„๋ก ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉฐ, ๊ธฐ๋ก ์™„๋ฃŒ ํ›„ Checkpoint ์ •๋ณด๋ฅผ ์ปจํŠธ๋กค ํŒŒ์ผ๊ณผ ๋ฐ์ดํ„ฐ ํŒŒ์ผํ—ค๋”์— ์ €์žฅํ•œ๋‹ค.
RECO (Recoverer) ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ๊ณผ์ •์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

 

๐Ÿ–‡๏ธ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ €์žฅ ๊ตฌ์กฐ

1. Datafile

์ €์žฅ ๊ตฌ์กฐ ๊ทธ๋ฆผ

 

(1) Physical

Data File : ๋””์Šคํฌ ์ƒ์˜ ๋ฌผ๋ฆฌ์ ์ธ OS ํŒŒ์ผ

  • ๋ฐ์ดํ„ฐ๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ €์žฅ๋œ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ํŒŒ์ผ ํ• ๋‹น ๋ฐ ๊ด€๋ฆฌ๋Š” DBMS๊ฐ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

(2) Logical

ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์ฆˆ ๊ตฌ์กฐ

โ‘  Tablespace : ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋‹ด๋Š” ์ปจํ…Œ์ด๋„ˆ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ€์žฅ ํฐ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„์ด๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ํŒŒ์ผ ๊ฒฐํ•ฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ €์žฅ๋  ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์„ ํƒํ•˜๊ณ  ์ต์Šคํ…ํŠธ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ DBMS๊ฐ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค์™€ ์„ธ๊ทธ๋จผํŠธ๋Š” 1 : N ๊ด€๊ณ„
    • ์ฆ‰, ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ, ํ•˜๋‚˜์˜ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์— ๊ฑธ์ณ ์ €์žฅ๋  ์ˆ˜ ์—†๋‹ค.
    • ๋‹ค๋งŒ, ํ•˜๋‚˜์˜ ์„ธ๊ทธ๋จผํŠธ๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๊ฑธ์ณ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค. (ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ)

โ‘ก Segment : ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ณต๊ฐ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จ์œ„

  • ํ…Œ์ด๋ธ”, ์ธ๋ฑ์Šค ๋“ฑ์˜ ์˜ค๋ธŒ์ ํŠธ(Object)๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ณต๊ฐ„์ด๋‹ค.
  • ํ•˜๋‚˜ ์ด์ƒ์˜ Extent๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ €์žฅ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ•œ ๊ฐœ ์ด์ƒ์˜ Extent๋ฅผ ์‚ฌ์šฉํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ํŠน์ • ์„ธ๊ทธ๋จผํŠธ์— ํ• ๋‹น๋œ ๋ชจ๋“  ์ต์Šคํ…ํŠธ๋Š” ํ•ด๋‹น ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์†ํ•œ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ฆ‰, ํ•˜๋‚˜์˜ ์„ธ๊ทธ๋จผํŠธ๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์— ๊ฑธ์ณ ์ €์žฅ๋  ์ˆ˜ ์—†๋‹ค.
  • ์„ธ๊ทธ๋จผํŠธ์˜ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•ด์ง€๋ฉด ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์—์„œ ์ƒˆ๋กœ์šด Extent๋ฅผ ์ถ”๊ฐ€ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋•Œ, ์ƒˆ๋กœ์šด ์ต์Šคํ…ํŠธ๋Š” ๊ธฐ์กด๊ณผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค.
    • ์ต์Šคํ…ํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ํฉ์–ด์ง€๋ฉด ๋””์Šคํฌ ๊ฒฝํ•ฉ์ด ์ค„์–ด๋“ค๊ณ  I/O๊ฐ€ ๋ถ„์‚ฐ๋˜๋Š” ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ค๋ธŒ์ ํŠธ์™€ ์„ธ๊ทธ๋จผํŠธ๋Š” 1:1 ๊ด€๊ณ„
    • ํŒŒํ‹ฐ์…˜๊ณผ๋Š” 1:M ๊ด€๊ณ„
    • ํŒŒํ‹ฐ์…˜ ํ…Œ์ด๋ธ”(๋˜๋Š” ์ธ๋ฑ์Šค)์„ ์ƒ์„ฑํ•˜๋ฉด, ๊ฐ ํŒŒํ‹ฐ์…˜๋ณ„๋กœ ๋ณ„๋„์˜ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • LOB ์ปฌ๋Ÿผ(Large Object, CLOB, BLOB ๋“ฑ)์€ ๋ณ„๋„์˜ ์„ธ๊ทธ๋จผํŠธ๋กœ ์ €์žฅ๋˜๋ฉฐ, ํ•ด๋‹น ํ…Œ์ด๋ธ”๊ณผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์— ์ €์žฅ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

โ‘ข Extent : ๊ณต๊ฐ„์„ ํ™•์žฅํ•˜๋Š” ๋‹จ์œ„

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ Block์œผ๋กœ ๊ตฌ์„ฑ๋œ ์—ฐ์†๋œ ๊ณต๊ฐ„์ด๋‹ค.
  • ์ต์Šคํ…ํŠธ ๋‚ด ๋ธ”๋ก๋“ค์€ ์—ฐ์†์ ์ด์ง€๋งŒ, ์ต์Šคํ…ํŠธ๋ผ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ์—ฐ์†๋œ ๊ณต๊ฐ„์ด ์•„๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ์ต์Šคํ…ํŠธ๋Š” ํ•˜๋‚˜์˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋…์ ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ฆ‰, ํ•œ ์ต์Šคํ…ํŠธ์— ์†ํ•œ ๋ชจ๋“  ๋ธ”๋ก์„ ๋™์ผํ•œ ์˜ค๋ธŒ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • Oracle๊ณผ ๋‹ฌ๋ฆฌ SQL Server์˜ ๊ฒฝ์šฐ, 2๊ฐœ ์ด์ƒ์˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ์ถ”๊ฐ€ ์ต์Šคํ…ํŠธ๋ฅผ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์ถ”๊ฐ€๋˜๋Š” ์ต์Šคํ…ํŠธ๋Š” ๊ธฐ์กด ์ต์Šคํ…ํŠธ์™€ ์—ฐ์†๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
    โ‘ฃ Block : ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋‹จ์œ„
  • DBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์ด๋‹ค.
  • I/O ๋‹จ์œ„๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ํ•œ ๋ธ”๋ก์€ ํ•˜๋‚˜์˜ ์˜ค๋ธŒ์ ํŠธ๋งŒ ๋…์ ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ธ”๋ก ๋‹จ์œ„ I/O
    • ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๋”๋ผ๋„ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ์†ํ•œ ์ „์ฒด ๋ธ”๋ก์„ ์ฝ์–ด์•ผ ํ•œ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ์€ ๋ถˆํ•„์š”ํ•œ ๋ธ”๋ก ์ ‘๊ทผ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • ์˜ตํ‹ฐ๋งˆ์ด์ €(Optimizer)์˜ ํŒ๋‹จ์—์„œ ๋ธ”๋ก ์•ก์„ธ์Šค ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ์ด๋‹ค.
  • ๋ธ”๋ก ์ฃผ์†Œ๊ฐ’ (DBA: Data Block Address): ๋ฐ์ดํ„ฐ ๋ธ”๋ก์€ ๋ช‡ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ช‡ ๋ฒˆ์งธ ๋ธ”๋ก์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณ ์œ ํ•œ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.
  • DBMS๋ณ„ ๋ธ”๋ก ํฌ๊ธฐ
    • Oracle: 2KB, 4KB, 8KB, 16KB, 32KB ๋“ฑ ๋‹ค์–‘ํ•œ ๋ธ”๋ก ํฌ๊ธฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • SQL Server: 8KB ๋ธ”๋ก(ํŽ˜์ด์ง€) ํฌ๊ธฐ ์‚ฌ์šฉ → ์ต์Šคํ…ํŠธ(Extent)๋Š” ํ•ญ์ƒ 64KB(8๊ฐœ ๋ธ”๋ก)

2. ์ž„์‹œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ

  • ๊ธฐ๋Šฅ : ๋Œ€๋Ÿ‰์˜ ์ •๋ ฌ ๋˜๋Š” ํ•ด์‹œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ, ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•  ๊ฒฝ์šฐ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • ํŠน์ง•
    • ์ž„์‹œ ์ €์žฅ ํ›„, ์ž๋™ ์‚ญ์ œ ์ฒ˜๋ฆฌ
    • Redo ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ๋ณต๊ตฌ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐฑ์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • DBMS ๋ณ„ ํŠน์ง•
    • Oracle : ์ž„์‹œ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋ณ„๋„๋กœ ์ง€์ • ๊ฐ€๋Šฅ
    • SQL Server : ๋‹จ ํ•˜๋‚˜์˜ tempdb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, tempdb๋Š” ์ „์—ญ ๋ฆฌ์†Œ์Šค๋กœ ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

3. ๋กœ๊ทธ ํŒŒ์ผ

Data file๊ณผ Control ํŒŒ์ผ์— ๊ฐ€ํ•ด์ง€๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ Redo ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ๋กœ ์ €์žฅ๋˜๋ฉฐ, ์ด๋Š” Redo ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก๋œ๋‹ค.

(1) ๋กœ๊ทธ ํŒŒ์ผ ๊ตฌ์กฐ

Redo ๋กœ๊ทธ ํŒŒ์ผ์€ Online Redo ๋กœ๊ทธ์™€ Archived(=Offline) Redo ๋กœ๊ทธ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

โ‘  Online Redo ๋กœ๊ทธ

Online Redo ๋กœ๊ทธ๋Š” Redo ๋กœ๊ทธ ๋ฒ„ํผ์— ๋ฒ„ํผ๋ง ๋œ ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค. ๋งˆ์ง€๋ง‰ ์ฒดํฌ ํฌ์ธํŠธ ์ดํ›„๋ถ€ํ„ฐ ์žฅ์•  ๋ฐœ์ƒ ์ง์ „๊นŒ์ง€ ์ˆ˜ํ–‰๋œ ํŠธ๋žœ์žญ์…˜๋“ค์„ ์žฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

  • ์บ์‹œ์— ์ €์žฅ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์•„์ง ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ •์ „ ๋“ฑ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋น„์ •์ƒ ์ข…๋ฃŒ๋˜๋ฉด, ์ž‘์—… ๋‚ด์šฉ์„ ์žƒ๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Online Redo ๋กœ๊ทธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ตœ์†Œ 2๊ฐœ ์ด์ƒ์˜ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ Redo ๋กœ๊ทธ ํŒŒ์ผ์ด ๊ฐ€๋“ ์ฐจ๋ฉด ๋‹ค์Œ ํŒŒ์ผ๋กœ ์ž๋™ ์ „ํ™˜ํ•˜๋Š” ๋กœ๊ทธ ์Šค์œ„์นญ(Log Switching)์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋ชจ๋“  Redo ๋กœ๊ทธ ํŒŒ์ผ์ด ๊ฐ€๋“ ์ฐจ๋ฉด ๋ผ์šด๋“œ ๋กœ๋นˆ(Round-Robin) ๋ฐฉ์‹์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ํŒŒ์ผ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ฎ์–ด์“ด๋‹ค. Archived(=Offline) Redo ๋กœ๊ทธ๋Š” Online Redo ๋กœ๊ทธ๊ฐ€ ๋ฎ์–ด์“ฐ์ด๊ธฐ ์ „์— ๋ฐฑ์—…๋œ ํŒŒ์ผ์ด๋‹ค. ๋””์Šคํฌ ์†์ƒ ๋“ฑ ๋ฌผ๋ฆฌ์  ์žฅ์• (๋ฏธ๋””์–ด ์žฅ์• ) ๋ฐœ์ƒ ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต๊ตฌ์— ์‚ฌ์šฉ๋œ๋‹ค.
  • โ‘ก Archived(=Offline) Redo ๋กœ๊ทธ

โœ… SQL Server

SQL Server์˜ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ํŒŒ์ผ(Transaction Log File)์€ Oracle์˜ Online Redo ๋กœ๊ทธ์™€ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.

  • ์ฃผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋‹น ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.
  • ํ™•์žฅ์ž : .ldf
  • ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ€์ƒ๋กœ๊ทธ ํŒŒ์ผ์ด๋ผ๋Š” ๋” ์ž‘์€ ๋‹จ์œ„์˜ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋ถ„ํ• ๋œ๋‹ค.
    • ์กฐ๊ฐํ™” ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๋กœ๊ทธ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ๋„‰๋„‰ํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ฆ๊ฐ€ ๋‹จ์œ„๋ฅผ ํฌ๊ฒŒ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

(2) ๋กœ๊ทธ ํŒŒ์ผ์˜ ์—ญํ• 

โ‘  Database(=Media) Recovery

 

Redo ๋กœ๊ทธ ํŒŒ์ผ์€ ๋””์Šคํฌ ์žฅ์• (Media Failure) ๋ฐœ์ƒ ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต๊ตฌ์— ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋•Œ, Archived Redo ๋กœ๊ทธ ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

โ‘ก Cache(=Instance) Recovery (instance Recovery ์‹œ roll forward ๋‹จ๊ณ„)

 

๋Œ€๋ถ€๋ถ„์˜ DBMS๋Š” I/O ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„ํผ ์บ์‹œ(Buffer Cache)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„ํผ ์บ์‹œ๋Š” ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ ์ด๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๋ฐ˜์˜๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ •์ „ ๋“ฑ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋น„์ •์ƒ ์ข…๋ฃŒ ๋˜๋ฉด ์ž‘์—… ๋‚ด์šฉ์ด ์œ ์‹ค๋œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Redo ๋กœ๊ทธ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ ์ข…๋ฃŒ ์ด์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌ(Instance Recovery)ํ•œ๋‹ค.

 

โ‘ข Fast Commit

 

๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์— ์ฆ‰์‹œ ๊ธฐ๋กํ•˜๋Š” ์ž‘์—…์€ Random ์•ก์„ธ์Šค ๋ฐฉ์‹์ด๋ฏ€๋กœ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค. ๋ฐ˜๋ฉด, ๋กœ๊ทธ ๊ธฐ๋ก์€ Append ๋ฐฉ์‹์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅด๋‹ค.

โ—Append ๋ฐฉ์‹
์ค‘๊ฐ„์— ๋ฒ„ํผ ์บ์‹œ(Buffer Cache)๋ฅผ ๊ฒฝ์œ ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์–ด ์ ์žฌ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ, ํŠธ๋žœ์žญ์…˜ ๋ฐœ์ƒ ์‹œ ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ง์ ‘ ๊ธฐ๋กํ•˜๋Š” ๋Œ€์‹ , ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ Append ๋ฐฉ์‹์œผ๋กœ ๋น ๋ฅด๊ฒŒ Redo ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•œ๋‹ค. ์ดํ›„, ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๋ธ”๋ก๊ณผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ๊ฐ„ ๋™๊ธฐํ™”๋Š” ์ ์ ˆํ•œ ์ˆ˜๋‹จ(์˜ˆ: DBWR, Checkpoint)์„ ์ด์šฉํ•ด Batch ๋ฐฉ์‹์œผ๋กœ ์ผ๊ด„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ฆ‰, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ๋ฒ„ํผ ๋ธ”๋ก์—๋งŒ ๊ธฐ๋ก๋œ ์ƒํƒœ์—์„œ ์•„์ง ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์•˜๋”๋ผ๋„, Redo ๋กœ๊ทธ ํŒŒ์ผ์„ ๋ฏฟ๊ณ  ๋น ๋ฅด๊ฒŒ Commit์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ Fast Commit์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ Oracle๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋น ๋ฅธ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ DBMS์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

(3) Fast Commit

Fast Commit ๋ฉ”์ปค๋‹ˆ์ฆ˜

โœ”๏ธ Fast Commit ๋ฉ”์ปค๋‹ˆ์ฆ˜

  1. ์‚ฌ์šฉ์ž๊ฐ€ Commit์„ ์‹คํ–‰ํ•œ๋‹ค.
  2. ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋Š” Commit ๋ ˆ์ฝ”๋“œ๋ฅผ Redo ๋กœ๊ทธ ๋ฒ„ํผ์— ๊ธฐ๋กํ•œ๋‹ค.
  3. LGWR ํ”„๋กœ์„ธ์Šค๋Š” ์ด๋ฅผ ์ฆ‰์‹œ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ์™€ ํ•จ๊ป˜ Redo ๋กœ๊ทธ ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค.
  4. Commit์„ ์ˆ˜ํ–‰ํ•œ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์— ์„ฑ๊ณต ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์™„๋ฃŒ๋˜๋ฉด ์•„์ง ์‚ฌ์šฉ์ž์˜ ๊ฐฑ์‹  ๋‚ด์šฉ์ด ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์•˜์ง€๋งŒ Instance Crash ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ Redo ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•ด ์–ธ์ œ๋“  ๋ณต๊ตฌ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜์—ˆ์œผ๋ฏ€๋กœ ์˜ค๋ผํด์€ ์•ˆ์‹ฌํ•˜๊ณ  ์ปค๋ฐ‹์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, Fast Commit์˜ ํ•ต์‹ฌ์€ 3๋ฒˆ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ‘  Log Force at Commit

 

Redo ๋กœ๊ทธ ๋ฒ„ํผ๋Š” ์ผ์ • ์ฃผ๊ธฐ๋กœ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜์ง€๋งŒ, ์ตœ์†Œํ•œ ์ปค๋ฐ‹ ์‹œ์ ์—๋Š” ๋ฐ˜๋“œ์‹œ Redo ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ Log Force at Commit ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋กœ๊ทธ๋ฒ„ํผ๋Š” ์œ ์‹ค๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ณผ์ •์€ ํŠธ๋žœ์žญ์…˜์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜ ์ ์ธ ๊ณผ์ •์ด๋‹ค.

 

โ‘ก Write Ahead Logging

 

๋ฒ„ํผ ์บ์‹œ ๋ธ”๋ก์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ Redo ๋กœ๊ทธ ๋ฒ„ํผ์— ๋จผ์ € ๊ธฐ๋ก๋ผ์•ผ ํ•˜๋ฉฐ, DBWR๊ฐ€ Dirty ๋ฒ„ํผ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ ์ „์— LGWR๊ฐ€ ํ•ด๋‹น Redo ์—”ํŠธ๋ฆฌ๋ฅผ ๋จผ์ € Redo ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ–ˆ์Œ์„ ๋ณด์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.. ์ด๋ฅผ Write Ahead Logging ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์ธ์Šคํ„ด์Šค ์žฅ์• ๊ฐ€ ๋ฐœ์ƒ ์‹œ, ๋กœ๊ทธ ํŒŒ์ผ์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ํŠธ๋ž™์žญ์…˜์€ ๋กค๋ฐฑ ์ฒ˜๋ฆฌ ํ•ด์•ผ ํ•œ๋‹ค. ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ด ์ด๋ฏธ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ €์žฅ๋œ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Redo ๋กœ๊ทธ ํŒŒ์ผ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ด ์„ ๊ธฐ๋ก ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ–‡๏ธ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

Oracle์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋Š” SGA(System Global Area)์™€ PGA(Process Global Area)๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

System Global Area(SGA) : ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.

  • SGA๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ฃผ์š” ์บ์‹œ ์˜์—ญ
    • DB ๋ฒ„ํผ ์บ์‹œ (DB Buffer Cache): ๋””์Šคํฌ I/O ์ตœ์†Œํ™”๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์บ์‹ฑ
    • ๊ณต์œ  ํ’€ (Shared Pool): SQL ์‹คํ–‰ ๊ณ„ํš, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ, ๋”•์…”๋„ˆ๋ฆฌ ์บ์‹œ ์ €์žฅ
    • ๋กœ๊ทธ ๋ฒ„ํผ (Redo Log Buffer): Redo ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์—ฌ ๋น ๋ฅธ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›
    • ์ถ”๊ฐ€์ ์œผ๋กœ Large Pool, Java Pool ๋“ฑ๋„ ํฌํ•จ๋˜๋ฉฐ, ์‹œ์Šคํ…œ ๊ตฌ์กฐ์™€ ์ œ์–ด ์ •๋ณด๋ฅผ ์บ์‹ฑํ•˜๋Š” ์˜์—ญ์ด ์กด์žฌํ•œ๋‹ค.
  • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์™€ ๊ณต์œ ๋˜๋ฏ€๋กœ ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์‹œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•˜๋‹ค.
    • ๋ž˜์น˜(Latch), ๋ฒ„ํผ Lock, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ Lock/Pin๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค ์ง๋ ฌํ™” ํ•œ๋‹ค.
  • SQL Server์—์„œ๋Š” Memory Pool์ด SGA์˜ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

Process Global Area(PGA) : ๊ฐœ๋ณ„ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ง€๋Š” ์ „์šฉ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๊ณ (Sort Area), ์„ธ์…˜๊ณผ ์ปค์„œ์— ๋Œ€ํ•œ ์ƒํƒœ ์ •๋ณด ์ €์žฅํ•œ๋‹ค.
  • SGA์™€ ๋‹ค๋ฅด๊ฒŒ ๋ž˜์น˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š” ์—†์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด SGA๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • SQL Server์€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์ด๋ฏ€๋กœ, PGA์„ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.
    • ์Šค๋ ˆ๋“œ๋Š” ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง€์ง€ ์•Š๊ณ , ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณต์œ ํ•œ๋‹ค.

1. DB ๋ฒ„ํผ ์บ์‹œ (DB Buffer Cache)

Oracle์€ SGA ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ ์ฝ๋Š” ๊ณผ์ •์—์„œ ๊ฑฐ์น˜๋Š” ์บ์‹œ ์˜์—ญ์„ DB ๋ฒ„ํผ ์บ์‹œ๋ผ๊ณ  ํ•œ๋‹ค.

(1) ๋ธ”๋ก ๋‹จ์œ„ I/O

DB ๋ฒ„ํผ ์บ์‹œ๋Š” ๋ธ”๋ก ๋‹จ์œ„๋กœ I/O๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์„ ์ฝ๊ณ ์ž ํ•˜๋”๋ผ๋„, ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ์†ํ•œ ๋ธ”๋ก ์ „์ฒด๋ฅผ ์ฝ์–ด์•ผ ํ•œ๋‹ค.

  • ๋ชจ๋“  ๋ธ”๋ก I/O ์ž‘์—…์€ Direct Path Read ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ์™ธ, ๋ฐ˜๋“œ์‹œ DB ๋ฒ„ํผ ์บ์‹œ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…๋„ ๋ฒ„ํผ ์บ์‹œ์— ์ ์žฌ๋œ ๋ธ”๋ก์„ ํ†ตํ•ด ์ˆ˜ํ–‰๋˜๋ฉฐ, ๋ณ€๊ฒฝ๋œ ๋ธ”๋ก(Dirty ๋ฒ„ํผ ๋ธ”๋ก)์€ DBWR ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋กํ•œ๋‹ค.(2) ๋ฒ„ํผ ์บ์‹œ ๊ตฌ์กฐ

DB ๋ฒ„ํผ ์บ์‹œ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table) ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ํ•ด์‹ฑํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค ๊ฐ’์œผ๋กœ DBA(Data Block Address, ๋ฐ์ดํ„ฐ ๋ธ”๋ก ์ฃผ์†Œ)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

โ‘  ๋ฒ„ํผ ๋ธ”๋ก ๊ฒ€์ƒ‰ ๊ณผ์ •

  1. ๋ฒ„ํผ ์บ์‹œ์—์„œ ๋จผ์ € ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
  2.  ๊ฒ€์ƒ‰ํ•  ๋ธ”๋ก ์ฃผ์†Œ๋ฅผ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„, ํ•ด๋‹น ํ•ด์‹œ ๋ฒ„ํ‚ท(Hash Bucket)์—์„œ ์ฒด์ธ์„ ๋”ฐ๋ผ ์Šค์บ”ํ•œ๋‹ค.
  3. ๋ฒ„ํผ ์บ์‹œ์— ๋ฐ์ดํ„ฐ ๋ธ”๋ก์ด ์กด์žฌํ•˜๋ฉด ์ฆ‰์‹œ ๋ฐ˜ํ™˜, ์—†์„ ๊ฒฝ์šฐ ๋””์Šคํฌ์—์„œ ๋กœ๋“œํ•œ๋‹ค.
    • ์ด๋•Œ, ๋””์Šคํฌ์—์„œ ๋ธ”๋ก์„ ์ฝ์–ด์™€ ๋ฒ„ํผ ์บ์‹œ์— ์ ์žฌํ•˜์—ฌ ํ•ด์‹œ์ฒด์ธ์— ์—ฐ๊ฒฐํ•œ ํ›„ ์ฝ๋Š”๋‹ค.

โ‘ก ํ•ด์‹œ ์ฒด์ธ (Hash Chain) ๊ตฌ์กฐ

  • Hash bucket → Hash Chain → Hash Header
  • DBA(๋ฐ์ดํ„ฐ ๋ธ”๋ก ์ฃผ์†Œ)๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜์— ์ž…๋ ฅํ•˜์—ฌ ํ•ด์‹œ ๊ฐ’ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋ธ”๋ก๋“ค์€ ํ•ด์‹œ ๋ฒ„ํ‚ท(Hash Bucket)์— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•œ๋‹ค.
  • ๊ฐ๊ฐ์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ด์‹œ ์ฒด์ธ(Hash Chain)์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋ฒ„ํผ ํ—ค๋”(Buffer Header)๋Š” ๋ฒ„ํผ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ์ •๋ณด, ๋ฒ„ํผ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ์‹ค์ œ ๋ฒ„ํผ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    • ๋ฒ„ํผ ๋ธ”๋ก ์ž์ฒด๊ฐ€ ํ•ด์‹œ ๊ตฌ์กฐ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฒ„ํผ ํ—ค๋”(Buffer Header)๊ฐ€ ํ•ด์‹œ ์ฒด์ธ์— ์—ฐ๊ฒฐ๋œ๋‹ค.
    • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ๋ฒ„ํผ ํ—ค๋”์˜ ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ๋ฒ„ํผ ๋ธ”๋ก์—์„œ ์กฐํšŒํ•œ๋‹ค.

ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์ฆˆ ๊ตฌ์กฐ


โ‘ข ์บ์‹œ ๋ฒ„ํผ ์ฒด์ธ

๊ฐ DB ๋ฒ„ํผ๋Š” DBA๊ฐ€ ํ•ด์‹œ ํ•จ์ˆ˜์— ์˜ํ•ด ํ•ด์‹œ๋˜์–ด Hash Tabel์— ํ• ๋‹น๋˜์–ด ๊ด€๋ฆฌ๋˜๋Š” ๋ฐ, ์ด๋ฅผ Cache Buffer Chain List๋ผ ํ•œ๋‹ค.

  • ์บ์‹œ ๋ฒ„ํผ ์ฒด์ธ List๋ž€ ์–‘๋ฐฉํ–ฅ์˜ ๋งํฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ, ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ํ• ๋‹น๋˜๋Š” Hash Table๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • Hash Table ์•ˆ์˜ Bucket์€ ๊ฐ DB ๋ฒ„ํผ๋“ค์˜ Header ์ •๋ณด๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด ๊ฐ Buffer๋“ค์€ LRU List ๋‚˜ Dirty List์˜ ํ•œ ๊ฐ€์ง€์— ์†ํ•œ๋‹ค.

โ‘ฃ์บ์‹œ ๋ฒ„ํผ LRU ์ฒด์ธ

๋ฒ„ํผ ํ—ค๋”๋Š” ํ•ด์‹œ ์ฒด์ธ๋ฟ ์•„๋‹ˆ๋ผ LRU ์ฒด์ธ์— ์˜ํ•ด์„œ๋„ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. DB ๋ฒ„ํผ ์บ์‹œ๋Š” ์œ ํ•œํ•œ ์ž์›์ด๋ฏ€๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์œ ์ง€ํ•˜๊ณ , ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ๋ธ”๋ก์€ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด LRU(Least Recently Used)์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋‹ค.

 

ใ€Š ํŠน์ง• ใ€‹

  • ๋ชจ๋“  ๋ฒ„ํผ ๋ธ”๋ก์„ ํ—ค๋”๋ฅผ LRU ์ฒด์ธ์— ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉ ๋นˆ๋„์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  • Free ๋ฒ„ํผ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๊ฐ€์žฅ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ๋ธ”๋ก๋ถ€ํ„ฐ ์ œ๊ฑฐํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•œ๋‹ค.
  • ๋ชจ๋“  ๋ฒ„ํผ ๋ธ”๋ก์€ Dirty ํ˜น์€ LRU ๋ฆฌ์ŠคํŠธ ์ค‘ ํ•˜๋‚˜์— ๋ฐ˜๋“œ์‹œ ์†ํ•œ๋‹ค.
  • ์ฝ๊ธฐ(Read) ๋˜๋Š” ์“ฐ๊ธฐ(Write) ์ž‘์—…์„ ์œ„ํ•ด ์•ก์„ธ์Šค ํ•˜๋Š” ๋™์•ˆ์—๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ์ผ์‹œ์ ์œผ๋กœ ์ œ์™ธ๋œ๋‹ค.
  • ์ž‘์—… ์™„๋ฃŒ ํ›„, ๋‹ค์‹œ ์›๋ž˜์˜ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ๋˜๊ฑฐ๋‚˜, ์ตœ์ดˆ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜์˜€์„ ๋•Œ๋Š” Dirty ๋ฆฌ์ŠคํŠธ๋กœ ์˜ฎ๊ฒจ๊ฐ„๋‹ค.

ใ€Š ๊ตฌ์„ฑ ใ€‹

  • Dirty ๋ฆฌ์ŠคํŠธ (LRUW List / LRU Write List)
    • ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ ์•„์ง ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์€ Dirty ๋ฒ„ํผ ๋ธ”๋ก์„ ๊ด€๋ฆฌํ•œ๋‹ค.
    • DBWR ํ”„๋กœ์„ธ์Šค๊ฐ€ Dirty ๋ฆฌ์ŠคํŠธ์˜ ๋ธ”๋ก์„ ๋””์Šคํฌ์— ๊ธฐ๋ก ํ›„ Free ๋ฒ„ํผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ด๋•Œ, LRU List์˜ ๋๋ถ€๋ถ„์— ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.
  • LRU ๋ฆฌ์ŠคํŠธ
    • ์•„์ง Dirty ๋ฆฌ์ŠคํŠธ๋กœ ์˜ฎ๊ฒจ์ง€์ง€ ์•Š์€ ๋‚˜๋จธ์ง€ ๋ฒ„ํผ ๋ธ”๋ก์„ ๊ด€๋ฆฌํ•œ๋‹ค.
    • LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋†’์€ ๋ธ”๋ก์€ ์œ ์ง€๋˜๊ณ , ๋‚ฎ์€ ๋ธ”๋ก์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์—†์–ด์ง€๋„๋ก ๊ด€๋ฆฌํ•œ๋‹ค.

ใ€Š ๋ฒ„ํผ ์ƒํƒœ ใ€‹

  1. Free ๋ฒ„ํผ (Clean Buffer)
    • ๋น„์–ด ์žˆ๋Š”(Unused) ์ƒํƒœ ๋˜๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ๊ณผ ๋™๊ธฐํ™”๋œ ์ƒํƒœ
    • ์–ธ์ œ๋“ ์ง€ ๋ฎ์–ด ์จ๋„ ๋ฌด๋ฐฉํ•œ ๊นจ๋—ํ•œ(Clean) ๋ฒ„ํผ ๋ธ”๋ก
    • ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ๋กœ๋”ฉํ•˜๋ ค๋ฉด ๋จผ์ € Free ๋ฒ„ํผ๋ฅผ ํ™•๋ณดํ•ด์•ผ ํ•œ๋‹ค.
    • Free ์ƒํƒœ์˜ ๋ฒ„ํผ๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ, Dirty ๋ฒ„ํผ๋กœ ์ „ํ™˜ํ•œ๋‹ค.
  2. Dirty ๋ฒ„ํผ (Dirty Buffer)
    • ๋ฒ„ํผ์— ์บ์‹œ ๋œ ์ดํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ ์•„์ง ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ์ƒํƒœ
      - ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๊ณผ ๋™๊ธฐํ™”(Synchronization)๊ฐ€ ํ•„์š”ํ•œ ๋ฒ„ํผ ๋ธ”๋ก
      - Dirty ๋ฒ„ํผ๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์œ„ํ•ด ์žฌ์‚ฌ์šฉ๋˜๋ ค๋ฉด ๋จผ์ € ๋””์Šคํฌ์— ๊ธฐ๋ก๋ผ์•ผ ํ•œ๋‹ค.
      - ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜๋Š” ์ˆœ๊ฐ„, ๋‹ค์‹œ Free ๋ฒ„ํผ๋กœ ์ „ํ™˜๋œ๋‹ค.
  3. Pinned ๋ฒ„ํผ (Pinned Buffer)
    • ํ˜„์žฌ ์ฝ๊ธฐ(Read) ๋˜๋Š” ์“ฐ๊ธฐ(Write) ์ž‘์—…์ด ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ๋ฒ„ํผ ๋ธ”๋ก
    • ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ํ•ด๋‹น ๋ฒ„ํผ์— ์ ‘๊ทผ ๋ถˆ๊ฐ€

(3) ๋™์‹œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ

Oracle์˜ SGA(System Global Area)๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋ฏ€๋กœ, ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋ฒ„ํผ ๋ธ”๋ก์„ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™์‹œ ์ ‘๊ทผ์œผ๋กœ ์ธํ•œ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์•ก์„ธ์Šค ์ง๋ ฌํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด ๋ž˜์น˜(Latch) ์™€ ๋ฒ„ํผ Lock ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

โ‘  Latch
๋ž˜์น˜๋Š” ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ์ž ๊ธˆ(Locking) ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ, ๋ž˜์น˜๋ฅผ ํš๋“ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ํ•ด๋‹น ์ž๋ฃŒ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์‹œ ์ ‘๊ทผ์„ ์ง๋ ฌํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

  • cache buffers chains Latch
    • ํ•ด์‹œ ์ฒด์ธ์„ ๋ณดํ˜ธํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.
    • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ผํ•œ ํ•ด์‹œ ์ฒด์ธ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์ง๋ ฌํ™”(Serialization) ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ๋ž˜์น˜๋ฅผ ํš๋“ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฒฝํ•ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด latch: cache buffers chains ์ด๋ฒคํŠธ๋ฅผ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.
  • cache buffers chains lru Latch : LRU ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

โ‘ก ๋ฒ„ํผ Lock
๋ฒ„ํผ Lock์€ ๊ฐœ๋ณ„ ๋ฒ„ํผ ๋ธ”๋ก์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ, ์ฝ๊ธฐ(Read) ๋˜๋Š” ๋ณ€๊ฒฝ(Write) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ๋ฒ„ํผ Lock์„ ํš๋“ํ•ด์•ผ ํ•œ๋‹ค. ๋ฒ„ํผ Lock์„ ํš๋“ํ•œ ํ›„, ์ฆ‰์‹œ Latch ํ•ด์ œ ์ฒ˜๋ฆฌํ•˜์—ฌ Latch๋ฅผ ์˜ค๋ž˜ ์œ ์ง€ํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

 

ใ€Š Lock ๋ชจ๋“œ ใ€‹

  • Share ๋ชจ๋“œ (Shared Lock) → ์ฝ๊ธฐ(Read) ์ž‘์—… ์‹œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๊ฐ€๋Šฅ
  • Exclusive ๋ชจ๋“œ (Exclusive Lock) → ๋ณ€๊ฒฝ(Write) ์ž‘์—… ์‹œ ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ํš๋“ ๊ฐ€๋Šฅ
    • Exclusive Lock์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ํš๋“ ๊ฐ€๋Šฅํ•˜๋‹ค. (์•ก์„ธ์Šค ์ง๋ ฌํ™” ์ฒ˜๋ฆฌ)

ใ€Š ๋Œ€๊ธฐ ์ด๋ฒคํŠธ ใ€‹

ํ”„๋กœ์„ธ์Šค๊ฐ€ cache buffers chains Latch๋ฅผ ํš๋“ํ•œ ํ›„, ์›ํ•˜๋Š” ๋ฒ„ํผ ๋ธ”๋ก์ด ์ด๋ฏธ Exclusive Lock ์ƒํƒœ๋ผ๋ฉด?

  1. ๋ž˜์น˜๋ฅผ ๊ณ„์† ์œ ์ง€ํ•˜๋ฉด ์•ˆ ๋˜๋ฏ€๋กœ, ๋ฒ„ํผ Lock ๋Œ€๊ธฐ์ž ๋ชฉ๋ก(Waiter List)์— ๋“ฑ๋กํ•˜๊ณ  ๋ž˜์น˜๋ฅผ ํ•ด์ œํ•œ๋‹ค.
  2. ๋ฒ„ํผ Lock์ด ํ•ด์ œ๋˜๋ฉด ๋Œ€๊ธฐ ์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ Lock์„ ํš๋“ํ•˜๊ณ  ์ž‘์—… ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ด ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€๊ธฐ ์ด๋ฒคํŠธ๊ฐ€ "buffer busy waits" ์ด๋ฒคํŠธ์ด๋‹ค.

 

2. ๊ณต์œ  ํ’€ (Shared Pool)

๊ณต์œ  ํ’€(Shared Pool)์€ ๋”•์…”๋„ˆ๋ฆฌ ์บ์‹œ(Dictionary Cache)์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ(Library Cache)๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ๋œ๋‹ค.

 

โœ… SQL Server์—์„œ๋Š” ํ”„๋กœ์‹œ์ € ์บ์‹œ(Procedure Cache)๋ผ๊ณ  ํ•œ๋‹ค.

(1) ๋”•์…”๋„ˆ๋ฆฌ ์บ์‹œ (Dictionary Cache)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋”•์…”๋„ˆ๋ฆฌ ์ •๋ณด๋ฅผ ์บ์‹ฑํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋”•์…”๋„ˆ๋ฆฌ : ํ…Œ์ด๋ธ”, ์ธ๋ฑ์Šค, ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค, ํ…Œ์ดํ„ฐํŒŒ์ผ, ์„ธ๊ทธ๋จผํŠธ, ์ต์Šคํ…ํŠธ, ์‚ฌ์šฉ์ž, ์ œ์•ฝ, Sequence, DB Link์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ €์žฅ๋˜์—ˆ๋‹ค๊ฐ€ ๋ฒ„ํผ ์บ์‹œ๋ฅผ ํ†ตํ•ด ์ฝํžˆ์ง€๋งŒ, ๋ฉ”ํƒ€ ์ •๋ณด๋Š” ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅ๋˜๋ฉฐ, ์ด๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ ์บ์‹œ๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ธ”๋ก ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ Row ๋‹จ์œ„๋กœ ์ฝ๊ณ  ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์šฐ ์บ์‹œ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

(2) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ (Library Cache)

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•œ SQL ๋ฌธ, ์‹คํ–‰ ๊ณ„ํš, ์ €์žฅ ํ”„๋กœ์‹œ์ € ๋“ฑ์„ ์ €์žฅํ•˜๋Š” ์บ์‹œ ์˜์—ญ์ด๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ๋Š” ๊ฐ™์€ SQL ๋ฌธ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋  ๊ฒฝ์šฐ, ๋ฐ˜๋ณต์ ์ธ ํ•˜๋“œ ํŒŒ์‹ฑ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์บ์‹œ ๊ณต๊ฐ„์ด๋‹ค.
  • ํ•˜๋“œ ํŒŒ์‹ฑ์€ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๋Š” ์ž‘์—…์ด๋ฏ€๋กœ, ์ด๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์บ์‹œ์˜ ํšจ์œจ์  ๊ด€๋ฆฌ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

3. Redo ๋กœ๊ทธ ๋ฒ„ํผ(Redo Log Buffer)

Redo ๋กœ๊ทธ ๋ฒ„ํผ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค. ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•  ๋•Œ, ์ฆ‰์‹œ Redo ๋กœ๊ทธ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋จผ์ € Redo ๋กœ๊ทธ ๋ฒ„ํผ์— ๊ธฐ๋ก๋œ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋ธ”๋ก ๋ฒ„ํผ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ Redo ๋กœ๊ทธ ๋ฒ„ํผ์— ๋จผ์ € ๊ธฐ๋กํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
  • ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ๋ฅผ ํŒŒ์ผ์— ๊ณง๋ฐ”๋กœ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋จผ์ € ๋กœ๊ทธ ๋ฒ„ํผ์— ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์€ ์ผ์ •๋Ÿ‰ ๋ชจ์•˜๋‹ค๊ฐ€ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ์†๋„๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์ผ์ • ์‹œ์ ๋งˆ๋‹ค LGWR ํ”„๋กœ์„ธ์Šค ๊ฐ€ Redo ๋กœ๊ทธ ๋ฒ„ํผ์˜ ๋‚ด์šฉ์„ Redo ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•œ๋‹ค.
  • ์‹œ์Šคํ…œ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑํ•  ๋•Œ๋งˆ๋‹ค log file sync ๋Œ€๊ธฐ ์ด๋ฒคํŠธ ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋Š” LGWR ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋กœ๊ทธ ๋ฒ„ํผ ๋‚ด์šฉ์„ Redo ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•  ๋•Œ๊นŒ์ง€ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” ํ˜„์ƒ ๋•Œ๋ฌธ์ด๋‹ค.

โœ”๏ธ Redo ๋กœ๊ทธ ํŒŒ์ผ ๊ธฐ๋ก ์‹œ์ 

  • 3์ดˆ๋งˆ๋‹ค DBWR ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ์‹ ํ˜ธ๋ฅผ ๋ฐ›์„ ๋•Œ
    • DBWR์€ Dirty ๋ฒ„ํผ๋ฅผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๊ธฐ ์ „์— ๋กœ๊ทธ ๋ฒ„ํผ ๋‚ด์šฉ์„ Redo ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋„๋ก LGWR์—๊ฒŒ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • ๋กœ๊ทธ ๋ฒ„ํผ์˜ 1/3์ด ์ฐจ๊ฑฐ๋‚˜ ๊ธฐ๋ก๋œ Redo ๋ ˆ์ฝ”๋“œ์˜ ํฌ๊ธฐ๊ฐ€ 1MB๋ฅผ ์ดˆ๊ณผํ•  ๋•Œ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ

๐Ÿ“Œ Undo

Undo ์„ธ๊ทธ๋จผํŠธ๋Š” ์ผ๋ฐ˜์ ์ธ ํ…Œ์ด๋ธ” ์„ธ๊ทธ๋จผํŠธ์™€ ๊ตฌ์กฐ์ ์œผ๋กœ ๋น„์Šทํ•˜๋ฉฐ,

  • ์ต์Šคํ…ํŠธ ๋‹จ์œ„๋กœ ํ™•์žฅ๋˜๋ฉฐ
  • ๋น ๋ฅธ ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ์œ„ํ•ด Undo ๋ธ”๋ก์„ ๋ฒ„ํผ ์บ์‹œ์— ์บ์‹ฑํ•˜๋ฉฐ
  • ๋ฐ์ดํ„ฐ ์œ ์‹ค ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ Redo ๋กœ๊ทธ์— ๊ธฐ๋กํ•œ๋‹ค.

๋‹จ, Undo ์„ธ๊ทธ๋จผํŠธ๋Š” ์ €์žฅํ•˜๋Š” ๋‚ด์šฉ์ด ๋‹ค๋ฅด๋‹ค. ๊ฐ ํŠธ๋žœ์žญ์…˜ ๋ณ„๋กœ Undo ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํ• ๋‹นํ•˜๋ฉฐ, ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰ํ•œ ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ Undo ๋ ˆ์ฝ”๋“œ ๋‹จ์œ„๋กœ ์ €์žฅํ•œ๋‹ค.

 

โ‘  Undo ์‚ฌ์šฉ ๋ชฉ์ 

  • Transaction Rollback : ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ณ  ๋กค๋ฐฑํ•  ๊ฒฝ์šฐ, Undo ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋˜๋Œ๋ฆฐ๋‹ค.
  • Transaction Recovery - Instance Recovery ์‹œ rollback ๋‹จ๊ณ„
    • Instance Crash ํ›„, Redo๋ฅผ ์ด์šฉํ•ด Roll Forward ๋‹จ๊ณ„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ตœ์ข… ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ๊นŒ์ง€ ๋ชจ๋‘ ๋ณต๊ตฌ๋œ๋‹ค. (Redo ๋กœ๊ทธ ํŒŒ์ผ ๊ธฐ๋ก ์‹œ์ ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ์ด์™ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ)
    • ๊ทธ๋Ÿฌ๋‚˜ ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋กค๋ฐฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ, Undo ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.
  • Read Consistency :
    • Undo ๋ฐ์ดํ„ฐ๋Š” ์ฝ๊ธฐ ์ผ๊ด€์„ฑ(Read Consistency)์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
    • ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์•ˆ, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ๋ณ€๊ฒฝ ์ „ ๋ฐ์ดํ„ฐ(Undo ๋ธ”๋ก์— ์ €์žฅ๋œ ์ด์ „ ๊ฐ’)๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•œ๋‹ค.
    • DB2, SQK Server, Sybase๋Š” Locking ๊ธฐ๋ฒ•์„ ์ด์šฉํ•ด ์ฝ๊ธฐ ์ผ๊ด€์„ฑ์„ ๊ตฌํ˜„ํ•˜์ง€๋งŒ, ์˜ค๋ผํด์€ Undo ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

โ‘ก vs Redo

  • Redo : Redo ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์žฅ์•  ๋ฐœ์ƒ ํ›„ ์ปค๋ฐ‹๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณต๊ตฌํ•œ๋‹ค.
  • Undo : Undo ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋กค๋ฐฑ ๋˜๋Š” ์ฝ๊ธฐ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๋ณ€๊ฒฝ ์ „ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•œ๋‹ค.

 

Reference