๊ด€๋ฆฌ ๋ฉ”๋‰ด

โœ๐Ÿป๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ

MySQL - InnoDB & MyISAM ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜ ๋ณธ๋ฌธ

DB/RDBMS

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

์ฉ์‹œํ‚ด 2022. 12. 5. 21:32
728x90
  • MySQL 5.5์ดํ›„๋ถ€ํ„ฐ InnoDB์—”์ง„์ด ๊ธฐ๋ณธ์—”์ง„์œผ๋กœ ์ฑ„ํƒ
  • MySQL 5.5๊นŒ์ง€ MySQL ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ”์€ MyISAM
  • MySQL 8.0์ดํ›„๋ถ€ํ„ฐ๋Š” ๋ชจ๋‘ InnoDB ์—”์ง„ ์‚ฌ์šฉ, MyISAM์—์„œ๋งŒ ์ œ๊ณตํ•˜๋˜ ์ „๋ฌธ๊ฒ€์ƒ‰, ์ขŒํ‘œ๊ฒ€์ƒ‰๋„ InnoDB์—์„œ ์ œ๊ณต

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

https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html

  • ๋ ˆ์ฝ”๋“œ๋ฅผ PK ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ ์ €์žฅ
  • PK๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ ˆ์ฝ”๋“œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • PK์ธ๋ฑ์Šค ์ž๋™ ์ƒ์„ฑ
  • PK๋ฅผ ํ†ตํ•œ ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด ๋น ๋ฆ„
  • InnoDB๋Š” PK๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ PK๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ง
    • ๋‹จ, ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ PK๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€

https://www.youtube.com/watch?v=vQFGBZemJLQ

  • MVCC(Multi Version Concurrency Control)
    • Undo์˜์—ญ์„ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ ๋ฒ„์ „์ด ๊ด€๋ฆฌ๋จ
    • ๋ ˆ์ฝ”๋“œ ๋‹จ์œ„์˜ ํŠธ๋žœ์žญ์…˜ ์ง€์›
      1. ๋ฐ์ดํ„ฐ COMMIT์‹œ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋Š” InnoDB Buffer Pool์— ๋“ค์–ด๊ฐ„๋‹ค.
      2. id = 1์˜ hobby ์นผ๋Ÿผ์„ update ํ•˜๋ฉด ๋ณ€๊ฒฝ ์ „์˜ ์นผ๋Ÿผ ๊ฐ’์€ undo log์— ๋ณต์‚ฌ๋œ๋‹ค.
      3. ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€๋งˆ๋‹ค ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋จ.
    • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ๊ธ€ ์ฐธ๊ณ  - 2022.10.19 - [DB] - Transaction Isolation ๋ ˆ๋ฒจ

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

InnoDB์—์„œ๋Š” MVCCํŠน์ง• ๋•Œ๋ฌธ์— ์ฝ๊ธฐ ์ž‘์—…์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€์ง„ Lock์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฝ๊ธฐ ์ž‘์—…์ด ๊ฐ€๋Šฅ

๊ฒฉ๋ฆฌ์ˆ˜์ค€์ด Serializable์ด ์•„๋‹Œ๊ฒฝ์šฐ select์ž‘์—…์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ๋ณ€๊ฒฝ ์ƒ๊ด€์—†์ด ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ์ž‘์—…์„ ๋ฐ”๋กœ ์ˆ˜ํ–‰

Undo์˜์—ญ & Redo์˜์—ญ

Undo๋กœ๊ทธ ์˜์—ญ Redo๋กœ๊ทธ ์˜์—ญ
๋ณ€๊ฒฝ๋˜๊ธฐ ์ด์ „์˜ ๋ฐ์ดํ„ฐ ๋ฐฑ์—… COMMIT์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐ ๋ฐฑ์—…
ํŠธ๋žœ์žญ์…˜ ๋ณด์žฅ (ROLLBACK ์‹œ Undo์˜์—ญ์˜ ๋ฐ์ดํ„ฐ ๋ณต์›) ์„œ๋ฒ„ ๋น„์ •์ƒ ์ข…๋ฃŒ ์‹œ Redo๋กœ๊ทธ์— ๋ฐฑ์—…๋œ ๋ฐ์ดํ„ฐ ๋ณต์›
ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋งž๊ฒŒ ๋ฐฑ์—…๋œ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜  
  • MySQL 5.5๋ฒ„์ „๊นŒ์ง€๋Š” Undo๋กœ๊ทธ ์˜์—ญ์˜ ์‚ฌ์šฉ ๊ณต๊ฐ„์ด ํ•œ๋ฒˆ ๋Š˜์–ด๋‚˜๋ฉด MySQL ์„œ๋ฒ„๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ์ค„์ผ ์ˆ˜ ์—†์Œ
  • 8.0 ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋˜๋ฉด์„œ MySQL ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•œ ์‹œ์ ์— ์‚ฌ์šฉ ๊ณต๊ฐ„์„ ์ž๋™์œผ๋กœ ์ค„์—ฌ์ค€๋‹ค.

