๐Ÿ“š Databases/RealMySQL 8.0

4.2 InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•„ํ‚คํ…์ณ

iseunghan 2023. 2. 21. 23:49
๋ฐ˜์‘ํ˜•

Lock(์ž ๊ธˆ) ๋ž€?

  • ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•จ
  • ์—ฌ๋Ÿฌ ์ปค๋„ฅ์…˜์—์„œ ๋™์‹œ์— ๊ฐ™์€ ๋ ˆ์ฝ”๋“œ๋‚˜ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•ด ๋ณ€๊ฒฝํ•˜๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด ๋จ.

ํŠน์ง•

  • ๋ ˆ์ฝ”๋“œ ๊ธฐ๋ฐ˜์˜ ์ž ๊ธˆ ์ œ๊ณต
    • ๋†’์€ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    • ์•ˆ์ •์ ์ด๊ณ  ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚จ

4.2.1 Primary Key์— ์˜ํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง

Clustering Index ๋ž€? [ p270 ์ฐธ์กฐ ]

Primary Key ๊ฐ’์ด ๋น„์Šทํ•œ ๋ ˆํฌ๋“œ๋ผ๋ฆฌ ๋ฌถ์–ด์„œ ์ €์žฅํ•˜๋Š” ๊ฒƒ

InnoDB์˜ ํ…Œ์ด๋ธ” ํŠน์ง•

  • Primary Key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋˜์–ด ์ €์žฅ
    • Primary Key ๊ฐ’์˜ ์ˆœ์„œ๋Œ€๋กœ ๋””์Šคํฌ์— ์ €์žฅ
    • Secondary Index๋Š” Primary Key ๊ฐ’์„ ๋…ผ๋ฆฌ์  ์ฃผ์†Œ๋กœ ์‚ฌ์šฉ
  • Primary Key๋ฅผ ์ด์šฉํ•œ ๋ ˆ์ธ์ง€ ์Šค์บ”์€ ๋น ๋ฅธ ์†๋„๋กœ ์ฒ˜๋ฆฌ
    • ๋ ˆ์ธ์ง€ ์Šค์บ” : ํ…Œ์ด๋ธ”์˜ ์ผ๋ถ€(ํŠน์ •) ๋ ˆ์ฝ”๋“œ์—๋งŒ ์—‘์„ธ์Šคํ•ด์„œ ์ฝ์–ด๋“ค์ž„
    • ์ฐธ๊ณ  ์‚ฌ์ดํŠธ
  • Query ์‹คํ–‰ ๊ณ„ํš์—์„œ Primary Key๊ฐ€ ๋‹ค๋ฅธ Index์— ๋น„ํ•ด ๋น„์ค‘์ด ๋†’์Œ
  • ์˜ค๋ผํด DBMS์˜ IOT(Index Organized Table)๊ณผ ๋™์ผ ๊ตฌ์กฐ

MyISAM ํŠน์ง•๊ณผ์˜ ๋น„๊ต

  • ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ‚ค ์ง€์› X
    • Primary Key์™€ Secondary Index์˜ ๊ตฌ์กฐ์  ์ฐจ์ด X
    • Primary Key : Unique ์ œ์•ฝ์„ ๊ฐ€์ง„ Index
  • MyISAM ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ธ๋ฑ์Šค๋Š” ๋ฌผ๋ฆฌ์ ์ธ ๋ ˆํฌ๋“œ ์ฃผ์†Œ ๊ฐ’(ROWID)์„ ๊ฐ€์ง

4.2.2 Foreign Key(์™ธ๋ž˜ํ‚ค) ์ง€์›

Foreign Key(์™ธ๋ž˜ํ‚ค) ๋ž€?

 

Dead Lock(๋ฐ๋“œ๋ฝ) ์ด๋ž€?

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ Transaction(ํŠธ๋žœ์žญ์…˜)๋“ค์ด ์‹คํ–‰์„ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์„œ๋กœ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
  • ๋ถ€๋ชจ ํ…Œ์ด๋ธ”๊ณผ ์ž์‹ ํ…Œ์ด๋ธ” ๋ชจ๋‘ ํ•ด๋‹น Column์— Index ์ƒ์„ฑ ํ•„์š”
  • ๋ณ€๊ฒฝ ์‹œ, ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์ด๋‚˜ ์ž์‹ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ•„์š”
    • ์ž ๊ธˆ์ด ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๋กœ ์ „ํŒŒ๋˜๊ณ  ๊ทธ๋กœ ์ธํ•ด ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ
    • **foreign_key_checks** ๋ณ€์ˆ˜ OFF : ์™ธ๋ž˜ํ‚ค ๊ด€๊ณ„์— ๋Œ€ํ•œ ์ฒดํฌ ์ž‘์—…์„ ์ผ์‹œ์  ๋ฉˆ์ถค

4.2.3 MVCC (Multi Version Concurrency Control)

Concurrency Control(๋™์‹œ์„ฑ ์ œ์–ด) ๋ž€?

  • DBMS๊ฐ€ ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋™์‹œ์— ์ž‘๋™ํ•˜๋Š” ๋‹ค์ค‘ ํŠธ๋žœ์žญ์…˜์˜ ์ƒํ˜ธ๊ฐ„์„ญ ์ž‘์šฉ์—์„œ DB๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ
  • ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด DBMS์—์„œ Lock ๊ธฐ๋Šฅ ์ œ๊ณต
    • ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ,
    • ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ํ•˜๋‚˜์”ฉ ์‹คํ–‰๋˜๋„๋ก ํŠธ๋žœ์žญ์…˜์„ ์ง๋ ฌํ™”ํ•˜๋Š” ๊ฒƒ
  • ๋ชฉ์ 
    • ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ™”
    • ์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ, ๊ฒ€์ƒ‰ ์‹œ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€
  • ๋ฌธ์ œ์ 
    • ์ฝ๊ธฐ ์ž‘์—…๊ณผ ์“ฐ๊ธฐ ์ž‘์—…์ด ์„œ๋กœ ๋ฐฉํ•ด๋ฅผ ์ผ์œผํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
    • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌ
      • Lock์„ ๋” ์˜ค๋ž˜ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ์˜ Lock ์‚ฌ์šฉ์œผ๋กœ, ๋™์‹œ์„ฑ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒ
  • MVCC ์ฐธ๊ณ 

Undo Log ๋ž€?

  • ์‹คํ–‰ ์ทจ์†Œ ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ์˜ ์ง‘ํ•ฉ
    • ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ํ›„ ๋กค๋ฐฑ ์‹œ ์ด์ „ ๋ฐ์ดํ„ฐ๋กœ ๋ณต๊ตฌํ•˜๋„๋ก ๋กœ๊น… ํ•ด๋†“์€ ์˜์—ญ
  • ์–ธ๋‘๋กœ๊ทธ ์ฐธ๊ณ 

