RealMySQL 8.0 ์„ ์ฝ๊ณ  ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜

InnoDB → MySQL์˜ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๊ฐ€์šด๋ฐ

  • ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ ,
  • ๊ฑฐ์˜ ์œ ์ผํ•˜๊ฒŒ ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ž ๊ธˆ์„ ์ œ๊ณตํ•˜์—ฌ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , ์•ˆ์ •์ ์ด๋ฉฐ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ
  • ๊ตฌ์กฐ

4.2.1 ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์— ์˜ํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง

  • InnoDB์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ”์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋˜์–ด ์ €์žฅ → ์ฆ‰, ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์˜ ์ˆœ์„œ๋Œ€๋กœ ๋””์Šคํฌ์— ์ €์žฅ๋˜์–ด → ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์— ์˜ํ•œ ์Šค์บ”์€ ์ƒ๋‹นํžˆ ๋นจ๋ฆฌ ์ฒ˜๋ฆฌ๋จ
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ณ„ํš์—์„œ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๋Š” ๋‹ค๋ฅธ ๋ณด์กฐ ์ธ๋ฑ์Šค์— ๋น„ํ•ด ๋†’์€ ๋น„์ค‘์œผ๋กœ ์„ค์ •
    • InnoDB ํ…Œ์ด๋ธ” ๊ตฌ์กฐ = ์˜ค๋ผํด์˜ IOT(Index Organized Table) ๊ตฌ์กฐ

4.2.2 ์™ธ๋ž˜ ํ‚ค ์ง€์›

  • Only InnoDB, not MyISAM๊ณผ MEMORY ํ…Œ์ด๋ธ”
  • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ œ์•ฝ์‚ฌํ•ญ์ด ์žˆ์–ด ์‹ค๋ฌด์—์„œ๋Š” ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
  • InnoDB์˜ ์™ธ๋ž˜ ํ‚ค๋Š” ๋ถ€๋ชจ ํ…Œ์ด๋ธ”๊ณผ ์ž์‹ ํ…Œ์ด๋ธ” ๋ชจ๋‘ ํ•ด๋‹น ์นผ๋Ÿผ์— ์ธ๋ฑ์Šค ์ƒ์„ฑ์ด ํ•„์š”ํ•˜๊ณ , ๋ณ€๊ฒฝ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์ด๋‚˜ ์ž์‹ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ž ๊ธˆ์ด ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๋กœ ์ „ํŒŒ๋˜๊ณ , ๊ทธ๋กœ ์ธํ•ด ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•  ๋•Œ๊ฐ€ ๋งŽ์•„์„œ ์‹ค๋ฌด์—์„œ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

4.2.3 MVCC(Multi Version Concurrency Control)

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ ˆ์ฝ”๋“œ ๋ ˆ๋ฒจ์˜ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” DBMS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ
  • MVCC์˜ ๊ฐ€์žฅ ํฐ ๋ชฉ์ ์€ ์ž ๊ธˆ ์—†๋Š” ์ผ๊ด€๋œ ์ฝ๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ → InnoDB๋Š” ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•ด ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•จ
  • ex) ‘์œ ์žฌ์„’์—์„œ ‘ํ™๊ธธ๋™’์œผ๋กœ UPDATE
mysql > UPDATE member SET name='ํ™๊ธธ๋™' WHERE member_id='1';

์ด ๋•Œ์˜ ์ƒํ™ฉ

  1. InnoDB ๋ฒ„ํผ ํ’€ : ์ˆ˜์ • ํ›„ ‘ํ™๊ธธ๋™'์ด ๋ฐ˜์˜๋จ (๋ ˆ์ฝ”๋“œ ์ „์ฒด)
  2. ์–ธ๋‘ ๋กœ๊ทธ : ์ˆ˜์ • ์ „ ‘์œ ์žฌ์„'์ด ๋ฐ˜์˜๋จ (PK, ๋ฉ”ํƒ€์ •๋ณด ๋ฐ ์ˆ˜์ •๋œ ์นผ๋Ÿผ๋งŒ ๋ฐฑ์—…)

→ ์ด ๋•Œ, ์ปค๋ฐ‹์ด๋‚˜ ๋กค๋ฐฑ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ 2๋ฒˆ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ๋ ค๊ณ  ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

๊ฒฐ๋ก  : ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

  • READ_UNCOMMITTED : InnoDB ๋ฒ„ํผ ํ’€์ด๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๋ณ€๊ฒฝ๋œ ‘ํ™๊ธธ๋™' ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • READ_COMMITTED ์ด์ƒ : ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๋‘ ์˜์—ญ์˜ '์œ ์žฌ์„' ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ DBMS ์—์„œ๋Š” MVCC ๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

