Skip to content

Latest commit

ย 

History

History
77 lines (77 loc) ยท 4.37 KB

File metadata and controls

77 lines (77 loc) ยท 4.37 KB

์•„ํ‚คํ…์ฒ˜

์—”์ง„ ์•„ํ‚คํ…์ฒ˜

  • Mysql Engine, Storage Engine์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
  • ์Šค๋ ˆ๋”ฉ๊ตฌ์กฐ๋Š” foreground, background thread๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
    • foreground thread
      • ์ปค๋„ฅ์…˜ ์—ฐ๊ฒฐ๋กœ ํ™œ์šฉ๋˜๊ฑฐ๋‚˜ thread cache์˜์—ญ์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€๋Š” ๊ฒฝ์šฐ์ด๋‹ค.
      • ๋”ฐ๋ผ์„œ ์ตœ์†Œ ํด๋ผ์ด์–ธํŠธ ์ˆ˜๋งŒํผ ์กด์žฌํ•œ๋‹ค.
    • background thread(InnoDB)
      1. Insert Buffer๋ณ‘ํ•จ
      2. ๋กœ๊ทธ๋ฅผ ๋””์Šคํฌ๋กœ ๊ธฐ๋ก
      3. InnoDB ๋ฒ„ํผ ํ’€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋ก
      4. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋กœ ์ฝ์Œ
      5. lock or deadlock์„ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ์‚ฌ์šฉ ๊ตฌ์กฐ
    • ๊ธ€๋กœ๋ฒŒ ์˜์—ญ, ์„ธ์…˜ ์˜์—ญ
      • ๊ธ€๋กœ๋ฒŒ ์˜์—ญ
        • ํ…Œ์ด๋ธ” ์บ์‹œ
        • InnoDB ๋ฒ„ํผ ํ’€
        • InnoDB ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค
        • InnoDB redo ๋กœ๊ทธ ๋ฒ„ํผ
      • ์„ธ์…˜ (๋กœ์ปฌ) ์˜์—ญ
        • ์ •๋ ฌ ๋ฒ„ํผ
        • ์กฐ์ธ ๋ฒ„ํผ
        • ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ์บ์‹œ
        • ๋„คํŠธ์›Œํฌ ๋ฒ„ํผ
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชจ๋ธ
    • InnoDB
    • validate password
    • query_rewrite ๋“ฑ๋“ฑ ํ™œ์šฉ ๊ฐ€๋Šฅ
  • (SQL Parser <-> SQL Optimizer <-> SQL Executor) | MYSQL Engine <-> (Data read/write) | Storage Engine <-> Disk
  • Handler: Mysql Engine์ด Storage Engine์— ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ
  • ์ปดํฌ๋„ŒํŠธ: ํ”Œ๋Ÿฌ๊ทธ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ 8.0 ๋ถ€ํ„ฐ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ
  • ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ตฌ์กฐ
    • ์ฟผ๋ฆฌ ํŒŒ์„œ: ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ MYSQL์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” Token์œผ๋กœ ๋ถ„๋ฆฌํ•ด ํŠธ๋ฆฌ ๊ตฌ์กฐํ™” ํ•จ
    • ์ „์ฒ˜๋ฆฌ๊ธฐ: ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๊ถŒํ•œ, ๊ฐ์ฒด์˜ ์กด์žฌ ์—ฌ๋ถ€ ๊ฐ™์€ ๊ฒƒ์„ ํ™•์ธ
    • ์˜ตํ‹ฐ๋งˆ์ด์ €: ์ €๋ ดํ•œ ๋น„์šฉ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ์„ ํƒํ•˜๋Š” ์—ญํ• 
    • ์‹คํ–‰ ์—”์ง„: ๋งŒ๋“ค์–ด์ง„ ๊ณ„ํš์„ ๊ฐ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์š”์ฒญํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์€ ํ›„ ๋‹ค๋ฅธ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์š”์ฒญํ•˜๋Š” ์—ญํ• 
    • ํ•ธ๋“ค๋Ÿฌ(Storage Engine): Disk๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์ฝ์–ด์˜ค๋Š” ์—ญํ• 
  • ์ฟผ๋ฆฌ ์บ์‹œ: SQL์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•˜๊ณ  ๋™์ผ ์ฟผ๋ฆฌ์ด๋ฉด ์ฆ‰์‹œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜. 8.0๋ถ€ํ„ฐ๋Š” ์ œ๊ฑฐ๋จ
  • ์Šค๋ ˆ๋“œ ํ’€: Community edition์€ thread pool์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, Percona Server์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณธ๋‹ค.
    • ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์ค„์—ฌ์„œ ํŠน์ • ์Šค๋ ˆ๋“œ๋“ค์— ์ง‘์ค‘ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ
    • ํ”„๋กœ์„ธ์„œ ์นœํ™”๋„(Processor affinity)๋ฅผ ๋†’์ด๊ณ , Context switch๋ฅผ ์ค„์ธ๋‹ค.
    • ๊ธฐ๋ณธ์ ์œผ๋กœ CPU ์ฝ”์–ด ๊ฐœ์ˆ˜๋งŒํผ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค. thread_pool_size๋ฅผ ํ†ตํ•ด ์กฐ์ ˆ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์Šค๋ ˆ๋“œ๊ฐ€ ๋ชจ๋‘ ์ฒ˜๋ฆฌ ์ค‘์ด๋ฉด worker thread์ถ”๊ฐ€ or ๋Œ€๊ธฐ ๋กœ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋‹ค.