MVCC์˜ ๋ชฉ์ 

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ ˆ์ฝ”๋“œ ๋ ˆ๋ฒจ์˜ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” DBMS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์ž ๊ธˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ผ๊ด€๋œ ์ฝ๊ธฐ ์ œ๊ณต
    • InnoDB : Undo Log(์–ธ๋‘๋กœ๊ทธ)๋กœ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • Multi Version : ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฒ„์ „์ด ๋™์‹œ์— ๊ด€๋ฆฌ๋จ์„ ์˜๋ฏธ
    • INSERT : ๋ฒ„ํผ ํ’€ ์ €์žฅ - ๋””์Šคํฌ ์ €์žฅ
    • UPDATE : ๋ณ€๊ฒฝ ์ „ ๋ฐ์ดํ„ฐ ์–ธ๋‘ ๋กœ๊ทธ ์ €์žฅ - ๋ฒ„ํผ ํ’€ ์ˆ˜์ • - ๋””์Šคํฌ ์ˆ˜์ •
    • ์ดํ›„ SELECT : ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋ฒ„ํผ ํ’€ or ์–ธ๋‘ ๋กœ๊ทธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋จ
      • READ_UNCOMMITTED / READ_COMMITED๋‚˜ ๊ทธ ์ด์ƒ
  • ์ฆ‰, ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ์— 2๊ฐœ์˜ ๋ฒ„์ „์ด ์œ ์ง€ → ํ•„์š”์— ๋”ฐ๋ผ ํ‘œ์‹œ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฆ„
Table(member){ id(PR), name, area } : { 12, 'MangKyu', '์„œ์šธ' }
...
(InnoDB) mysql> UPDATE member SET m_area='๊ฒฝ๊ธฐ' WHERE m_id=12;

// Update ๋‚ด์šฉ์— Commit์„ ์•ˆํ•˜๋ฉด SELECT๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๋Š”๊ฐ€?
(InnoDB) mysql> SELECT * FROM member WHERE m_id=12;

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


  • MVCC ๊ธฐ์ˆ ์„ ์ด์šฉํ•ด ์ž ๊ธˆ์„ ๊ฑธ์ง€ ์•Š๊ณ  ์ฝ๊ธฐ ์ž‘์—… ์ˆ˜ํ–‰
    • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž ๊ธˆ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ์ฝ๊ธฐ ์ž‘์—… ๊ฐ€๋Šฅ
  • ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด READ_UNCOMMITTED๋‚˜ READ_COMMITTED, REPEATABLE_READ ์ˆ˜์ค€์ด๋ผ๋ฉด,
    • INSERT์™€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ˆœ์ˆ˜ํ•œ ์ฝ๊ธฐ(SELECT) ์ž‘์—…์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ๋ณ€๊ฒฝ ์ž‘์—…๊ณผ ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ์ž ๊ธˆ์„ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์‹คํ–‰
  • ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์•„์ง ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค ํ•˜๋”๋ผ๋„ ์ด ๋ณ€๊ฒฝ ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ SELECT ์ž‘์—…์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๋Š”๋‹ค
  • ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด ์–ธ๋‘ ๋กœ๊ทธ ์‚ฌ์šฉ
  • ์˜ค๋žœ ์‹œ๊ฐ„๋™์•ˆ ํ™œ์„ฑ ์ƒํƒœ์ธ ํŠธ๋ž™์žญ์…˜์œผ๋กœ ์ธํ•œ MySQL ์„œ๋ฒ„ ๋Š๋ฆผ ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ ์žˆ์Œ
    • ์–ธ๋‘ ๋กœ๊ทธ ์‚ญ์ œ๋ฅผ ๋ชปํ•˜๊ณ  ์œ ์ง€๋กœ ์ธํ•œ ๋ฌธ์ œ
    • ๋กค๋ฐฑ ๋˜๋Š” ์ปค๋ฐ‹์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜์„ ๋น ๋ฅด๊ฒŒ ์™„๋ฃŒํ•˜๋„๋ก ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค

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


  • ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ž ๊ธˆ ๋Œ€๊ธฐ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฒ€์‚ฌ
    • ๊ต์ฐฉ ์ƒํƒœ์— ๋น ์ง„ ํŠธ๋žœ์žญ์…˜๋“ค์„ ์ฐพ์•„ ๊ทธ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ
    • ๋‚ด๋ถ€์ ์œผ๋กœ ์ž ๊ธˆ์ด ๊ต์ฐฉ์ƒํƒœ์— ๋น ์ง€์ง€ ์•Š์•˜๋Š”์ง€ ์ฒดํฌ
    • ์ž ๊ธˆ ๋Œ€๊ธฐ ๋ชฉ๋ก์„ ๊ทธ๋ž˜ํ”„(Wait-for List)ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌ
  • ๊ฐ•์ œ ์ข…๋ฃŒ ํŒ๋‹จ ๊ธฐ์ค€ : Undo Log์˜ ์–‘
    • ์–ธ๋‘ ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋” ์ ๊ฒŒ ๊ฐ€์ง„ ํŠธ๋žœ์žญ์…˜์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋กค๋ฐฑ์˜ ๋Œ€์ƒ
    • ์–ธ๋‘ ๋กœ๊ทธ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ ๊ฒŒ ๊ฐ€์ง€๋ฉด ๋กค๋ฐฑ์„ ํ•ด๋„ ์–ธ๋‘ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•  ๋‚ด์šฉ์ด ์ ๋‹ค๋Š” ๋œป
    • ๊ฐ•์ œ ๋กค๋ฐฑ์œผ๋กœ ์ธํ•œ ์„œ๋ฒ„ ๋ถ€ํ•˜๋„ ๋œ ์œ ๋ฐœ
  • MySQL ์—”์ง„์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ํ…Œ์ด๋ธ” ์ž ๊ธˆ์€ ๋ฐ๋“œ๋ฝ ๊ฐ์ง€๊ฐ€ ๋ถˆํ™•์‹คํ•ด์งˆ ์ˆ˜ ์žˆ์Œ
    • innodb_table_locks์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๊ฐ์ง€ ๊ฐ€๋Šฅ
  • ๋™์‹œ ์ฒ˜๋ฆฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋งŽ๊ฑฐ๋‚˜, ํŠธ๋žœ์žญ์…˜๋“ค์˜ ์ž ๊ธˆ์ด ๋งŽ์•„์ง€๋ฉด ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Š๋ ค์ง
    • ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž ๊ธˆ ๋ชฉ๋ก์ด ์ €์žฅ๋œ ๋ฆฌ์ŠคํŠธ์— ์ƒˆ๋กœ์šด ์ž ๊ธˆ์„ ๊ฑธ์–ด ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๋ง‰๋Š”๋ฐ, ์ด์— ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Š๋ ค์ง€๋ฉด ์„œ๋น„์Šค ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌ ์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—… ๋ถˆ๊ฐ€
    • innodb_deadlock_detect : ๋ฐ๋“œ๋ฝ ๊ฐ์ง€ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”
      • ์ ์ ˆํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ CPU ์ž์› ์†Œ๋ชจ๋ฅผ ์ค„์ด์ž
    • innodb_lock_wait_timeout : ๋ฐ๋“œ๋ฝ ์ƒํ™ฉ์— ์ผ์ • ์‹œ๊ฐ„(์ดˆ)์ด ์ง€๋‚˜๋ฉด ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜

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


  • InnoDB ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ MySQL์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ํ•ญ์ƒ ์ž๋™ ๋ณต๊ตฌ ์ˆ˜ํ–‰
    • ์ด ๋•Œ ๋ณต๊ตฌ๋  ์ˆ˜ ์—†๋Š” ์†์ƒ์ด ์žˆ์œผ๋ฉด ์„œ๋ฒ„ ์ข…๋ฃŒ
    • innodb_force_recovery : ๋ณต๊ตฌ ์˜ต์…˜์— ๋Œ€ํ•œ ๋ณ€์ˆ˜ (์„ค์ •๊ฐ’ : 1~6)
  • ๋ณต๊ตฌ ์˜ต์…˜
    • 1(SRV_FORCE_IGNORE_CORRUPT)
      • ์†์ƒ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋„ ๋ฌด์‹œํ•˜๊ณ  MySQL ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘
    • 2(SRV_FORCE_NO_BACKGROUND)
      • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  MySQL ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘
    • 3(SRV_FORCE_NO_TRX_UNDO)
      • MySQL ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘ํ• ๋•Œ ์ด์ „์— ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜ ๋ณต๊ตฌ ์ž‘์—…์„ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒํ•จ
    • 4(SRV_FORCE_NO_IBUF_MERGE)
      • Insert Buffer ๋‚ด์šฉ์„ ๋ฌด์‹œํ•˜๊ณ  MySQL ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘
    • 5(SRV_FORCE_NO_UNDO_LOG_SCAN)
      • Undo log ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  MySQL ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘
    • 6(SRV_FORCE_NO_LOG_REDO)
      • Redo log ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  MySQL ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘

4.2.7 InnoDB ๋ฒ„ํผ ํ’€


Buffer Pool

  • ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด๋‚˜ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•ด ๋‘๋Š” ๊ณต๊ฐ„
    • ์“ฐ๊ธฐ ์ž‘์—…์„ ์ง€์—ฐ์‹œ์ผœ ์ผ๊ด„ ์ž‘์—…์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•จ
    • INSERT, UPDATE, DELETE์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฟผ๋ฆฌ๋Š” ๋žœ๋คํ•œ ๋””์Šคํฌ ์ž‘์—… ๋ฐœ์ƒ
      • Buffer Pool์€ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌ → ๋žœ๋คํ•œ ๋””์Šคํฌ ์ž‘์—… ํšŸ์ˆ˜ ํ•˜๋ฝ

๋ฒ„ํผ ํ’€์˜ ํฌ๊ธฐ ์„ค์ •

  • ์šด์˜์ฒด์ œ์™€ ๊ฐ ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•ด ์„ค์ •
    • 8GB ๋ฏธ๋งŒ : 50% ์ •๋„๋งŒ InnoDB ๋ฒ„ํผ ํ’€ ํฌ๊ธฐ๋กœ ์„ค์ •ํ•˜๊ณ , ์กฐ๊ธˆ์”ฉ ์˜ฌ๋ฆฌ๋ฉด์„œ ์ตœ์ ์ ์„ ์ฐพ๊ธฐ
    • 50GB ์ด์ƒ : 20~35GB ์ •๋„๋ฅผ InnoDB ๋ฒ„ํผ ํ’€ ํฌ๊ธฐ๋กœ ์„ค์ •
  • Record Buffer(๋ ˆ์ฝ”๋“œ ๋ฒ„ํผ)
    • ๊ฐ ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜์—์„œ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์“ธ ๋•Œ ๋ฒ„ํผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„
    • ์ปค๋„ฅ์…˜๊ณผ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ด๋ธ”์ด ๋งŽ๋‹ค๋ฉด ๋ ˆ์ฝ”๋“œ ๋ฒ„ํผ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋งŽ์ด ํ•„์š”
    • MySQL ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ ˆ์ฝ”๋“œ ๋ฒ„ํผ ๊ณต๊ฐ„์€ ๋ณ„๋„๋กœ ์„ค์ •ํ•  ์ˆ˜ ์—†์Œ
    • ์ „์ฒด ์ปค๋„ฅ์…˜ ๊ฐœ์ˆ˜์™€ ๊ฐ ์ปค๋„ฅ์…˜์—์„œ ์ฝ๊ณ  ์“ฐ๋Š” ํ…Œ์ด๋ธ” ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๊ฒฐ์ •
    • ๋™์ ์œผ๋กœ ํ•ด์ œ ๊ฐ€๋Šฅ
  • InnoDB ๋ฒ„ํผ ํ’€์˜ ํฌ๊ธฐ๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ ˆ ๊ฐ€๋Šฅ(MySQL 5.7 ์ดํ›„)
    • innodb_buffer_pool_size : ๋ฒ„ํผ ํ’€ ํฌ๊ธฐ ์„ค์ • (128MB ๋‹จ์œ„ ์ฒ˜๋ฆฌ)
    • innodb_buffer_pool_instances : ๋ฒ„ํผ ํ’€์„ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„๋ฆฌํ•ด ํ• ๋‹น

๋ฒ„ํผ ํ’€์˜ ๊ตฌ์กฐ

  • ๋ฒ„ํผ ํ’€์€ ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ์ฝ๊ณ , ๊ณต๊ฐ„์„ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์–ด ์ €์žฅ
  • ๋ฒ„ํผ ํ’€์˜ ํŽ˜์ด์ง€ ํฌ๊ธฐ ์กฐ๊ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ (3๊ฐœ)
    • LRU(Least Recently Used) ๋ฆฌ์ŠคํŠธ
    • Flush(ํ”Œ๋Ÿฌ์‹œ) ๋ฆฌ์ŠคํŠธ
    • Free(ํ”„๋ฆฌ) ๋ฆฌ์ŠคํŠธ
      • ๋น„์–ด ์žˆ๋Š” ํŽ˜์ด์ง€ ๋ชฉ๋ก, ์ƒˆ๋กญ๊ฒŒ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ์ฝ์–ด์™€์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ

LRU ๋ฆฌ์ŠคํŠธ