4.2.4 ์ž ๊ธˆ ์—†๋Š” ์ผ๊ด€๋œ ์ฝ๊ธฐ(Non-Locking Consistent Read)

  • InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ MVCC๋ฅผ ์ด์šฉํ•ด INSERT์™€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ˆœ์ˆ˜ํ•œ SELECT ์ž‘์—…์€ ๋ฝ์„ ๊ฑธ์ง€ ์•Š๊ณ , ๋ฐ”๋กœ ์ˆ˜ํ–‰
    • ๋ฝ์„ ๊ฑธ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฝ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Œ
    • ์ฝ๊ธฐ ์ž‘์—… ๊ฐ€๋Šฅ(serializable ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ์ œ์™ธ)
    • lock์ด ๊ฑธ๋ ค์žˆ์–ด๋„ ์ฝ์„ ๋•Œ๋Š” ์–ธ๋‘ ์˜์—ญ์—์„œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— lock์ด ๊ฑธ๋ฆฌ๋“  ๋ง๋“  ์ƒ๊ด€์—†์ด ์ด์ „ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

4.2.5 ์ž๋™ ๋ฐ๋“œ๋ฝ ๊ฐ์ง€

  • InnoDB๋Š” ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜์˜ ๋ฐ๋“œ๋ฝ ์ฒดํฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉ → ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•จ๊ณผ ๋™์‹œ์— ๋ฐ”๋กœ ๊ฐ์ง€๋˜๊ณ , ๊ฐ์ง€๋œ ๋ฐ๋“œ๋ฝ์€ ๊ด€๋ จ ํŠธ๋žœ์žญ์…˜ ์ค‘์—์„œ ROLLBACK์ด ๊ฐ€์žฅ ์šฉ์ดํ•œ ํŠธ๋žœ์žญ์…˜(ROLLBACK์„ ํ–ˆ์„ ๋•Œ ๋ณต๊ตฌ ์ž‘์—…์ด ๊ฐ€์žฅ ์ž‘์€ ํŠธ๋žœ์žญ์…˜, ์ฆ‰ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์žฅ ์ ๊ฒŒ ๋ณ€๊ฒฝํ•œ ํŠธ๋žœ์žญ์…˜)์„ ์ž๋™์ ์œผ๋กœ ๊ฐ•์ œ ์ข…๋ฃŒํ•ด ๋ฒ„๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ๋“œ๋ฝ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ๊ฐ€ ์ œํ•œ์‹œ๊ฐ„(Timeout)์— ๋„๋‹ฌํ•˜๊ฑฐ๋‚˜ ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ๋กœ ๊ธฐ๋ก๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋งŽ์ง€ ์•Š๋‹ค.

4.2.6 ์ž๋™ํ™”๋œ ์žฅ์•  ๋ณต๊ตฌ

  • InnoDB๋Š” ์†์‹ค์ด๋‚˜ ์žฅ์• ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋งค์ปค๋‹ˆ์ฆ˜์ด ํƒ‘์žฌ!
    • MySQL ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋  ๋•Œ, ์™„๋ฃŒ๋˜์ง€ ๋ชปํ•œ ํŠธ๋žœ์žญ์…˜์ด๋‚˜ ๋””์Šคํฌ์— ์ผ๋ถ€๋งŒ ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€(Partial write) ๋“ฑ์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ๋ณต๊ตฌ ์ž‘์—…์ด ์ž๋™์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

4.2.7 InnoDB ๋ฒ„ํผ ํ’€

  • InnoDB์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„
  • innodb_buffer_pool_size ๋กœ ์„ค์ •, ์ „์ฒด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ 50~80% ์ˆ˜์ค€์œผ๋กœ ์„ค์ •
  • ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด๋‚˜ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•ด ๋‘๋Š” ๊ณต๊ฐ„ + ์“ฐ๊ธฐ ์ž‘์—…์„ ์ง€์—ฐ์‹œ์ผœ ์ผ๊ด„ ์ž‘์—…์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฒ„ํผ ์—ญํ•  → INSERT๋‚˜ UPDATE ๊ทธ๋ฆฌ๊ณ  DELETE์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฟผ๋ฆฌ๋Š” ๋””์Šคํฌ ์ž‘์—…์„ ๋ฐœ์ƒ์‹œํ‚ด → ๋ฒ„ํผ ํ’€์ด ์žˆ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ๋žœ๋คํ•œ ๋””์Šคํฌ ์ž‘์—…์˜ ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค!
  • ์•„์ง ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. → ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋”ํ‹ฐ ํŽ˜์ด์ง€(Dirty page)
  • ๋”ํ‹ฐ ํŽ˜์ด์ง€๋Š” InnoDB์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋˜๋Š” ์–ด๋–ค ์กฐ๊ฑด์ด ๋˜๋ฉด ์ฒดํฌํฌ์ธํŠธ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋•Œ Write ์Šค๋ ˆ๋“œ๊ฐ€ ํ•„์š”ํ•œ ๋งŒํผ์˜ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋งŒ ๋””์Šคํฌ๋กœ ๊ธฐ๋กํ•œ๋‹ค. ์ฒดํฌํฌ์ธํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฒ„ํผ ํ’€์˜ ๋ชจ๋“  ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ๋กœ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