InnoDB Stroage Engine Architecture

  • Record๊ธฐ๋ฐ˜์˜ lock์„ ์ œ๊ณตํ•œ๋‹ค.
  • PK๊ธฐ์ค€์œผ๋กœ clustering๋œ๋‹ค.
    • ์ˆœ์„œ๋Œ€๋กœ disk์— ์ €์žฅ๋œ๋‹ค๋Š” ๋œป
    • Secondary index๋Š” PK๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹
  • MyISAM์€ PK์™€ secondary index์™€ ๋™์ผํ•˜๋‹ค.
  • Foreign key์ง€์›
    • ๋ถ€๋ชจ ํ…Œ์ด๋ธ”, ์ž์‹ ํ…Œ์ด๋ธ” ๋ชจ๋‘ ์ธ๋ฑ์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    • ๋ณ€๊ฒฝ ์‹œ์—๋Š” ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์ด๋‚˜ ์ž์‹ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ S-lock์„ ํ•œ๋‹ค.
    • Dead lock์ด ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’๋‹ค.
      • ๋‹ค๋ฅธ ํšŒ์‚ฌ๋“ค์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€?
  • MVCC
    • Record๋ ˆ๋ฒจ์˜ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” DBMS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ
    • ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ผ๊ด€๋œ ์ฝ๊ธฐ
    • Undo ๋กœ๊ทธ๋ฅผ ํ™œ์šฉ
    • READ_COMMITTED, REPETABLE_READ, SERIALIZABLE์ธ ๊ฒฝ์šฐ InnoDB๋ฒ„ํผ ํ’€์ด๋‚˜ undoํ’€์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋™์ผํ•œ ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • COMMIT -> ์˜๊ตฌ์  ๋ฐ์ดํ„ฐ๋กœ ์ฒ˜๋ฆฌ
    • ๋กค๋ฐฑ -> Undo ์˜์—ญ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ -> ์–ธ๋‘ ์˜์—ญ ์ดˆ๊ธฐํ™”
  • Non-Locking Consistent Read
    • Serializable์ด ์•„๋‹Œ ๊ฒฝ์šฐ Insert์™€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ Select๋Š” ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ์ž‘์—…์˜ ๋Œ€๊ธฐ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
    • ์ด๋ฅผ ์ž ๊ธˆ ์—†๋Š” ์ผ๊ด€๋œ ์ฝ๊ธฐ๋ผ๊ณ  ํ•œ๋‹ค. ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ํ™œ์šฉ
    • ๊ทธ๋ž˜์„œ ์˜ค๋ž˜ ์ผœ๋†“์œผ๋ฉด ํžˆ์Šคํ† ๋ฆฌ ๋กœ๊ทธ ๋•Œ๋ฌธ์— ๋ž™์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋กค๋ฐฑํžˆ์Šคํ† ๋ฆฌ length
  • ์ž๋™ ๋ฐ๋“œ๋ฝ ๊ฐ์ง€
    • ์ฃผ๊ธฐ์ ์œผ๋กœ Wait-for list๋ฅผ ํ†ตํ•ด deadlock์„ ๊ฐ์ง€ํ•œ๋‹ค.
    • ์ž ๊ธˆ ๋Œ€๊ธฐ ์ค‘์ธ graph๋ฅผ ๊ฐ์ง€ํ•œ๋‹ค.
    • ์–ธ๋‘ ๋กœ๊ทธ๊ฐ€ ๋” ์ ์œผ๋ฉด ๋กค๋ฐฑ์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.
  • ์ž๋™ํ™”๋œ ์žฅ์•  ๋ณต๊ตฌ
    • Mysql ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋  ๋•Œ, ์™„๋ฃŒ๋˜์ง€ ๋ชปํ•œ ํŠธ๋žœ์žญ์…˜์ด๋‚˜ ๋””์Šคํฌ์— ์ผ๋ถ€(Partial write)๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋ณต๊ตฌ ์ž‘์—… ์ง„ํ–‰๋จ
    • ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.
  • InnoDB ๋ฒ„ํผ ํ’€
    • ๋žœ๋ค ์—‘์„ธ์Šค๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด, ๋ชจ์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ
    • 5.7 ๋ถ€ํ„ฐ ๋™์  ์„ค์ • ๊ฐ€๋Šฅ