๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

[DB] INSERTํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋Š” ์–ด๋””์— ์ €์žฅ๋ ๊นŒ?(๋ฐ์ดํ„ฐ ์ €์žฅ ๊ตฌ์กฐ์™€ ์—‘์„ธ์Šค)

์„œ์•„๋ž‘๐Ÿ˜ 2024. 12. 15. 01:34

 

๋“ค์–ด๊ฐ€๋ฉฐ

๋กœ์ปฌ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค์น˜ํ•ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์–ด๋Š์ •๋„ ์•„์‹œ๊ฒ ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋Š” ํŒŒ์ผ๋กœ ์ €์žฅ์ด ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ฆฌ์ ์ธ ๊ณ„์ธต์—์„œ๋Š” ํŒŒ์ผ๊ณผ ๋ธ”๋ก, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ์ด ๋˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŒŒ์ผ์— ์“ฐ์—ฌ์ง„ ๋ฐ์ดํ„ฐ๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์—ญํ• ์„ ํ•˜์ฃ . ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์— SQL์„ ๋ณด๋‚ด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ฑฐ๋‚˜, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ์šฐ๋ฆฌ๋Š” ๋•Œ๋ก  ๋ณต์žกํ•œ SQL๋„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋‹จ์ˆœํžˆ SQL๋งŒ ์ž˜ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž˜ ์•„๋Š” ๊ฒƒ์ด ์•„๋‹ ๊ฒ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‚ด๋ถ€ ์ž‘๋™ ์›๋ฆฌ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์„ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ฒƒ์„ ์‹ ๊ฒฝ์จ์•ผํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ๋ฐ์ดํ„ฐ ํŒŒ์ผ๊ณผ ๋ธ”๋ก

๋ฐ์ดํ„ฐ๋Š” ๋””์Šคํฌ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ์œ„์— ์ €์žฅ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

1-1. ๋ฐ์ดํ„ฐ ํŒŒ์ผ ๊ตฌ์„ฑ

  • ๋ฐ์ดํ„ฐ ํŒŒ์ผ(Data File): ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ธ”๋ก(Block)์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ, ๋ธ”๋ก์€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์ €์žฅ ๋ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ธ”๋ก ํฌ๊ธฐ๋Š” 4KB, 8KB, 16KB ๋“ฑ์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

1-2. ๋ธ”๋ก์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ

  • ํ—ค๋”(Header): ๋ธ”๋ก์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(๋ธ”๋ก ๋ฒˆํ˜ธ, ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ๋Ÿ‰ ๋“ฑ)๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ(Data): ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.
  • ํ”„๋ฆฌ ๋ฆฌ์ŠคํŠธ(Free Space): ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋นˆ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ์‹œ ๊ธฐ์กด ๋ธ”๋ก์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ณต๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: https://dotnettutorials.net/lesson/availability-and-optimization-of-free-space-in-oracle/

 

 


 

2. ํ…Œ์ด๋ธ” ๊ด€๋ฆฌ

ํ…Œ์ด๋ธ”์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰(Row) ๋‹จ์œ„๋กœ ์ €์žฅํ•˜๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

2-1. ํ…Œ์ด๋ธ” ์Šคํ† ๋ฆฌ์ง€ ๊ตฌ์กฐ

  • ํ…Œ์ด๋ธ”์€ ํ–‰(Row) ๋‹จ์œ„๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ํ–‰์€ ๋ ˆ์ฝ”๋“œ(Record)๋กœ ๋ถˆ๋ฆฌ๋ฉฐ, ๋ ˆ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค:
    • ๋ ˆ์ฝ”๋“œ ํ—ค๋”: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(๋ ˆ์ฝ”๋“œ ํฌ๊ธฐ, ํŠธ๋žœ์žญ์…˜ ID ๋“ฑ).
    • ๋ฐ์ดํ„ฐ ํ•„๋“œ: ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’.
    • ROWID: ํ–‰์˜ ๊ณ ์œ  ์‹๋ณ„์ž. ๋ธ”๋ก ๋ฒˆํ˜ธ์™€ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: https://velog.io/@impala/DB-Data-Storage-Structure

