002. DBMS and Buffer - llighter/database GitHub Wiki

SQL ๋ ˆ๋ฒจ์—…

Memory Hierachy Wikipedia

Transaction Commit ... SQL Database Engine Blog

1. ๊ณต์งœ ๋ฐฅ์€ ์กด์žฌํ• ๊นŒ?

  • ๊ธฐ์–ต ๋น„์šฉ : ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์†Œ๋ชจ๋˜๋Š” ๋น„์šฉ
  • ์ ‘๊ทผ ์†๋„ <-> ๊ธฐ์–ต ๋น„์šฉ : ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

2. DBMS์™€ ๊ธฐ์–ต์žฅ์น˜์˜ ๊ด€๊ณ„

- HDD

  • 2์ฐจ ๊ธฐ์–ต์žฅ์น˜

- Memory

  • 1์ฐจ ๊ธฐ์–ต์žฅ์น˜

- ๋ฒ„ํผ๋ฅผ ํ™œ์šฉํ•œ ์†๋„ ํ–ฅ์ƒ

  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํฌ๋‹ค๋ฉด ๋””์Šคํฌ ์ ‘๊ทผ์„ ์ค„์—ฌ์ค€๋‹ค.
  • ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋ชฉ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ : ๋ฒ„ํผ(buffer) ๋˜๋Š” ์บ์‹œ(cache)
  • ๋ฒ„ํผ ๋งค๋‹ˆ์ € : '๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ, ์–ด๋А ์ •๋„์˜ ๊ธฐ๊ฐ„๋™์•ˆ ์˜ฌ๋ฆด์ง€' ๊ด€๋ฆฌ

3. ๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ๋ฒ„ํผ

DBMS๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํฌ๊ฒŒ ๋‘ ์ข…๋ฅ˜์ด๋‹ค.

  • ๋ฐ์ดํ„ฐ ์บ์‹œ
  • ๋กœ๊ทธ ๋ฒ„ํผ

๋ฐ์ดํ„ฐ ์บ์‹œ

  • ๋””์Šคํฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€
  • '๋””์Šคํฌ๋ฅผ ๊ฑด๋“œ๋ฆฌ๋Š” ์ž๋Š” ๋ถˆํ–‰ํ•ด์ง„๋‹ค.'

๋กœ๊ทธ ๋ฒ„ํผ

  • ๊ฐฑ์‹  ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ(INSERT, DELETE, UPDATE, MERGE)
  • DBMS๋Š” ๊ฐฑ์‹  ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ SQL ๊ตฌ๋ถ„์„ ๋ฐ›์œผ๋ฉด ๋กœ๊ทธ ๋ฒ„ํผ ์œ„์— ๋ณ€๊ฒฝ ์ •๋ณผ๋ฅด ๋ณด๋‚ด๊ณ  ์ดํ›„์— ๋””์Šคํฌ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐฑ์‹  ์ฒ˜๋ฆฌ๋Š” SQL ๊ตฌ๋ฌธ์˜ ์‹คํ–‰ ์‹œ์ ๊ณผ ์ €์žฅ์†Œ์— ๊ฐฑ์‹ ํ•˜๋Š” ์‹œ์ ์— ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ด๋‹ค.
  • ๋””์Šคํฌ I/O๋Š” ๋ถ€ํ•˜๊ธฐ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์ด ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ•œ๋ฒˆ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์ƒ ์œ ๋ฆฌํ•˜๋‹ค.

4. ๋ฉ”๋ชจ๋ฆฌ์˜ ์„ฑ์งˆ์ด ์ดˆ๋ž˜ํ•˜๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