Page(ํŽ˜์ด์ง€) ๋ž€?

  • ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ ๋‹จ์œ„ (16KB ๊ณ ์ •)

  • LRU์™€ MRU(Most Recently Used) ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ฒฐํ•ฉ๋œ ํ˜•ํƒœ
    • LRU : ๊ฐ€์žฅ ์˜ค๋ž˜ ์ „ ์‚ฌ์šฉ๋œ ํŽ˜์ด์ง€ ๋ฆฌ์ŠคํŠธ **Old ์„œ๋ธŒ๋ฆฌ์ŠคํŠธ**
    • MRU : ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ฌ์šฉ๋œ ํŽ˜์ด์ง€ ๋ฆฌ์ŠคํŠธ **New ์„œ๋ธŒ๋ฆฌ์ŠคํŠธ**
    • ๋ฒ„ํผ ํ’€์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํŽ˜์ด์ง€๋Š” ์ƒ์œ„๋กœ, ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€๋Š” ํ•˜์œ„๋กœ ์ด๋™
  • LRU ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ ๋ชฉ์ 
    • ๋””์Šคํฌ ์ฝ๊ธฐ ์ตœ์†Œํ™”
      • ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ํ•œ ๋ฒˆ ์ฝ์–ด์˜จ ํŽ˜์ด์ง€๋ฅผ ์ตœ๋Œ€ํ•œ ์˜ค๋žซ๋™์•ˆ ๋ฒ„ํผ ํ’€์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€
  • LRU ๊ณผ์ •
    1. ํ•„์š”ํ•œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๊ฐ€ ๋ฒ„ํผ ํ’€์— ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
    2. ๋””์Šคํฌ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ๋ฒ„ํผ ํ’€์— ์ ์žฌ, ์ ์žฌ๋œ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ LRU ํ—ค๋”์— ์ถ”๊ฐ€
    3. ๋ฒ„ํผ ํ’€์˜ LRU ํ—ค๋”์— ์ ์žฌ๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๊ฐ€ ์‹ค์ œ๋กœ ์ฝํžˆ๋ฉด MRU ํ—ค๋”๋กœ ์ด๋™
    4. ๋ฒ„ํผ ํ’€์— ์ƒ์ฃผํ•˜๋Š” ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋Š” ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ์˜ ์ตœ๊ทผ ์ ‘๊ทผ ๋นˆ๋„์— ๋”ฐ๋ผ ๋‚˜์ด ๋ถ€์—ฌ
      1. ๋ฒ„ํผ ํ’€์— ์ƒ์ฃผํ•˜์ง€๋งŒ ์ฟผ๋ฆฌ์—์„œ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋Š” ๋‚˜์ด๊ฐ€ ์˜ค๋ž˜๋จ
      2. ๊ฒฐ๊ตญ ํ•ด๋‹น ํŽ˜์ด์ง€๋Š” ๋ฒ„ํผ ํ’€์—์„œ ์ œ๊ฑฐ
      3. ์ฟผ๋ฆฌ์— ์˜ํ•ด ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋Š” ๋‚˜์ด๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์–ด MRU ํ—ค๋”๋กœ ์ด๋™
    5. ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž์ฃผ ์ ‘๊ทผ๋๋‹ค๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€์˜ ์ธ๋ฑ์Šค ํ‚ค๋ฅผ ์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค์— ์ถ”๊ฐ€

Flush ๋ฆฌ์ŠคํŠธ

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

๋ฒ„ํผ ํ’€๊ณผ Redo Log(๋ฆฌ๋‘ ๋กœ๊ทธ)

Redo Log ๋ž€?

  • DB์— ์ƒ๊ธด ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๊ธฐ๋กํ•ด๋†“์€ ํŒŒ์ผ
  • ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊นจ์–ด์งˆ ๊ฒฝ์šฐ, ๋ฆฌ๋‘ ๋กœ๊ทธ์— ๋‚จ๊ฒจ์ง„ ๊ธฐ๋ก์„ ์ด์šฉํ•˜์—ฌ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต๊ตฌ
  • Redo Log ์ฐธ๊ณ 

  • ๋ฒ„ํผ ํ’€์—๋Š” Clean Page์™€ Dirty Page๊ฐ€ ์กด์žฌ
    • Clean Page(ํด๋ฆฐ ํŽ˜์ด์ง€) : ๋””์Šคํฌ์—์„œ ์ฝ์€ ์ƒํƒœ๋กœ ์ „ํ˜€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€
    • Dirty Page(๋”ํ‹ฐ ํŽ˜์ด์ง€) : INSERT, UPDATE, DELETE ๋ช…๋ น์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ํŽ˜์ด์ง€
  • ๋”ํ‹ฐ ํŽ˜์ด์ง€๋Š” ๋””์Šคํฌ์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ์–ธ์  ๊ฐ€๋Š” ๋””์Šคํฌ๋กœ ๊ธฐ๋ก๋˜์•ผํ•จ
    • ๋‹จ, ๋ฌดํ•œ์ • ๋Œ€๊ธฐํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฆฌ๋‘ ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ
  • ๋ฆฌ๋‘ ๋กœ๊ทธ๋Š” ํ•˜๋‚˜์˜ ๊ณ ์ • ํฌ๊ธฐ์˜ ํŒŒ์ผ์„ ์ˆœํ™˜ ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉ
    • ์–ด๋Š ์ˆœ๊ฐ„ ์‚ฌ์šฉ์ค‘์ธ ๊ณต๊ฐ„์„ ๋ฎ์–ด ์“ธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๋ถ„์ด ํ•„์š”
      • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๊ณต๊ฐ„, ๋‹น์žฅ ์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„
      • ์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„ : Active Redo Log(ํ™œ์„ฑ ๋ฆฌ๋‘ ๋กœ๊ทธ)
  • LSN(LogSequence Number)
    • ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ์ˆœํ™˜ํ•˜๋ฉด์„œ ์žฌ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๋กœ๊ทธ ํฌ์ง€์…˜์€ ๊ณ„์† ์ฆ๊ฐ€
    • ํ™œ์„ฑ ๋ฆฌ๋‘ ๋กœ๊ทธ ๊ณต๊ฐ„์˜ ์‹œ์ž‘์ 
      • ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋ก ์‹œ, ๊ฐ€์žฅ ์ตœ๊ทผ ์ฒดํฌํฌ์ธํ„ฐ ์‹œ์ ์˜ LSN
    • Checkpoint Age(์ฒดํฌํฌ์ธํŠธ ์—์ด์ง€)
      • ๊ฐ€์žฅ ์ตœ๊ทผ ์ฒดํฌํฌ์ธํŠธ์˜ LSN๊ณผ ๋งˆ์ง€๋ง‰ ๋ฆฌ๋‘ ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ์˜ LSN์˜ ์ฐจ์ด
      • ํ™œ์„ฑ ๋ฆฌ๋‘ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ
  • ์ฒดํฌํฌ์ธํŠธ์˜ LSN๋ณด๋‹ค ์ž‘์€ ๋ฆฌ๋‘ ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋“ค์„ ๋””์Šคํฌ์— ๋™๊ธฐํ™”

Buffer Pool Flush(๋ฒ„ํผ ํ’€ ํ”Œ๋Ÿฌ์‹œ)

Flush(ํ”Œ๋Ÿฌ์‹œ)

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ DBํŒŒ์ผ์— ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด, ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ์ž„์‹œ ๋””์Šคํฌ ์Šคํ† ๋ฆฌ์ง€ ์˜์—ญ์— ๋ฒ„ํผํ•˜๋Š” ๊ฒƒ

  • ๋ฒ„ํผ ํ’€์—์„œ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋“ค์„ ์„ฑ๋Šฅ์ƒ ์•…์˜ํ–ฅ ์—†์ด ๋””์Šคํฌ์— ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ
    • Flush_list Flush(ํ”Œ๋Ÿฌ์‹œ ๋ฆฌ์ŠคํŠธ ํ”Œ๋Ÿฌ์‹œ)
    • LRU_list Flush(LRU ๋ฆฌ์ŠคํŠธ ํ”Œ๋Ÿฌ์‹œ)