2-2. ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค

ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค๋Š” ๋…ผ๋ฆฌ์  ๊ณ„์ธต์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋…ผ๋ฆฌ์  ์Šคํ† ๋ฆฌ์ง€ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ(Data File)์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํŒŒ์ผ(Data File)

  • ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค์˜ ๋ฌผ๋ฆฌ์  ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
  • ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์‹ค์ œ๋กœ ์ €์žฅ๋˜๋Š” ํŒŒ์ผ์ด๋ฉฐ, ๋ธ”๋ก(Block) ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์„ธ๊ทธ๋จผํŠธ(Segment)

  • ํ…Œ์ด๋ธ”, ์ธ๋ฑ์Šค ๋“ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ์„ธ๊ทธ๋จผํŠธ๋Š” ์—ฌ๋Ÿฌ ๋ธ”๋ก์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ต์Šคํ…ํŠธ(Extent)

  • ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ณต๊ฐ„์ด ํ•„์š”ํ•  ๋•Œ ํ• ๋‹น๋˜๋Š” ์—ฐ์†์ ์ธ ๋ธ”๋ก ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค.
  • ์„ธ๊ทธ๋จผํŠธ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ต์Šคํ…ํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋ธ”๋ก(Block)

  • ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์ตœ์†Œ ์ €์žฅ ๋‹จ์œ„๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: https://velog.io/@hoonki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%80%EC%9E%A5-%EA%B5%AC%EC%A1%B0-%EB%B0%8F-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%95%A1%EC%84%B8%EC%8A%A4-%EB%B0%A9%EB%B2%95

 

2-3 ์ฃผ์š” DBMS์—์„œ์˜ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค

Oracle

  • SYSTEM ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‹œ์Šคํ…œ ๋ฐ์ดํ„ฐ(๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋“ฑ)๋ฅผ ์ €์žฅ.
  • SYSAUX ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค: ์ถ”๊ฐ€ ์‹œ์Šคํ…œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ.
  • USERS ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค: ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ €์žฅ.
  • TEMP ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค: ์ž„์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ(์ •๋ ฌ ์ž‘์—… ๋“ฑ).
  • UNDO ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค: ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ์„ ์œ„ํ•œ UNDO ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ.

MySQL (InnoDB)

  • MySQL์—์„œ InnoDB๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ  ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค(ibdata1 ํŒŒ์ผ) ๋˜๋Š” ๊ฐœ๋ณ„ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค(๊ฐ ํ…Œ์ด๋ธ”๋งˆ๋‹ค ๋ณ„๋„ ํŒŒ์ผ)๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณต์œ  ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ณ„ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ด๋ธ”๋ณ„๋กœ ๋ณ„๋„์˜ .ibd ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

PostgreSQL

  • PostgreSQL์€ ์ง์ ‘์ ์œผ๋กœ "ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค"๋ผ๋Š” ๊ฐœ๋…์„ ์ง€์›ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ €์žฅํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค๋Š” pg_default์ด๋ฉฐ, ํŠน์ • ํ…Œ์ด๋ธ” ๋˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ณ„๋„์˜ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค์— ์ €์žฅํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

3. ์ธ๋ฑ์Šค ๊ด€๋ฆฌ

์ธ๋ฑ์Šค๋Š” ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

3-1. B-Tree ์ธ๋ฑ์Šค

  • ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค ์œ ํ˜•์œผ๋กœ, ๋ฐ์ดํ„ฐ๋Š” ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์กฐ:
    • ๋ฃจํŠธ ๋…ธ๋“œ(Root Node): ์ตœ์ƒ์œ„ ๋…ธ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์‹œ์ž‘์ .
    • ๋‚ด๋ถ€ ๋…ธ๋“œ(Intermediate Node): ๋ฐ์ดํ„ฐ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•˜๋Š” ์ค‘๊ฐ„ ๋…ธ๋“œ.
    • ๋ฆฌํ”„ ๋…ธ๋“œ(Leaf Node): ์‹ค์ œ ๋ฐ์ดํ„ฐ(๋˜๋Š” ๋ฐ์ดํ„ฐ ์œ„์น˜)๊ฐ€ ์ €์žฅ๋œ ์ตœํ•˜์œ„ ๋…ธ๋“œ.
  • ์žฅ์ : ๋ฒ”์œ„ ๊ฒ€์ƒ‰๊ณผ ์ˆœ์ฐจ ๊ฒ€์ƒ‰์— ํšจ์œจ์ .

3-2. Hash ์ธ๋ฑ์Šค

  • ํ‚ค์™€ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ์œ„์น˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ์กฐ:
    • ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function): ์ž…๋ ฅ ๊ฐ’(ํ‚ค)์„ ๊ณ ์œ ์˜ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜.
    • ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table): ํ•ด์‹œ ๊ฐ’๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘.
  • ์žฅ์ : ์ •ํ™•ํ•œ ๊ฐ’ ๊ฒ€์ƒ‰์— ํšจ์œจ์ .