- ํœ˜๋ฐœ์„ฑ์˜ ๋ฌธ์ œ์ 

  • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ ์œ ์‹ค๋กœ ์ธํ•œ ๋ถ€์ •ํ•ฉ ๋ฐœ์ƒ
  • ๋ฐ์ดํ„ฐ ์บ์‹œ์˜ ๊ฒฝ์šฐ ์›๋ณธ ๋ฐ์ดํ„ฐ๋Š” ๋‚จ์•„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ์ฝ์œผ๋ฉด ๋จ
  • ๋กœ๊ทธ ๋ฒ„ํผ ๊ฐ™์€ ๊ฒฝ์šฐ ๊ฐฑ์‹  ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ex. ์€ํ–‰ ์ž…์ถœ๊ธˆ
  • ๋”ฐ๋ผ์„œ ์ปค๋ฐ‹(Commit) ์‹œ์ ์—์„œ ๊ฐฑ์‹  ์ •๋ณด๋ฅผ ๋กœ๊ทธ ํŒŒ์ผ(Disk)์— ์“ด๋‹ค.
  • ์ปค๋ฐ‹์œผ๋กœ ์ธํ•ด ๋””์Šคํฌ์— ๋™๊ธฐ ์ ‘๊ทผ ํ•  ๋•Œ ์ง€์—ฐ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ <-> ์„ฑ๋Šฅ : ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„

5. ์‹œ์Šคํ…œ ํŠน์„ฑ์— ๋”ฐ๋ฅธ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

- ๋ฐ์ดํ„ฐ ์บ์‹œ์™€ ๋กœ๊ทธ ๋ฒ„ํผ์˜ ํฌ๊ธฐ

  • ์ดˆ๊นƒ๊ฐ’ : ๋ฐ์ดํ„ฐ ์บ์‹œ > ๋กœ๊ทธ ๋ฒ„ํผ
  • DB๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒ€์ƒ‰์„ ๋ฉ”์ธ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ
  • cf. MySQL์˜ ๋งค๋‰ด์–ผ : '์„œ๋ฒ„๊ฐ€ DB์ „์šฉ์ด๋ผ๋ฉด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ 80%๋ฅผ ๋ฒ„ํผ ํ’€๋กœ ํ• ๋‹นํ•ด๋„ ๊ดœ์ฐฎ๋‹ค.'

- ๊ฒ€์ƒ‰๊ณผ ๊ฐฑ์‹  ์ค‘์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ

  • ๊ฒ€์ƒ‰ <-> ๊ฐฑ์‹  : ํŠธ๋ ˆ์ด๋“œ์˜คํ”„
  • DBMS ์ค‘ ์ž๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๊ธฐ๋„ ํ•˜์ง€๋งŒ ๋ฆฌ์Šคํฌ๊ฐ€ ์žˆ๋‹ค.

6. ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ '์›Œํ‚น ๋ฉ”๋ชจ๋ฆฌ'

- ์–ธ์ œ ์‚ฌ์šฉ๋ ๊นŒ?

  • ์›Œํ‚น ๋ฉ”๋ชจ๋ฆฌ(Working Memory): ์ •๋ ฌ ๋˜๋Š” ํ•ด์‹œ ๊ด€๋ จ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ์ž‘์—…์šฉ ์˜์—ญ
  • ์ •๋ ฌ : ORDER BY, ์ง‘ํ•ฉ ์—ฐ์‚ฐ, ์œˆ๋„์šฐ ํ•จ์ˆ˜ ๋“ฑ
  • ํ•ด์‹œ : ํ…Œ์ด๋ธ” ๋“ฑ์˜ ๊ฒฐํ•ฉ
  • ORACLE์˜ ๊ฒฝ์šฐ PGA(Program Global Area) ๋ผ๊ณ  ๋ถ€๋ฆ„
  • ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ๋˜๊ณ , ์ข…๋ฃŒ๋˜๋ฉด ํ•ด์ œ๋˜๋Š” ์ž„์‹œ ์˜์—ญ
  • ์ด ์˜์—ญ์ด ๋‹ค๋ฃจ๋ ค๋Š” ๋ฐ์ดํ„ฐ์–‘๋ณด๋‹ค ์ž‘์•„ ๋ถ€์กฑํ•ด์ง€๋Š” ๊ฒฝ์šฐ DBMS๋Š” ์ €์žฅ์†Œ(Disk)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • cf. OS์—์„œ์˜ ์Šค์™‘(swap)
  • Oracle : ์ž„์‹œ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค(TEMP Tablespace)

- ๋ถ€์กฑํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

  • ์ €์žฅ์†Œ(Disk) ์ ‘๊ทผ์œผ๋กœ ์ „์ฒด์ ์ธ ์†๋„ ์ €ํ•˜