4.2.8 Double Write Buffer

  • ํŒŒ์…œ ํŽ˜์ด์ง€(Partial-page) or ํ†ค ํŽ˜์ด์ง€(Ton-page) : ํŽ˜์ด์ง€๊ฐ€ ์ผ๋ถ€๋งŒ ๊ธฐ๋ก๋˜๋Š” ํ˜„์ƒ, ํ•˜๋“œ์›จ์–ด ์˜ค์ž‘๋™์ด๋‚˜ ์‹œ์Šคํ…œ ๋น„์ •์ƒ ์ข…๋ฃŒ ๋“ฑ์œผ๋กœ ๋ฐœ์ƒํ•จ
  • InnoDB์˜ ๋ฆฌ๋‘ ๋กœ๊ทธ๋Š” ๊ณต๊ฐ„์˜ ๋‚ญ๋น„๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ํŽ˜์ด์ง€์˜ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ๋งŒ์„ ๊ธฐ๋กํ•จ → ์ด๋กœ ์ธํ•ด InnoDB์—์„œ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ ํŒŒ์ผ๋กœ ํ”Œ๋Ÿฌ์‹œํ•  ๋•Œ ์ผ๋ถ€๋งŒ ๊ธฐ๋ก๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋Š” ๋ณต๊ตฌ๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜๋„.. → ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด Double Write ๊ธฐ๋ฒ•์„ ์ด์šฉ!

4.2.9 ์–ธ๋‘(Undo) ๋กœ๊ทธ

  • ex) ‘์œ ์žฌ์„’์—์„œ ‘ํ™๊ธธ๋™’์œผ๋กœ UPDATE
mysql > UPDATE member SET name='ํ™๊ธธ๋™' WHERE member_id='1';
  • ์–ธ๋‘ ์˜์—ญ : when? UPDATE๋‚˜ DELETE ๋ฌธ์žฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ why? ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ ์ž ์‚ฌ์šฉ
  • ์–ธ๋‘ ๋ฐ์ดํ„ฐ : ex) ์–ธ๋‘ ๋ฐ์ดํ„ฐ ‘์œ ์žฌ์„’ why?
  1. ํŠธ๋žœ์žญ์…˜์˜ rollback ๋Œ€๋น„์šฉ
  2. ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋†’์€ ๋™์‹œ์„ฑ ์ œ๊ณตํ•ด์ค˜์„œ
    • ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ : ๋™์‹œ์— ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•  ๋•Œ, ํ•œ ํŠธ๋žœ์žญ์…˜์˜ ์ž‘์—… ๋‚ด์šฉ์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์งˆ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€

4.2.10 ์ฒด์ธ์ง€ ๋ฒ„ํผ

  • ์ธ๋ฑ์Šค ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ž์› ์†Œ๋ชจ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„

ํƒ„์ƒ ๋ฐฐ๊ฒฝ

  • ๐Ÿง ๋ฌธ์ œ : INSERT๋‚˜ UPDATE ๋  ๋•Œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—… + ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ํฌํ•จ๋œ ์ธ๋ฑ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—… ์ด ํ•„์š” →ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ํฌํ•จ๋œ ์ธ๋ฑ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—… ์€ ๋žœ๋คํ•˜๊ฒŒ ๋””์Šคํฌ๋ฅผ ์ฝ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๊ฐ€ ๋งŽ๋‹ค๋ฉด ์ƒ๋‹นํžˆ ๋งŽ์€ ์ž์›์„ ์†Œ๋ชจ
  • ๐Ÿ˜ƒ ํ•ด๊ฒฐ : ์ธ๋ฑ์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์ฆ‰์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ž„์‹œ ๊ณต๊ฐ„์— ์ €์žฅํ•ด ๋‘๊ณ  ๋ฐ”๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ! → ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ = ์ฒด์ธ์ง€ ๋ฒ„ํผ