Flush_list Flush(ํ”Œ๋Ÿฌ์‹œ ๋ฆฌ์ŠคํŠธ ํ”Œ๋Ÿฌ์‹œ)

  • ์˜ค๋ž˜๋œ ๋ฆฌ๋‘ ๋กœ๊ทธ ๊ณต๊ฐ„์„ ์ง€์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋”ํ‹ฐ ํŽ˜์ด์ง€๊ฐ€ ๋””์Šคํฌ์™€ ๋™๊ธฐํ™” ๋˜์•ผํ•จ
  • ํ”Œ๋Ÿฌ์‹œ ๋ฆฌ์ŠคํŠธ ํ”Œ๋Ÿฌ์‹œ ํ•จ์ˆ˜ ํ˜ธ์ถœ
    • ํ”Œ๋Ÿฌ์‹œ ๋ฆฌ์ŠคํŠธ์—์„œ ์˜ค๋ž˜์ „์— ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ์ˆœ์„œ๋Œ€๋กœ ๋””์Šคํฌ์— ๋™๊ธฐํ™”
    • ์‹œ์Šคํ…œ ๋ณ€์ˆ˜ ์ œ๊ณต
  • Cleaner Thread(ํด๋ฆฌ๋„ˆ ์Šค๋ ˆ๋“œ)
    • ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ๋กœ ๋™๊ธฐํ™” ํ•˜๋Š” ์Šค๋ ˆ๋“œ
    • innodb_page_cleaners : ํด๋ฆฌ๋„ˆ ์Šค๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜ ์กฐ์ ˆ
    • innodb_buffer_pool_instances์™€ ๋™์ผํ•œ ๊ฐ’์œผ๋กœ ํ•œ๋‹ค.
      • ํ•˜๋‚˜์˜ ํด๋ฆฌ๋„ˆ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฒ„ํผ ํ’€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค์ •ํ•˜๋ฉด ์ข‹์Œ
  • ๋”ํ‹ฐ ํŽ˜์ด์ง€์™€ ํด๋ฆฐ ํŽ˜์ด์ง€์˜ ๋น„์œจ ์กฐ์ •
    • innodb_max_dirty_pages_pct : ๋”ํ‹ฐ ํŽ˜์ด์ง€์™€ ํด๋ฆฐ ํŽ˜์ด์ง€์˜ ๋น„์œจ์„ ์ •ํ•จ (๊ธฐ๋ณธ๊ฐ’์ด ์ข‹์Œ)
      • ๋งŽ์€ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ง€๋ฉด ๋ฒ„ํผ๋ง์ด ํšจ์œจ์€ ์ข‹์•„์ง
      • ํ•˜์ง€๋งŒ, ํ•œ๋ฒˆ์— ๋””์Šคํฌ ์“ฐ๊ธฐ๋ฅผ ํ•˜๋ฉด ๋””์Šคํฌ ์“ฐ๊ธฐ ํญ๋ฐœ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
    • innodb_max_dirty_pages_pct_lwm : ๊ธฐ์ค€ ์ด์ƒ ๋”ํ‹ฐ ํŽ˜์ด์ง€ ๋ฐœ์ƒ → ์กฐ๊ธˆ์”ฉ ๋””์Šคํฌ๋กœ ๊ธฐ๋ก
  • DB์„œ๋ฒ„์—์„œ ๋””์Šคํฌ ์ฝ๊ณ  ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ •๋„ ์„ค์ •
    • ๋””์Šคํฌ ์ฝ๊ณ  ์“ฐ๊ธฐ : ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋””์Šคํฌ ์ž‘์—… (๋ฒ„ํผ ํ’€์˜ ๋”ํ‹ฐ ํŽ˜์ด์ง€ ์“ฐ๊ธฐ)
    • innodb_io_capacity : ์ผ๋ฐ˜ ์ƒํ™ฉ์—์„œ ๋””์Šคํฌ๊ฐ€ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์˜ ๊ฐ’ ์„ค์ •
    • innodb_io_capacity_max : ๋””์Šคํฌ๊ฐ€ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•  ๋•Œ Read/Write ์ฒ˜๋ฆฌ ์ˆ˜์ค€ ๊ฐ’ ์„ค์ •
  • Adaptive Flush(์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ”Œ๋Ÿฌ์‹œ)
    • ๋”ํ‹ฐ ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด DB๊ฐ€ ์ ์ ˆํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ฒ˜๋ฆฌ
      • ๋ฆฌ๋‘ ๋กœ๊ทธ์˜ ์ฆ๊ฐ€ ์†๋„๋ฅผ ๋ถ„์„
      • ์ ์ ˆํ•œ ์ˆ˜์ค€์˜ ๋”ํ‹ฐ ํŽ˜์ด์ง€๊ฐ€ ๋ฒ„ํผ ํ’€์— ์œ ์ง€๋  ์ˆ˜ ์žˆ๋„๋ก ๋””์Šคํฌ ์“ฐ๊ธฐ ์‹คํ–‰
    • innodb_adaptive_flushing : ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ๊ธฐ์ค€
    • innodb_adaptive_flushing_lwm (๊ธฐ๋ณธ๊ฐ’ : 10%)
      • ์ „์ฒด ๋ฆฌ๋‘ ๋กœ๊ทธ ๊ณต๊ฐ„ ไธญ ํ™œ์„ฑ ๋ฆฌ๋‘ ๋กœ๊ทธ ๊ณต๊ฐ„์ด ์„ค์ •๊ฐ’ ์ด์ƒ์ด๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰
  • innodb_flush_neighbor
    • ๋”ํ‹ฐ ํŽ˜์ด์ง€์™€ ๋””์Šคํฌ ๋™๊ธฐํ™” ๋•Œ ๋ฐœ์ƒ
    • ๋””์Šคํฌ์—์„œ ๊ทผ์ ‘ํ•œ ํŽ˜์ด์ง€ ์ค‘ ๋”ํ‹ฐ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•จ๊ป˜ ๋ฌถ์–ด์„œ ๋””์Šคํฌ๋กœ ๊ธฐ๋กํ•˜๋Š” ๊ธฐ๋Šฅ

LRU ๋ฆฌ์ŠคํŠธ ํ”Œ๋Ÿฌ์‹œ

  • LRU ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ์ œ๊ฑฐ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€ ์ฝ์„ ๊ณต๊ฐ„ ์ฐฝ์กฐ
  • innodb_lru_scan_depth : LRU ๋ฆฌ์ŠคํŠธ ๋๋ถ€ํ„ฐ ํ•ด๋‹น ๊ธฐ์ค€๊นŒ์ง€ ํŽ˜์ด์ง€ ์Šค์บ”
  • ์Šค์บ”๋œ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋Š” ๋””์Šคํฌ์— ๋™๊ธฐํ™”
  • ํด๋ฆฐ ํŽ˜์ด์ง€๋Š” ์ฆ‰์‹œ ํ”„๋ฆฌ ๋ฆฌ์ŠคํŠธ๋กœ ์ด์ „

