MySQL ์„œ๋ฒ„

  • MySQL ์—”์ง„๊ณผ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ๊ตฌ๋ถ„
  • ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜์ด ์•„๋‹ˆ๋ผ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ |500

Foreground Thread

  • MySQL์— ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ ์ˆ˜๋งŒํผ ์ƒ์„ฑ๋˜๋ฉฐ ๊ฐ ํด๋ผ์ด์–ธํŠธ์˜ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋ฉด ์Šค๋ ˆ๋“œ๋Š” ์Šค๋ ˆ๋“œ ์บ์‹œ๋กœ ๋Œ์•„๊ฐ€๋ฉฐ, ์บ์‹œ ํฌ๊ธฐ๋Š” thread_cache_size ๋กœ ์ œํ•œ๋œ๋‹ค.
    • ์บ์‹œ์— ์—ฌ์œ ๊ฐ€ ์—†์œผ๋ฉด ์Šค๋ ˆ๋“œ๋Š” ์ข…๋ฃŒ๋˜์–ด ์บ์‹œ์—๋Š” ์„ค์ •๋œ ๊ฐœ์ˆ˜๋งŒ ์œ ์ง€๋œ๋‹ค.
  • MySQL ๋ฒ„ํผ๋‚˜ ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ, ์—†์œผ๋ฉด ๋””์Šคํฌ์—์„œ ์ง์ ‘ ์ฝ๋Š”๋‹ค.
    • MyISAM
      • ๋””์Šคํฌ ์“ฐ๊ธฐ๊นŒ์ง€ Foreground Thread๊ฐ€ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • InnoDB
      • ๋ฒ„ํผ/์บ์‹œ๊นŒ์ง€ Foreground Thread๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋””์Šคํฌ ๊ธฐ๋ก์€ Background Thread๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.

Background Thread

  • InnoDB๋Š” ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • Insert Buffer ๋ณ‘ํ•ฉ
    • ๋กœ๊ทธ ๊ธฐ๋ก
    • ๋ฒ„ํผ ํ’€ ๋‚ด์šฉ์„ ๋””์Šคํฌ์— ๊ธฐ๋ก(Write thread)
    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋กœ ์ฝ์–ด์˜ค๊ธฐ(Read thread)
    • ์ž ๊ธˆยท๋ฐ๋“œ๋ฝ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์ด ์ค‘ ํ•ต์‹ฌ์€ ๋กœ๊ทธ ์Šค๋ ˆ๋“œ(Log thread) ์™€ ์“ฐ๊ธฐ ์Šค๋ ˆ๋“œ(Write thread)
  • ์ฝ๊ธฐ/์“ฐ๊ธฐ ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์„ค์ • ๊ฐ€๋Šฅ
    • innodb_write_io_threads, innodb_read_io_threads
  • ์ฝ๊ธฐ๋Š” ์ง€์—ฐ๋  ์ˆ˜ ์—†์ง€๋งŒ ์“ฐ๊ธฐ๋Š” ์ง€์—ฐ ํ›„ ์ผ๊ด„ ์ฒ˜๋ฆฌ(๋ฒ„ํผ๋ง)๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • InnoDB๋Š” ์ด๋Ÿฌํ•œ ๋ฒ„ํผ๋ง์„ ์ง€์›ํ•ด INSERT/UPDATE/DELETE ์‹œ ์ฆ‰์‹œ ๋””์Šคํฌ ๊ธฐ๋ก์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋จ.
    • MyISAM์€ ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์“ฐ๊ธฐ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋ฒ„ํผ๋ง์„ ๊ฑฐ์˜ ํ™œ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ์‚ฌ์šฉ ๊ตฌ์กฐ

  • MySQL ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ด ๋‘” ๋งŒํผ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.
  • ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๊ณผ ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
    • ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
      • ์ฃผ๋กœ Background Thread๊ฐ€ ์‚ฌ์šฉ
    • ๋กœ์ปฌ(์„ธ์…˜) ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
      • ์ฃผ๋กœ Client Thread๊ฐ€ ์‚ฌ์šฉ

|500