ํŠน์ง•

  • ๋ฐ˜๋“œ์‹œ ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ด์•ผ ํ•˜๋Š” ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ์ฒด์ธ์ง€ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
  • ์ฒด์ธ์ง€ ๋ฒ„ํผ์— ์ž„์‹œ๋กœ ์ €์žฅ๋œ ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ ์กฐ๊ฐ์€ ์ดํ›„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ๋ณ‘ํ•ฉ๋จ → ์ด๋ฅผ ์ฒด์ธ์ง€ ๋ฒ„ํผ ๋จธ์ง€ ์Šค๋ ˆ๋“œ ๋ผ๊ณ  ํ•จ

4.2.11 ๋ฆฌ๋‘(Redo) ๋กœ๊ทธ ๋ฐ ๋กœ๊ทธ ๋ฒ„ํผ

๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋žœ๋คํ•˜๊ฒŒ ๋””์Šคํฌ์— ๊ธฐ๋กํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋น„์šฉ์ด ๋น„์‹ผ ์ž‘์—…์ด๋‹ค. → ์ด ์ž‘์—…์„ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•ด InnoDB ๋ฒ„ํผ ํ’€ ๊ฐ™์€ ์žฅ์น˜๊ฐ€ ์žˆ์Œ

BUT! InnoDB ๋ฒ„ํผ ํ’€ ๋งŒ์œผ๋กœ๋Š” ACID๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†์–ด์„œ → ์ˆœ์ฐจ์ ์œผ๋กœ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๋Š” ๋กœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑ = ๋ฆฌ๋‘ ๋กœ๊ทธ (์ผ๋ฐ˜์ ์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์ง€์นญํ•จ) ๋„ˆ๋ฌด ๋งŽ์€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด ๋ฆฌ๋‘ ๋กœ๊ทธ์— ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ๋„ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์–ด์„œ ๋ณด์™„ํ•˜๊ณ ์ž = ๋กœ๊ทธ ๋ฒ„ํผ ๋กœ๊ทธ ๋ฒ„ํผ์˜ ํฌ๊ธฐ = ์ผ๋ฐ˜์ ์œผ๋กœ 1~8MB ์ˆ˜์ค€, BLOB๋‚˜ TEXT์™€ ๊ฐ™์ด ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋” ํฌ๊ฒŒ ์„ค์ •

4.2.12 ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค

  • InnoDB์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฃผ ์š”์ฒญํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ธ๋ฑ์Šค
  • innodb_adaptive_hash_index : ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํ™œ์„ฑํ™” ๋ฐ ๋น„ํ™œ์„ฑํ™”

๋„์ž… ๋ชฉ์ 

  • B-Tree์˜ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„์„ ์ค„์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด

์ž‘๋™ ๋ฐฉ์‹

  • ์ž์ฃผ ์ฝํžˆ๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€์˜ ํ‚ค ๊ฐ’์„ ์ด์šฉํ•ด ๋ณ€์ˆ˜ ์ƒ์„ฑ
  • ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋กœ ๊ฐ€๊ธฐ
  • → ์žฅ์ ! B-Tree๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ์ฐพ์•„๊ฐ€๋Š” ๋น„์šฉ์ด ์—†์–ด์ง€๊ณ , CPU๋Š” ์ ์€ ์ผ์„ ํ•˜์ง€๋งŒ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์€ ๋นจ๋ผ์ ธ์„œ ๋™์‹œ์— ๋” ๋งŽ์€ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•จ

ํŠน์ง•

  • (key, value) = (’์ธ๋ฑ์Šค ํ‚ค ๊ฐ’’, ํ•ด๋‹น ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์ด ์ €์žฅ๋œ ‘๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ์ฃผ์†Œ’)
  • ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’ = ‘B-Tree ์ธ๋ฑ์Šค ๊ณ ์œ ๋ฒˆํ˜ธ(ID)์™€ B-Tree ์ธ๋ฑ์Šค ์‹ค์ œ ํ‚ค ๊ฐ’’ ์กฐํ•ฉ
  • ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์— ‘B-Tree ์ธ๋ฑ์Šค์˜ ๊ณ ์œ ๋ฒˆํ˜ธ’๊ฐ€ ํฌํ•จ๋˜๋Š” ์ด์œ  → InnoDB์—์„œ ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค๋Š” ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, ํŠน์ • ํ‚ค ๊ฐ’์ด ์–ด๋Š ์ธ๋ฑ์Šค์— ์†ํ•œ ๊ฒƒ์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ!

+ Recent posts