๋ฒ„ํผ ํ’€ ์ƒํƒœ ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ

  • Warming Up(์›Œ๋ฐ์—…)
    • ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฒ„ํผ ํ’€์— ์ ์žฌ๋ผ ์žˆ๋Š” ์ƒํƒœ
    • ์›Œ๋ฐ์—…์ด ๋œ ์ƒํƒœ์™€ ์•ˆ ๋œ ์ƒํƒœ๋Š” ๋ช‡์‹ญ ๋ฐฐ์˜ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋‚จ
  • ๋ฒ„ํผ ํ’€์— ์บ์‹œ๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ๋“ค์˜ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ด
    • ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์‹œ ๋ฒ„ํผ ํ’€์ด ๋‚ ๋ผ๊ฐ€ ์†๋„๊ฐ€ ๋Š๋ ค์ง
    • ๊ธฐ์กด์—๋Š” ์›Œ๋ฐ์—…์ด๋ž€ ์ž‘์—…์œผ๋กœ ์„œ๋น„์Šค ์ „ ์ž„์˜๋กœ ๋ฒ„ํผ ํ’€์— ์บ์‹œํ•ด์คŒ
    • MySQL 5.6 ์ดํ›„, ๋ฒ„ํผํ’€ ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐ
  • ์ฝ”๋“œ
// ์„œ๋ฒ„ ์…ง๋‹ค์šด ์ „, ๋ฒ„ํผ ํ’€ ์ƒํƒœ ๋ฐฑ์—…
mysql> SET GLOBAL innodb_buffer_pool_dump_now=ON;
...
// ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ํ›„, ๋ฐฑ์—…๋œ ๋ฒ„ํผ ํ’€ ์ƒํƒœ ๋ณต๊ตฌ
mysql> SET GLOBAL innodb_buffer_pool_load_now=ON;
...
// ๋ฒ„ํผ ํ’€ ๋ณต๊ตฌ ์ƒํƒœ ํ™•์ธ
mysql> SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status'\G
...
// ๋ฒ„ํผ ํ’€ ๋ณต๊ตฌ ์ž‘์—…์ด ์˜ค๋ž˜ ๊ฑธ๋ ค์„œ ์ค‘๊ฐ„์— ๋ฉˆ์ถ”๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•
mysql> SET GLOBAL innodb_buffer_pool_load_abort=ON;

๋ฒ„ํผ ํ’€์˜ ์ ์žฌ ๋‚ด์šฉ ํ™•์ธ

  • MySQL 5.6 ์ดํ›„
    • ๋ฒ„ํผ ํ’€์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์–ด๋–ค ํ…Œ์ด๋ธ”์˜ ํŽ˜์ด์ง€๋“ค์ด ์ ์žฌ๋ผ ์žˆ๋Š”์ง€ ํ™•์ธ ๋ฐฉ๋ฒ•
      • MySQL ์„œ๋ฒ„์˜ information_schema DB์˜ innodb_buffer_page ํ…Œ์ด๋ธ” ์ด์šฉ
    • ํ•˜์ง€๋งŒ ๋ฒ„ํผ ํ’€์ด ํฐ ๊ฒฝ์šฐ, ํ…Œ์ด๋ธ” ์กฐํšŒ์— ์ƒ๋‹นํžˆ ํฐ ๋ถ€ํ•˜๋ฅผ ์ผ์œผํ‚ด → ๋Š๋ ค์ง
  • MySQL 8.0 ์ดํ›„
    • information_schema DB์— innodb_cached_indexes ํ…Œ์ด๋ธ” ์ƒˆ๋กœ ์ถ”๊ฐ€
    • ํ…Œ์ด๋ธ”์˜ ์ธ๋ฑ์Šค ๋ณ„๋กœ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฒ„ํผ ํ’€์— ์ ์žฌ๋ผ ์žˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ
mysql>
SELECT
	it.name table_name,
	ii.name index_name,
	ici.n_cached_pages n_cached_pages
FROM information_schema.innodb_tables it
	INNER JOIN information_schema.innodb_indexes ii ON ii.table_id=it.table_id
	INNER JOIN information_schema.innodb_cached_indexes ici ON ici.index_id=ii.index_id
WHERE it.name=CONCAT('employees','/','employees')

4.2.8 Double Write Buffer

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

์ด ๋ฌธ์ œ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด Double Write Buffer๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ถœ์ฒ˜: https://hoing.io/archives/1114

๊ทธ๋ฆผ์„ ๋ณด๋ฉด, A,B,C,D์˜ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ๋กœ ํ”Œ๋Ÿฌ์‹œ๋ฅผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ.

  1. A~D๊นŒ์ง€ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ฅผ ์šฐ์„  ๋ฌถ์–ด์„œ ํ•œ๋ฒˆ์˜ ๋””์Šคํฌ ์“ฐ๊ธฐ๋กœ ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค์— DoubleWrite ๋ฒ„ํผ์— ๊ธฐ๋กํ•œ๋‹ค.
  2. InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ๊ฐ ๋”ํ‹ฐ ํŽ˜์ด์ง€๋ฅผ ํŒŒ์ผ์˜ ์ ๋‹นํ•œ ์œ„์น˜์— ํ•˜๋‚˜์”ฉ ๋žœ๋ค์œผ๋กœ ์“ฐ๊ธฐ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
๐Ÿ’ก Double Write Buffer์˜ ๋‚ด์šฉ์€ ์‹ค์ œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์“ฐ๊ธฐ๋ฅผ ์‹คํŒจํ•  ๋•Œ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ, ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

 

์‹ค์ œ ๋””์Šคํฌ์— ๋”ํ‹ฐ ํŽ˜์ด์ง€๋“ค์ด ์ •์ƒ์ ์œผ๋กœ ์ €์žฅ์ด ๋˜๋ฉด, Double Write ๋ฒ„ํผ์— ๊ธฐ๋ก๋œ ํŽ˜์ด์ง€๋“ค์€ ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.

  • innodb_doublewrite: ํ•ด๋‹น ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋กœ DoubleWrite์˜ ์‚ฌ์šฉ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • innodb_flush_log_at_trx_commit: innoDB ๋ฆฌ๋‘ ๋กœ๊ทธ ๋™๊ธฐํ™” ์„ค์ •์„ 1๋กœ ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์—๋Š” DoubleWrite๋ฅผ ํ•จ๊ป˜ ๊บผ์ฃผ๋Š”๊ฒŒ ์„œ๋ฒ„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋œ๋‹ค.

4.2.9 ์–ธ๋‘ ๋กœ๊ทธ