InnoDB Buffer Pool

  • InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„
  • MySQL5.7 ์ดํ›„๋ถ€ํ„ฐ๋Š” InnoDB ๋ฒ„ํผ ํ’€ ์‚ฌ์ด์ฆˆ ๋™์ ์œผ๋กœ ์ ์šฉ ๊ฐ€๋Šฅ

InnoDB Buffer Pool ์—ญํ• 

  1. ๋ฐ์ดํ„ฐ ์บ์‹ฑ
    • ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด๋‚˜ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹ฑํ•˜๋Š” ๊ณต๊ฐ„
    • SQL ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์ผ์ • ํฌ๊ธฐ ๋‹จ์œ„๋กœ ์บ์‹ฑ -> INDEX, ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์บ์‹ฑ
    • InnoDB๋Š” ์ผ์ • ํฌ๊ธฐ๋กœ ์บ์‹ฑํ•œ ๋‹จ์œ„ ํŽ˜์ด์ง• ์‹œ LRU์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ
  2.  ์“ฐ๊ธฐ ์ง€์—ฐ ๋ฒ„ํผ
    • Dirty Page : INSERT, UPDATE, DELETE๋ช…๋ น์œผ๋กœ ๋ณ€๊ฒฝ๋œ ํŽ˜์ด์ง€
    • InnoDB๋Š”  ๋žœ๋ค I/O๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ Dirty Page๋ฅผ ๋ชจ์•˜๋‹ค๊ฐ€ ํ•œ ๋ฒˆ์— ๋””์Šคํฌ์— ๋ฐ˜์˜ -> Buffer์—ญํ• 
  3. Adaptive Hash Index
    1. ์ธ๋ฑ์Šค ํ‚ค, ํŽ˜์ด์ง€ ์ฃผ์†Œ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ธ๋ฑ์Šค
    2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์ฃผ ์š”์ฒญํ•˜๋Š” ๊ฐ’์— ๋Œ€ํ•ด InnoDB๊ฐ€ ์ธ๋ฑ์Šค ์ž๋™ ์ƒ์„ฑ
    3. innodb_adaptive_hash_index์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋™์ƒ์„ฑ ์—ฌ๋ถ€ ํ™œ์„ฑํ™” ๋ฐ ๋น„ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ

Buffer Pool ๊ตฌ์กฐ

๋ฒ„ํผํ’€์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํŽ˜์ด์ง€ ํฌ๊ธฐ(์‹œ์Šคํ…œ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’ : innodb_page_size)์˜ ์กฐ๊ฐ์œผ๋กœ ์ชผ๊ฐœ ์ €์žฅ

๋ฒ„ํผ ํ’€ ํŽ˜์ด์ง€ ๊ด€๋ฆฌ ์‹œ ์•„๋ž˜์™€ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌ

  1. LRU(Least Recently Used) ๋ฆฌ์ŠคํŠธ
  2. ํ”Œ๋Ÿฌ์‹œ(Flush) ๋ฆฌ์ŠคํŠธ
  3. ํ”„๋ฆฌ(Free) ๋ฆฌ์ŠคํŠธ

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

https://velog.io/@jsj3282/5.-MyISAM-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EC%97%94%EC%A7%84-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98

  • InnoDB์—์„œ๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ”์ด PK๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋˜์ง€๋งŒ, MyISAM์—์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ‚ค ์ง€์›ํ•˜์ง€ ์•Š์Œ  
    • MyISAM์—์„œ๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ PK์™€ ์ƒ๊ด€์—†์ด insert์ž‘์—… ๋•Œ๋งˆ๋‹ค ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ €์žฅ๋œ๋‹ค.
    • ๋ ˆ์ฝ”๋“œ๋Š” ROWID๋ผ๋Š” ๋ฌผ๋ฆฌ์  ์ฃผ ์†Ÿ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, PK์™€ ์„ธ์ปจ๋”๋ฆฌ ์ธ๋ฑ์Šค ๋ชจ๋‘ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ ˆ์ฝ”๋“œ์˜ row Id๊ฐ’์„ ํฌ์ธํ„ฐ๋กœ ๊ฐ€์ง
  • ํ…Œ์ด๋ธ” ๋‹จ์œ„ LOCK
  • ํด๋Ÿฌ์Šคํ„ฐ๋ง, ํŠธ๋žœ์žญ์…˜, ์™ธ๋ž˜ ํ‚ค ์ง€์›ํ•˜์ง€ ์•Š์Œ
  • MyISAM์˜ ํ‚ค ์บ์‹œ๋Š” ์ธ๋ฑ์Šค๋งŒ ์บ์‹ฑ
  • ์ „๋ฌธ ๊ฒ€์ƒ‰, ์ขŒํ‘œ ๊ฒ€์ƒ‰ ์ง€์›
728x90
๋ฐ˜์‘ํ˜•

'DB > RDBMS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

B-Tree  (0) 2023.01.29
Transaction Isolation ๋ ˆ๋ฒจ  (0) 2023.01.09
Mysql - InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์ž ๊ธˆ  (0) 2022.12.31
Transaction & Lock  (0) 2022.12.24