๋ฒํผ ํ์ ๋์คํฌ์ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ์บ์ํ๋ ์ญํ ๊ณผ ์ฐ๊ธฐ ์์ ์ ์ง์ฐ์์ผ ์ผ๊ด์ฒ๋ฆฌํ๋ ์ญํ ์ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ฟผ๋ฆฌ๋ ๋๋คํ ๋์คํฌ ์์ ์ ๋ฐ์์ํจ๋ค. ํ์ง๋ง ๋ฒํผ ํ์ด ์ด๋ฌํ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ๋๋คํ ๋์คํฌ ์์ ์ ํ์๋ฅผ ์ค์ผ ์ ์๋ค.
๊ทธ ๋ฐ์๋ InnoDB์ ๋ฒํผ ํ์ ๋ง์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๊ธฐ๋ฐ์ด ๋๋ ๊ณต๊ฐ์ด๋ค.
๋ฒํผ ํ์ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์์นํ๋ฉฐ ํฌ๊ฒ ๋์คํฌ์์ ์ฝ์ด์จ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ์บ์ํด๋๋ '๋ฐ์ดํฐ ํ์ด์ง ๋ฒํผ'์ MVCC๋ฅผ ์ํ '์ธ๋ ๋ก๊ทธ', ์ธ๋ฑ์ค ์ ๋ฐ์ดํธ ์ฑ๋ฅ ํฅ์์ ์ํ '์ธ์ํธ(์ฒด์ธ์ง) ๋ฒํผ'๋ก ๊ตฌ์ฑ๋๋ค.
๋ฒํผ ํ ์์ฒด๋ ์ธ๋งํฌ์ด๋ก ๊ด๋ฆฌ๋๋ฉฐ ๊ธฐ์กด 1๊ฐ์ ์ธ์คํด์ค์์, ์ต๊ทผ์๋ ๊ธฐ๋ณธ 8๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ง์ํ๋ค.
โ๏ธ ๋ฒํผ ํ ํ์ด์ง ์ ์ฅ ๋ฉ์ปค๋์ฆ (๋ฐ์ดํฐ ํ์ด์ง ๋ฒํผ)
๋ฒํผ ํ์ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํน์ ์ฌ์ด์ฆ์ ํ์ด์ง๋ก ๊ด๋ฆฌํ๋๋ฐ ๊ฐ ํ์ด์ง๋ ์๋์ ๊ฐ์ ๋ฉ์ปค๋์ฆ์ผ๋ก ๊ด๋ฆฌ๋๋ค.
- LRU ๋ฆฌ์คํธ(Least Recently Used) : New(Most Recently Used) + Old (Least Recently Used)
- ํ๋ฌ์ ๋ฆฌ์คํธ : ๋ํฐ ํ์ด์ง ๋ชฉ๋ก
- ํ๋ฆฌ ๋ฆฌ์คํธ : ๋น์ด์๋ ํ์ด์ง
๐ LRU ๋ฆฌ์คํธ
LRU ๋ฆฌ์คํธ์ ๋ชฉ์ ์ ํ๋ฒ ์ฝ์ด์จ ํ์ด์ง๋ฅผ ์ต๋ํ ์ค๋ซ๋์ ๋ฒํผํ์ ์ ์ฅํด์ ๋์คํฌ ์ ๊ทผ์ ์ต์ํํ๋ ๊ฒ์ด๋ค.
ํด๋ผ์ด์ธํธ ์์ฒญ ์, ์๋์ ๊ฐ์ด ๋์ํ๋ค.
1. ํ์ํ ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ๋ฒํผ ํ(LRU ๋ฆฌ์คํธ)์ ์๋์ง ๊ฒ์ฌํ๋ค.
- ์ด๋ํฐํธ ํด์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ํ๊ฒ ํ์ด์ง๋ฅผ ์กฐํํ๋ค.
- ํด๋น ํ ์ด๋ธ์ B-Tree ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๋ฒํผ ํ์์ ํ๊ฒ ํ์ด์ง๋ฅผ ์กฐํํ๋ค.
2. ํ์ด์ง๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ค๋ฉด ํด๋น ํ์ด์ง๋ฅผ MRU์ ํค๋๋ก ์ฌ๋ฆฐ๋ค.
3. ํ์ด์ง๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋์คํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์์ ๋ฒํผํ์ ์ ์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ํ์ด์ง์ ํฌ์ธํฐ๋ฅผ LRU์ ํค๋์ ์ถ๊ฐํ๊ณ , ํด๋น ํ์ด์ง๋ฅผ ์ค์ ๋ก ์ฝ๋๋ค๋ฉด ๊ทธ ๋ MRU์ ํค๋ ๋ถ๋ถ์ผ๋ก ์ด๋ํ๋ค.
- ์๋ก์ด ํ์ด์ง๋ฅผ ๋ฒํผํ์ ์ถ๊ฐํ๊ธฐ ์ํ ํ์ด์ง ๊ณต๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ, ์ ๊ทผ์ด ๊ฐ์ฅ ์ค๋๋ ํ์ด์ง๋ฅผ ์ ์ ํ์ฌ ๋ฒํผํ์์ ์ ๊ฑฐํ๊ณ , ์๋ก์ด ํ์ด์ง๋ฅผ ๋ฆฌ์คํธ์ ์ค๊ฐ์ง์ ์ ์ฝ์ ํ๋๋ฐ ์ด๋ฅผ midpoint insertion์ด๋ผ๊ณ ํ๋ค. ๋ํ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก MRU์ LRU๋ฅผ ๊ตฌ๋ถํ๋ค.
- ํน์ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์ ๊ทผ ๋์๋ค๋ฉด, ํด๋น ํ์ด์ง์ ์ธ๋ฑ์ค ํค๋ฅผ ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค์ ์ถ๊ฐํ๋ค.
โป LRU ๋ฆฌ์คํธ ํ๋ฌ์
InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ๋ํฐ ํ์ด์ง ํ๋ฌ์๋ฅผ ์ํด ํ๋ฌ์ ๋ฆฌ์คํธ ํ๋ฌ์์ LRU ๋ฆฌ์คํธ ํ๋ฌ์๋ฅผ ์ฌ์ฉํ๋ค. ์ด ์ค LRU ๋ฆฌ์คํธ ํ๋ฌ์ฌ๋ ์ฌ์ฉํ์ง ์ค๋๋ ๋ฐ์ดํฐ ํ์ด์ง๋ค(๋ํฐ ํ์ด์ง)์ ์ ๊ฑฐํด์ Free ๋ฆฌ์คํธ๋ฅผ ํ๋ณดํ๋ ์์ ์ด๋ค.
- LRU ๋ฆฌ์คํธ์ ๋ ๋ถ๋ถ ~ ์ต๋ innodb_lru_scan_depth๋งํผ ํ์ด์ง๋ฅผ ์ค์บ
- ๋ํฐ ํ์ด์ง๋ ๋์คํฌ์ ๋๊ธฐํ, ํด๋ฆฐ ํ์ด์ง๋ ์ฆ์ ํ๋ฆฌ ๋ฆฌ์คํธ๋ก ํ์ด์ง ์ด๋.
๐ ํ๋ฌ์ ๋ฆฌ์คํธ
๋ํฐ ํ์ด์ง์ ํ์ด์ง ๋ชฉ๋ก์ ๊ด๋ฆฌํ๋ค. ๋์คํฌ์์ ์ฝ์ด์จ ํ, LRU ๋ฆฌ์คํธ์ ์๋ ํ์ด์ง ์ค ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๊ฐํด์ง ํ์ด์ง๋ ํ๋ฌ์ ๋ฆฌ์คํธ์ ๊ด๋ฆฌ๋๊ณ ํน์ ์์ ์ด ๋๋ฉด ๋์คํฌ๋ก ๊ธฐ๋ก๋์ด์ผ ํ๋ค.
๋ํฐ ํ์ด์ง๊ฐ ํ๋ฌ์ ๋๋ ์์ ์ ์ฒดํฌ ํฌ์ธํธ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ฑฐ๋, ํน์ ์กฐ๊ฑด์ ๋ง์กฑํด์ ๋ํฐ ํ์ด์ง ์์ฒด๊ฐ ํ๋ฌ์ ๋๋ ๊ฒฝ์ฐ๋ค. ์ด ๋, ๋ํฐ ํ์ด์ง์ ์ ์ฅ๋ ๋ณ๊ฒฝ ๋ ์ฝ๋๊ฐ ์ค์ ๋์คํฌ ๋ฐ์ดํฐ ํ์ผ์ ๋๊ธฐํ ๋๋ค. ์ดํ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฆฌ๋ ๋ก๊ทธ์ ๊ธฐ๋กํ๊ณ , ๋ฒํผ ํ์ ๋ฐ์ดํฐ ํ์ด์ง์๋ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ์ํ๋ค.
์ฒดํฌ ํฌ์ธํธ์ ๋๊ฐ์ง ์ ํ
- Sharp Checkpoint
- ๋ชจ๋ ๋ํฐ ํ์ด์ง๋ฅผ ๋์คํฌ์ ๋๊ธฐํ ํ๋ค.
- ์ด ๋, DB ์๋ฒ์ ๋์์ด ์ผ์ ์ค๋จ๋๋ฉฐ MySQL์ด ์ข ๋ฃ๋ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
- Fuzzy CheckPoint
- ๋ํฐ ํ์ด์ง๋ฅผ ์ผ๋ถ๋ง ๋์คํฌ๋ก ๋๊ธฐํ ํ๋ค.
- ์กฐ๊ธ์ฉ ์ฎ๊ธฐ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ํ๊ณ , DB๋ ์ค๋จ์์ด ๊ณ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- Fuzzy CheckPoint์ ๋ฐ์ ์ํฉ
- Master Thread CheckPoint : ๋ง์คํฐ ์ฐ๋ ๋๋ ์ฃผ๊ธฐ์ ์ผ๋ก Flush List ํ์ธํ์ฌ ์ผ์ ๋น์จ๋งํผ์ Dirty Page๋ฅผ ๋๊ธฐํํ๋ค.
- FLUSH_LRU_LIST CheckPoint : Free Page ๊ฐ์๊ฐ ์ฝ 100๊ฐ ์ดํ๋ก ์ฌ์ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ, LRU List์ Old ์์ญ๋ถํฐ ์ผ์ ์์น๋งํผ Scan ํ ํ ๋ํฐ ํ์ด์ง๊ฐ ์์ผ๋ฉด ์ฒดํฌ ํฌ์ธํธ๋ฅผ ์ํํ๋ค.
- Flush CheckPoint : Redo Log ํ์ผ์ด ๊ฑฐ์ ๊ฐ๋ ์ฐจ์, Redo Log ํ์ผ์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.
- Dirty Page too much Checkpoint : ๋ฒํผ ํ ๊ณต๊ฐ ๋๋น ๋ํฐ ํ์ด์ง ๋น์จ์ด ํน์ ์์น์ ๋๋ฌํ๋ฉด ์ฒดํฌํฌ์ธํธ๋ฅผ ์ํํ๋ค.
Double Write Buffer
Partial-page (Torn-page)
ํ๋์จ์ด์ ์ค์๋์ด๋ ์์คํ ์ ๋น์ ์ ์ข ๋ฃ ๋ฑ์ผ๋ก ํ์ด์ง๊ฐ ์ผ๋ถ๋ง ๊ธฐ๋ก๋๋ ํ์์ ํ์ ํ์ด์ง(Partial-page) ํน์ ํค ํ์ด์ง(Torn-page)๋ผ๊ณ ํ๋ค.
Double Write
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ํด ํ์ ํ์ด์ง์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฃผ๋ก ํ๋ฌ์ ๋ฆฌ์คํธ ํ๋ฌ์์ ์ฌ์ฉ๋๋ค.
- ์ค์ ๋ฐ์ดํฐ ํ์ผ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ธฐ๋กํ๊ธฐ ์ ์, ํ๋ฌ์ํ ๋ํฐ ํ์ด์ง๋ค์ ์ฐ์ ๋ฌถ์ด์ ํ ๋ฒ์ ๋์คํฌ ์ฐ๊ธฐ๋ก ์์คํ ํ ์ด๋ธ ์คํ์ด์ค์ DoubleWrite ๋ฒํผ์ ๊ธฐ๋กํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋ํฐ ํ์ด์ง๋ฅผ ํ์ผ์ ์ ๋นํ ์์น์ ํ๋์ฉ ๋๋ค์ผ๋ก ์ฐ๊ธฐ๋ฅผ ์คํํ๋ค.
- ๋ง์ฝ ๊ธฐ๋ก๋๋ ๋์ค ์ด์์ฒด์ ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ค๋ฉด DoubleWrite ๋ฒํผ๊ฐ ์ฌ์ฉ๋๋ค.
๐ ํ๋ฆฌ ๋ฆฌ์คํธ
InnoDB ๋ฒํผ ํ์์ ์ค์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ก ์ฑ์์ง์ง ์์ ๋น์ด ์๋ ํ์ด์ง๋ค์ ๋ชฉ๋ก์ด๋ฉฐ ์ฌ์ฉ์์ ์ฟผ๋ฆฌ๊ฐ ์๋กญ๊ฒ ๋์คํฌ์ ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ์ฝ์ด์์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
โ๏ธ Undo ๋ก๊ทธ
์ธ๋ ์์ญ์ DML๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ ๋ ๋ณ๊ฒฝ๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ๊ณณ์ด๋ค.
๋จ์ UPDATE์ DELETE ์ฟผ๋ฆฌ๋ ํธ๋์ญ์ ์ ์ปค๋ฐํ์ง ์์๋ ๋ฐ์ดํฐ ํ์ผ(๋ฐ์ดํฐ/์ธ๋ฑ์ค ๋ฒํผ) ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ๋๊ธฐ ์ ์ ๊ฐ์ ๋ฐฑ์ ํ๋ค. ์ด ์ํ์์ ๋ง์ฝ ์ฌ์ฉ์๊ฐ ์ปค๋ฐํ๊ฒ ๋๋ฉด ํ์ฌ ์ํ๊ฐ ๊ทธ๋๋ก ์ ์ง๋๊ณ ,
๋ง์ฝ ๋กค๋ฐฑํ๋ค๋ฉด ์ธ๋ ์์ญ์ ๋ฐฑ์ ๋์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ฐ์ดํฐ ํ์ผ(๋ฐ์ดํฐ/์ธ๋ฑ์ค ๋ฒํผ)๋ก ๋ณต๊ตฌํ๋ค.
Undo์ ๋ฐ์ดํฐ๋ ํธ๋์ญ์ ์ ๋กค๋ฐฑ๊ณผ ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ ์งํ๋ฉด์ ๋์ ๋์์ฑ์ ์ ๊ณตํ๋๋ฐ ์ฌ์ฉ๋๋ค.
โ๏ธ ์ธ์ํธ ๋ฒํผ
RDBMS์์ DML์ด ์ฌ์ฉ๋ ๋๋ ๋ฐ์ดํฐ ํ์ผ์ ๋ณ๊ฒฝํ๋ ์์ ๋ฟ ์๋๋ผ ํด๋น ํ ์ด๋ธ์ ํฌํจ๋ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ์์ ๋ ํ์ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ์์ ์ ๋๋ค ํ๊ฒ ๋์คํฌ๋ฅผ ์ฝ๋ ์์ ์ด ํ์ํ๋ฏ๋ก ํ ์ด๋ธ์ ์ธ๋ฑ์ค๊ฐ ๋ง๋ค๋ฉด ์ด ์์ ์ ์๋นํ ๋ง์ ์์์ ์๋ชจํ๊ฒ ๋๋ค. ๊ทธ๋์ InnoDB๋ ๋ณ๊ฒฝํด์ผํ ์ธ๋ฑ์ค ํ์ด์ง๊ฐ ๋ฒํผ ํ์ ์์ผ๋ฉด ๋ฐ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์ํํ์ง๋ง, ๊ทธ๋ ์ง ์๊ณ ๋์คํฌ๋ก๋ถํฐ ์ฝ์ด์์ ์ ๋ฐ์ดํธํด์ผ ํ๋ค๋ฉด ์ด๋ฅผ ์ฆ์ ์คํํ์ง ์๊ณ ์์๊ณต๊ฐ์ ์ ์ฅํด๋๊ณ ๋ฐ๋ก ์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํํ๋ก ์ฑ๋ฅ์ ํฅ์ ์ํค๊ฒ ๋๋๋ฐ, ์ด๋ ์ฌ์ฉํ๋ ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ธ์ํธ ๋ฒํผ๋ผ๊ณ ํ๋ค.
์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํ๊ธฐ ์ ์ ๋ฐ๋์ ์ค๋ณต ์ฌ๋ถ๋ฅผ ์ฒดํฌํด์ผ ํ๋ ์ ๋ํฌ ์ธ๋ฑ์ค๋ ์ธ์ํธ ๋ฒํผ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ธ์ํธ ๋ฒํผ์ ์์๋ก ์ ์ฅ๋ผ ์๋ ์ธ๋ฑ์ค ๋ ์ฝ๋ ์กฐ๊ฐ์ ์ดํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ ์ํด ๋ณํฉ๋๋๋ฐ, ์ด ์ค๋ ๋๋ฅผ ์ธ์ํธ ๋ฒํผ ๋จธ์ง ์ค๋ ๋ ๋ผ๊ณ ํ๋ค.