๐Ÿ’ก DML(insert, update, delete)์„ ์‹คํ–‰ํ•œ ๋’ค, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „์˜ ๋ฒ„์ „์„ ๋ณ„๋„๋กœ ๋ฐฑ์—…ํ•˜๋Š”๋ฐ ์ด๋ฅผ ์–ธ๋‘ ๋กœ๊ทธ๋ผ๊ณ  ํ•œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ๋ณด์žฅ
    • ํŠธ๋žœ์žญ์…˜์ด ๋กค๋ฐฑ๋˜๋ฉด ์ด์ „ ๋ฐ์ดํ„ฐ๋กœ ์˜ฎ๊ฒจ์•ผํ•˜๋Š”๋ฐ ๋ฐ”๋กœ ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•ด ๋ณต๊ตฌํ•œ๋‹ค. (ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ ๋Œ€๋น„์šฉ)
  • ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ๋ณด์žฅ
    • ์„œ๋กœ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜์ •, ์กฐํšŒ๋ฅผ ๋™์‹œ์— ํ•  ๋•Œ, ์–ธ๋‘ ๋กœ๊ทธ์— ๋ฐฑ์—…ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (REPEATABLE READ)

๋™์ž‘๊ณผ์ •

mysql> UPDATE member SET name = 'abc' WHERE member_id=1;
  1. ์œ„ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์•„๋„ ์‹ค์ œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ‘abc’๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.
    1. ! ์‹ค์ œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ๋ฒ„ํผ ํ’€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๋Š”์ง€, ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๋Š”์ง€ ์ฐพ์•„๋ณด๊ธฐ.
  2. ๋งŒ์•ฝ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „ ๋ฐ์ดํ„ฐ๊ฐ€ ‘def’ ์˜€๋‹ค๋ฉด, ์–ธ๋‘ ๋กœ๊ทธ์—๋Š” ‘def’๋ผ๋Š” ๊ฐ’์œผ๋กœ ๋ฐฑ์—…๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค.
  3. ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹์ด ๋˜๋ฉด → ํ˜„์žฌ ์ƒํƒœ ์œ ์ง€ (’abc’)
  4. ํŠธ๋žœ์žญ์…˜์ด ๋กค๋ฐฑ์ด ๋˜๋ฉด → ์–ธ๋‘ ๋กœ๊ทธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ณต๊ตฌ (’def’)

๋†’์€ ๋น„์šฉ

MySQL 5.5 ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ํ•œ๋ฒˆ ์ฆ๊ฐ€ํ•œ ์–ธ๋‘ ๋กœ๊ทธ ๊ณต๊ฐ„์„ ์ค„์–ด๋“ค์ง€ ์•Š์•˜๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, 100GB ํฌ๊ธฐ์˜ ํ…Œ์ด๋ธ”์„ DELETE๋กœ ์‚ญ์ œํ•  ๋•Œ
  • ๋ ˆ์ฝ”๋“œ ํ•œ๊ฑด์„ ์‚ญ์ œํ•˜๊ณ  ์–ธ๋‘ ๋กœ๊ทธ์— ๋ฐฑ์—……

100GB ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜์ง€๋งŒ, ๊ทธ ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ธ๋‘ ๋กœ๊ทธ์— ๋ฐฑ์—…ํ•ด๋‘ฌ์•ผ ํ•œ๋‹ค. ๊ฒฐ๊ตญ ์–ธ๋‘ ๋กœ๊ทธ์˜ ๊ณต๊ฐ„์ด 100GB๊ฐ€ ๋˜๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ, MySQL 8.0์—์„œ๋Š” ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ๋Œ์•„๊ฐ€๋ฉด์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋•Œ๋กœ๋Š” MySQL ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•œ ์‹œ์ ์— ์‚ฌ์šฉ ๊ณต๊ฐ„์„ ์ž๋™์œผ๋กœ ์ค„์—ฌ์ฃผ๊ธฐ๋„ ํ•œ๋‹ค.

4.2.9.2 ์–ธ๋‘ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ

๐Ÿ’ก ์–ธ๋‘ ๋กœ๊ทธ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์„ ์–ธ๋‘ ํ…Œ์ด๋ธ” ์ŠคํŽ˜์ด์Šค๋ผ๊ณ  ํ•œ๋‹ค.
  • ~ MySQL 5.6 : ์–ธ๋‘ ๋กœ๊ทธ๊ฐ€ ๋ชจ๋‘ ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค (ibdata.ibd)์— ์ €์žฅ ๋˜์—ˆ์Œ
    • ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋Š” ์„œ๋ฒ„๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Œ
  • MySQL 8.0.14 ~ : ์–ธ๋‘ ๋กœ๊ทธ๋Š” ํ•ญ์ƒ ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค ์™ธ๋ถ€์˜ ๋ณ„๋„ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜๋„๋ก ๊ฐœ์„ ๋˜์—ˆ๋‹ค.

Undo tablespace truncate

๐Ÿ’ก ์–ธ๋‘ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค ๊ณต๊ฐ„์„ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๋‚จ๊ธฐ๊ณ  ๋ถˆํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๊ณผ๋„ํ•˜๊ฒŒ ํ• ๋‹น๋œ ๊ณต๊ฐ„์„ ์šด์˜์ฒด์ œ์— ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ฒƒ์„ Undo tablespace truncate๋ผ๊ณ  ํ•œ๋‹ค.

2๊ฐ€์ง€ ๋ชจ๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ,

  • ์ž๋™ ๋ชจ๋“œ: InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ ํผ์ง€ ์Šค๋ ˆ๋“œ(Purge Thread)๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊นจ์–ด๋‚˜์„œ ์–ธ๋‘ ๋กœ๊ทธ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ณต๊ฐ„์„ ์ž˜๋ผ๋‚ด๊ณ  ์šด์˜์ฒด์ œ๋กœ ๋ฐ˜๋‚ฉํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ Undo Purge๋ผ๊ณ  ํ•จ.
    • innodb_undo_log_truncate: ON(ํ™œ์„ฑํ™”)
    • innodb_purge_resg_truncate_frequency: Undo purge ์ž‘์—… ๋นˆ๋„์ˆ˜ ์กฐ์ ˆ
  • ์ˆ˜๋™ ๋ชจ๋“œ: ํผ์ง€ ์Šค๋ ˆ๋“œ๋Š” ๋น„ํ™œ์„ฑ ์ƒํƒœ์˜ ์–ธ๋‘ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋ฅผ ์ฐพ์•„์„œ ๋ถˆํ•„์š”ํ•œ ๊ณต๊ฐ„์„ ์ž˜๋ผ๋‚ด๊ณ  ์šด์˜์ฒด์ œ๋กœ ๋ฐ˜๋‚ฉํ•œ๋‹ค. ๋ฐ˜๋‚ฉ์ด ์™„๋ฃŒ๋˜๋ฉด ์–ธ๋‘ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™” ํ•œ๋‹ค.
    • ์ˆ˜๋™ ๋ชจ๋“œ๋Š” ์–ธ๋‘ ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๊ฐ€ ์ตœ์†Œ 3๊ฐœ ์ด์ƒ์ด์–ด์•ผ ์ž‘๋™ํ•œ๋‹ค.

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