3-3. ์ธ๋ฑ์Šค ์Šค์บ”๋ฐฉ์‹

  • Table Full Scan: ๋ง ๊ทธ๋Œ€๋กœ ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์ฝ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์‹œํ€€์…œ ์—‘์„ธ์Šค๋ฅผ ํ†ตํ•ด ์ฝ์œผ๋ฉฐ Multi Block I/O ๋ฐฉ์‹์œผ๋กœ ๋””์Šคํฌ ๋ธ”๋ก์„ ์ฝ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Index Range Scan: ์ธ๋ฑ์Šค๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ์–ป์€ RowID๋กœ ๋ฒ”์œ„๋ฅผ ๋ถ€์—ฌํ•˜๋ฉด์„œ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. index ๊ฐ’์ด unique๊ฐ€ ์•„๋‹ˆ๋ผ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•  ๋•Œ, 2๋ฒˆ ์ด์ƒ ๋ฒ”์œ„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • Index Skip Scan: ๊ฒฐํ•ฉ ์นผ๋Ÿผ ์ธ๋ฑ์Šค์˜ ์ฒซ ์นผ๋Ÿผ์ด WHERE์— ์žˆ์ง€ ์•Š์•„๋„, ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • Index Full Scan: ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค. 


 

4. ๋ฒ„ํผ ๊ด€๋ฆฌ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ์™€ ๋””์Šคํฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

4-1. ๋ฒ„ํผ ํ’€(Buffer Pool)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋””์Šคํฌ I/O๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฒ„ํผ ํ’€์— ์บ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฒ„ํผ ํ’€์€ ํŽ˜์ด์ง€(Page) ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

4-2. LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๋ฒ„ํผ ํ’€์˜ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด LRU(Least Recently Used) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

 

5. ํŠธ๋žœ์žญ์…˜๊ณผ ๋กœ๊ทธ ๊ด€๋ฆฌ

๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜๊ณผ ๋กœ๊ทธ๊ฐ€ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

5-1. Write-Ahead Logging (WAL)

  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋จผ์ € ๋กœ๊ทธ์— ๊ธฐ๋กํ•˜๊ณ , ์ดํ›„์— ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5-2. UNDO์™€ REDO ๋กœ๊ทธ

  • UNDO ๋กœ๊ทธ: ํŠธ๋žœ์žญ์…˜์„ ๋กค๋ฐฑํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • REDO ๋กœ๊ทธ: ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ ์ดํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

6. ์ฟผ๋ฆฌ ์‹คํ–‰๊ณผ ์ตœ์ ํ™”

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์ ํ™” ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

6-1. ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๊ณผ์ •

  1. ํŒŒ์‹ฑ(Parsing): SQL ๋ฌธ๋ฒ• ํ™•์ธ ๋ฐ ๋‚ด๋ถ€ ํ‘œํ˜„์œผ๋กœ ๋ณ€ํ™˜.
  2. ์ตœ์ ํ™”(Optimization): ์‹คํ–‰ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜๊ณ  ๋น„์šฉ(Cost)์„ ๊ณ„์‚ฐ.
  3. ์‹คํ–‰(Execution): ์ตœ์ ์˜ ์‹คํ–‰ ๊ณ„ํš์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰.

6-2. ์‹คํ–‰ ๊ณ„ํš

  • ์‹คํ–‰ ๊ณ„ํš์€ ํ…Œ์ด๋ธ” ์Šค์บ”, ์ธ๋ฑ์Šค ์Šค์บ”, ์กฐ์ธ ์ „๋žต ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ด๋ธ” ์Šค์บ”: ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์ƒ‰.
  • ์ธ๋ฑ์Šค ์Šค์บ”: ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฒ€์ƒ‰.

 

7. ๋™์‹œ์„ฑ ์ œ์–ด์™€ ์ž ๊ธˆ(Locking)

์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋™์‹œ์„ฑ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

7-1. ๋ฝ(Lock)

  • ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์‹œ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ–‰ ์ˆ˜์ค€ ์ž ๊ธˆ(Row-Level Lock): ํŠน์ • ํ–‰์—๋งŒ ์ž ๊ธˆ์„ ์„ค์ •.
  • ํ…Œ์ด๋ธ” ์ˆ˜์ค€ ์ž ๊ธˆ(Table-Level Lock): ํ…Œ์ด๋ธ” ์ „์ฒด์— ์ž ๊ธˆ์„ ์„ค์ •.

7-2. MVCC(Multi-Version Concurrency Control)

  • ํŠธ๋žœ์žญ์…˜ ๋ณ„๋กœ ๋ฐ์ดํ„ฐ์˜ ์Šค๋ƒ…์ƒท์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์“ฐ๊ธฐ ์ž‘์—…์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

8. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • Checkpointing: ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ธฐ๋ก.
  • Vacuuming: ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ(PostgreSQL ๋“ฑ์—์„œ ์‚ฌ์šฉ).
  • Auto-Tuning: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •์„ ์ž๋™์œผ๋กœ ์กฐ์ •.