MySQL์˜ ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ตฌ์กฐ

  • ์ฟผ๋ฆฌ ํŒŒ์„œ
    • ์ฟผ๋ฆฌ๋ฅผ ํ† ํฐ์œผ๋กœ ๋ถ„๋ฆฌํ•ด ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ฌ
  • ์ „์ฒ˜๋ฆฌ๊ธฐ
    • ํŒŒ์„œ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ œ์ ์ด ์žˆ๋Š” ์ง€ ํ™•์ธ
  • ์˜ตํ‹ฐ๋งˆ์ด์ €
    • DBMS์˜ ๋‘๋‡Œ ์—ญํ• , ์ €๋ ดํ•œ ๋น„์šฉ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ๊ฒฐ์ •
  • ์‹คํ–‰ ์—”์ง„
    • ๋งŒ๋“ค์–ด์ง„ ๊ณ„ํš๋Œ€๋กœ ๊ฐ ํ•ธ๋“ค๋Ÿฌ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• 

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

  • ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์— ์˜ํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง
  • ์™ธ๋ž˜ ํ‚ค ์ง€์›
  • MVCC(Multi Version Concurrency Control)
  • Non-Locking Consistent Read
  • ์ž๋™ ๋ฐ๋“œ๋ฝ ๊ฐ์ง€
    • ์ž ๊ธˆ ๋Œ€๊ธฐ ๋ชฉ๋ก์„ ๊ทธ๋ž˜ํ”„(Wait-for List) ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌ
      • ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฐพ์•„์„œ ๊ฐ•์ œ ์ข…๋ฃŒ
        • ๊ธฐ์ค€ : ํŠธ๋žœ์žญ์…˜์˜ ์–ธ๋‘ ๋กœ๊ทธ ์–‘์ด ์ ์€ ํŠธ๋žœ์žญ์…˜
  • ์ž๋™ํ™”๋œ ์žฅ์•  ๋ณต๊ตฌ
    • MySQL ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์™„๋ฃŒ๋˜์ง€ ๋ชปํ•œ ํŠธ๋žœ์žญ์…˜์ด๋‚˜ ๋””์Šคํฌ ์ผ๋ถ€๋งŒ ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ๋“ฑ์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ๋ณต๊ตฌ ์ž‘์—…์ด ์ž๋™์œผ๋กœ ์ง„ํ–‰
  • InnoDB ๋ฒ„ํผ ํ’€
    • ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด๋‚˜ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•ด ๋‘๋Š” ๊ณต๊ฐ„
    • ์“ฐ๊ธฐ ์ž‘์—…์„ ์ง€์—ฐ์‹œ์ผœ ์ผ๊ด„ ์ž‘์—…์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฒ„ํผ ์—ญํ• 
  • Double Writer Buffer
    • ์ •์ƒ์ ์œผ๋กœ ๊ธฐ๋ก๋˜๋ฉด ํ•„์š”๊ฐ€ ์—†์–ด์ง€์ง€๋งŒ ๊ธฐ๋ก๋˜๋Š” ๋„์ค‘ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ์žฌ์‹œ์ž‘๋  ๋•Œ ํ•ญ์ƒ DoubleWrite Buffer์˜ ๋‚ด์šฉ๊ณผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ํŽ˜์ด์ง€๋“ค์„ ๋ชจ๋‘ ๋น„๊ตํ•ด์„œ ๋ณต์‚ฌํ•œ๋‹ค.
  • Undo Log
    • ํŠธ๋žœ์žญ์…˜๊ณผ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด DML๋กœ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ด์ „ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„๋กœ ๋ฐฑ์—…ํ•œ๋‹ค.
  • Change Buffer
    • ๋ณ€๊ฒฝํ•ด์•ผํ•  ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๊ฐ€ ๋ฒ„ํผ ํ’€์— ์ž‡์œผ๋ฉด ๋ฐ”๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๊ณ  ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์™€์„œ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ž„์‹œ ๊ณต๊ฐ„์— ์ €์žฅํ•ด ๋‘๊ณ  ๋ฐ”๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ Change Buffer ๋ผ๊ณ  ํ•œ๋‹ค.
      • Change Buffer๋Š” ์ถ”ํ›„ Backgroud Thread์— ์˜ํ•ด merge thread ๋œ๋‹ค.
    • ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ด์•ผ ํ•˜๋Š” ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” Change Buffer ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • Redo Log ๋ฐ Log Buffer
  • Adaptive Hash Index
    • InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฃผ ์š”์ฒญํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ธ๋ฑ์Šค