Insert, Update ์‹œ ํ…Œ์ด๋ธ”์— ํฌํ•จ๋œ ์ธ๋ฑ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…๋„ ํ•„์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ ์ž‘์—…์€ ๋žœ๋คํ•˜๊ฒŒ ๋””์Šคํฌ๋ฅผ ์ฝ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ธ๋ฑ์Šค๊ฐ€ ๋งŽ๋‹ค๋ฉด ์ƒ๋‹นํžˆ ๋งŽ์€ ์ž์›์„ ์†Œ๋ชจํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿ’ก ๊ทธ๋ž˜์„œ InnoDB๋Š” ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๊ฐ€ ๋ฒ„ํผ ํ’€์— ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š๊ณ  ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์™€์„œ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ฆ‰์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ž„์‹œ ๊ณต๊ฐ„์— ์ €์žฅํ•ด ๋‘๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฒด์ธ์ง€ ๋ฒ„ํผ๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ด์•ผ ํ•˜๋Š” ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ์ฒด์ธ์ง€ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • innodb_change_buffering : ์ฒด์ธ์ง€ ๋ฒ„ํผ๊ฐ€ ๋™์ž‘ ๋ฐฉ์‹์„ ์„ค์ •ํ•˜๋Š” ์‹œ์Šคํ…œ ๋ณ€์ˆ˜
  • innodb_change_buffer_max_size : ์ฒด์ธ์ง€ ๋ฒ„ํผ์˜ ๋ฒ„ํผ ํ’€ ์‚ฌ์ด์ฆˆ๋ฅผ ์„ค์ •ํ•˜๋Š” ์‹œ์Šคํ…œ ๋ณ€์ˆ˜

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

MySQL์„ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋กœ๊ทธ๋กœ ๋จผ์ € ๊ธฐ๋กํ•œ๋‹ค.

2๊ฐ€์ง€ ์ƒํ™ฉ์ด ์žˆ๋‹ค.

  1. ์ปค๋ฐ‹๋์ง€๋งŒ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ
  2. ๋กค๋ฐฑ๋์ง€๋งŒ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ด๋ฏธ ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ

1๋ฒˆ ์ƒํ™ฉ์€, ๋ฆฌ๋‘ ๋กœ๊ทธ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ณต์‚ฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

2๋ฒˆ ์ƒํ™ฉ์€, ๋ฆฌ๋‘ ๋กœ๊ทธ๋งŒ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜๊ฐ€ ์—†๋Š”๋ฐ ์ด๋•Œ๋Š” ๋ณ€๊ฒฝ๋˜๊ธฐ ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ์–ธ๋‘ ๋กœ๊ทธ์˜ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๋ณต์‚ฌํ•˜๋ฉด ๋œ๋‹ค. ์ด๋•Œ ๋ฆฌ๋‘ ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•ด ๊ทธ ๋ณ€๊ฒฝ์ด ์ปค๋ฐ‹๋๋Š”์ง€, ๋กค๋ฐฑ๋๋Š”์ง€, ํŠธ๋žœ์žญ์…˜์˜ ์‹คํ–‰ ์ค‘๊ฐ„ ์ƒํƒœ์˜€๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • innodb_flush_log_at_trx_commit : ๋ฆฌ๋‘ ๋กœ๊ทธ๋ฅผ ์–ด๋Š ์ฃผ๊ธฐ๋กœ ๋””์Šคํฌ์— ๋™๊ธฐํ™”ํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์‹œ์Šคํ…œ ๋ณ€์ˆ˜(0,1,2)

4.2.11.2 ๋ฆฌ๋‘ ๋กœ๊ทธ ํ™œ์„ฑํ™” ๋ฐ ๋น„ํ™œ์„ฑํ™”

MySQL 8.0 ๋ถ€ํ„ฐ๋Š” ์ˆ˜๋™์œผ๋กœ ๋ฆฌ๋‘ ๋กœ๊ทธ๋ฅผ ํ™œ์„ฑํ™” ๋˜๋Š” ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ์ ์žฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ˆ˜๋™์œผ๋กœ ๋ฆฌ๋‘ ๋กœ๊ทธ๋ฅผ ๋น„ํ™œ์„ฑํ™” ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ ์žฌ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

mysql> ALTER INSTANCE DISABLE INNODB REDO_LOG;

mysql> LOAD DATA ...

mysql> ALTER INSTANCE ENABLE INNODB REDO_LOG;

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

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

  • innodb_adaptive_hash_index: ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

B-Tree ๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€ ์ฐพ์•„๊ฐ€๋Š” ๋น„์šฉ์ด ์—†์–ด์ง€๊ณ , ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์€ ๋นจ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

ํ•ด์‹œ ์ธ๋ฑ์Šค๋Š” ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’๊ณผ ํ•ด๋‹น ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ์ฃผ์†Œ์˜ ์Œ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š”๋ฐ, ์ธ๋ฑ์Šค ํ‚ค ๊ฐ’์€ B-Tree ์ธ๋ฑ์Šค์˜ ๊ณ ์œ ๋ฒˆํ˜ธ(ID)์™€ B-Tree ์ธ๋ฑ์Šค์˜ ์‹ค์ œ ํ‚ค ๊ฐ’ ์กฐํ•ฉ์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

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

  • ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ํฌ๊ฒŒ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
    • ๋””์Šคํฌ ์ฝ๊ธฐ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ
    • ํŠน์ • ํŒจํ„ด์˜ ์ฟผ๋ฆฌ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ(์กฐ์ธ์ด๋‚˜ LIKE ํŒจํ„ด ๊ฒ€์ƒ‰)
    • ๋งค์šฐ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ํญ๋„“๊ฒŒ ์ฝ๋Š” ๊ฒฝ์šฐ
  • ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ํฌ๊ฒŒ ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ
    • ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ innoDB ๋ฒ„ํผ ํ’€ ํฌ๊ธฐ์™€ ๋น„์Šทํ•œ ๊ฒฝ์šฐ(๋””์Šคํฌ ์ฝ์ง€๊ฐ€ ๋งŽ์ง€ ์•Š์€ ๊ฒฝ์šฐ)
    • ๋™๋“ฑ ์กฐ๊ฑด ๊ฒ€์ƒ‰(๋™๋“ฑ ๋น„๊ต์™€ IN์—ฐ์‚ฐ์ž)์ด ๋งŽ์€ ๊ฒฝ์šฐ
    • ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ์—๋งŒ ์ง‘์ค‘๋˜๋Š” ๊ฒฝ์šฐ

REFERENCES

https://hoing.io/archives/1114

 

MySQL - Double Write Buffer(์ด์ค‘ ์“ฐ๊ธฐ ๋ฒ„ํผ)

์•ˆ๋…•ํ•˜์„ธ์š” ์ด๋ฒˆ์—๋Š” MySQL ์˜ InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ Double Write Buffer(์ด์ค‘ ์“ฐ๊ธฐ ๋ฒ„ํผ) ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ํ™•์ธ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Real MySQL 8.0 ์ฑ…์„ ์ •๋ฆฌ ํ•˜์˜€์œผ๋ฉฐ MySQL Document ๋ฅผ ์ฐธ์กฐ ํ•˜์˜€์œผ๋ฉฐ ์•„

hoing.io

๋ฐ˜์‘ํ˜•