DevLog ๐ถ
[Real MySQL 8.0] InnoDB ์คํ ๋ฆฌ์ง ์์ง ์์๋ณด๊ธฐ - 2ํธ (Buffer Pool - in memory structures) ๋ณธ๋ฌธ
[Real MySQL 8.0] InnoDB ์คํ ๋ฆฌ์ง ์์ง ์์๋ณด๊ธฐ - 2ํธ (Buffer Pool - in memory structures)
dolmeng2 2023. 6. 14. 21:48๐ฑ ๋ค์ด๊ฐ๊ธฐ ์
์ด๋ฒ ํฌ์คํ
์์๋ InnoDB์ ์ ๋ฐ์ ์ธ ์ํคํ
์ฒ ์ค์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํด์ ์์๋ณด์.
์๋นํ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ ๋๋ต์ ์ธ ๋ด์ฉ๋ง ์ดํดํ๊ณ ๋์ด๊ฐ๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํ๋ค.
๐ฑ InnoDB ๋ฒํผ ํ (Buffer Pool)
์ ๊ทธ๋ฆผ์ MySQL 8.0 ๊ธฐ์ค InnoDB ๊ตฌ์กฐ๋ฅผ ๋ํ๋ธ ๊ทธ๋ฆผ์ด๋ค.
์ด์ค์์ ๋ฒํผ ํ์ ๊ฒฝ์ฐ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๋ถ๋ถ์ด๋ค.
๋์คํฌ์ ๋ฐ์ดํฐ ํ์ผ, ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์๋ ํด๋ ์ ์๊ณ , ์ฐ๊ธฐ ์์
์ ์ง์ฐ์์ผ์ ์ผ๊ด ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ๋ค.
๐ก ๊ทธ๋ ๋ค๋ฉด ํฌ๊ธฐ๋ ์ด๋ ์ ๋๋ก ์ค์ ํด์ผ ํ ๊น?
๋ณดํต OS ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด 8๊ธฐ๊ฐ ์ดํ๋ผ๋ฉด 50% ์ ๋๋ง ๋ฒํผ ํ๋ก ์ค์ ํ๊ณ , ๋๋จธ์ง๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ ๊ณต๊ฐ์ผ๋ก ๋จ๊ฒจ๋๋ ๊ฒ์ด ์ข๋ค. ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ ํฌ๋ค๋ฉด ์กฐ๊ธ์ฉ ๋๋ ค๊ฐ๋ฉด์ ์ต์ ์ ์ ์ฐพ์๋๊ฐ๋ ๊ฒ์ด ์ข๋ค.
50๊ธฐ๊ฐ ์ด์์ด๋ผ๋ฉด ๋๋ต 15~30๊ธฐ๊ฐ ์ ๋๋ง ์ ์ธํ๊ณ ๋๋จธ์ง๋ ๋ฒํผํ์๊ฒ ์๋ณดํด์ฃผ์.
๊ณต์ ๋ฌธ์์์๋ ์ต๋ 80%๊ฐ ํ ๋น๋๋ค๊ณ ๋ ๋งํ๊ณ ์๋ค.
๋ํ, ์ด๋ฏธ ๋์ด๋์๋ ํ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๊ฑด ์ํฅ์ด ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ผ ํ๋ค.
innoDB ๋ฒํผ ํ์ ์ฌ๋ฌ ๊ฐ๋ก ์ชผ๊ฐ์ด ๊ด๋ฆฌํ ์ ์๊ฒ ๋์๋๋ฐ, ์ชผ๊ฐ์ง ๊ฐ๊ฐ์ '๋ฒํผ ํ ์ธ์คํด์ค'๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก 8๊ฐ๋ก ์ด๊ธฐํ๋์ด ์์ง๋ง, ๋ง์ฝ ๋ฒํผ ํ์ ํฌ๊ธฐ๊ฐ 1๊ธฐ๊ฐ ๋ฏธ๋ง์ด๋ผ๋ฉด 1๊ฐ๋ง ์์ฑ๋๋ค.
๋ณดํต 40๊ธฐ๊ฐ ์ดํ๋ผ๋ฉด 8๊ฐ, ๊ทธ ์ด์์ด๋ผ๋ฉด ์ธ์คํด์ค๋น 5๊ธฐ๊ฐ ์ ๋๋ก ์ก๊ณ ๊ฐ์๋ฅผ ํ ๋นํ๋ ๊ฒ์ด ์ข๋ค.
show variables like '%innodb_buffer%'
๊ถ๊ธํด์ ๋๋ ํ ๋ฒ ์กฐํํด๋ดค๋๋ฐ ๋ค์๊ณผ ๊ฐ์๋ค.
์์ ๊ฐ์ 1024๋ก 2๋ฒ ๋๋ ๊ฐ์ด ๋ฉ๊ฐ๋ฐ์ดํธ์ธ๋ฐ, ๋ฑ 128MB์ด๋ค. (๊ธฐ๋ณธ๊ฐ)
์ฐธ๊ณ ๋ก ์ด ๊ฐ์ ํญ์ innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances๊ณผ ๊ฐ์์ผ ํ๋ค.
ํ์ธํด๋ณด๋ฉด ํ์ฌ ์ธ์คํด์ค๊ฐ 1๊ฐ์ฌ์ chunk_size ๊ฐ์ด ๊ทธ๋๋ก size๋ก ๋ฐฐ์ ๋ฐ์ ๊ฒ์ ๋ณผ ์ ์๋ค.
๐ฑ ๋ฒํผ ํ์ ๊ตฌ์กฐ - Free / Flush / LRU List
๊ธฐ๋ณธ์ ์ผ๋ก innoDB๋ '๋ฒํผ ํ'์ด๋ผ๋ ๊ฑฐ๋ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์ด์ง ํฌ๊ธฐ ์กฐ๊ฐ์ผ๋ก ์ชผ๊ฐ์, ํ์ํ ๋ ํด๋น ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ์ฝ์ด ๊ฐ ์กฐ๊ฐ์ ์ ์ฅํ๋ค. ์ด๋, ํ์ด์ง ํฌ๊ธฐ ์กฐ๊ฐ์ ๊ด๋ฆฌํ๊ธฐ ์ํด LRU / Flush / Free List 3๊ฐ์ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
LRU ๋ฆฌ์คํธ๋ LRU ์ ์ฑ
์ ์ํด์ ๊ต์ฒด๋ ํ์ด์ง๋ค์ ๋ชฉ๋ก์ ๊ด๋ฆฌํ๋๋ฐ, ๋ฐ์์ ์์ธํ๊ฒ ์์๋ณด์.
๐ฌ Flush ๋ฆฌ์คํธ
Flush ๋ฆฌ์คํธ๋ ๋์คํฌ๋ก ๋๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ ํ์ด์ง (dirty page)์ ๋ณ๊ฒฝ ์์ ๊ธฐ์ค์ ํ์ด์ง ๋ชฉ๋ก์ ๊ด๋ฆฌํ๋ค. ๋ง์ฝ, ๋์คํฌ์์ ์ฝ์ ์ํ์์ ๋ณํ๊ฐ ์๋ค๋ฉด Flush ๋ฆฌ์คํธ์์ ๊ด๋ฆฌ๋์ง ์์ง๋ง ํน์ ์์ ์ด ์ง๋๊ฒ ๋๋ฉด ๋์คํฌ๋ก ๊ธฐ๋ก์ด ๋์ด์ผ ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด InnoDB๋ Redo ๋ก๊ทธ์ ๊ธฐ๋กํ๋ฉด์, ๋ฒํผ ํ์ ๋ฐ์ดํฐ ํ์ด์ง์๋ ํด๋น ๋ด์ฉ์ ๋ฐ์ํ๋ค. ํ์ง๋ง, ํญ์ Redo ๋ก๊ทธ๊ฐ ๊ธฐ๋ก๋์๋ค๊ณ ๋ฐ์ดํฐ ํ์ด์ง์๋ ๋ฐ์๋์์์ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ '์ฒดํฌ ํฌ์ธํธ'๋ฅผ ๋ฐ์์์ผ ๋ ์ํ๋ฅผ ๋๊ธฐํํ๋ค. ์ด๋ ๋๊ธฐํ๋ฅผ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ Flush ๋ฆฌ์คํธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๐ฌ Free ๋ฆฌ์คํธ
Free ๋ฆฌ์คํธ๋ ๋ฒํผ ํ์์ ์ค์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ก ์ฑ์์ง์ง ์์ ๋น์ด ์๋ ํ์ด์ง๋ค์ ๋ชฉ๋ก์ผ๋ก, ์ฌ์ฉ์ ์ฟผ๋ฆฌ๊ฐ ์๋กญ๊ฒ ๋์คํฌ์ ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ์ฝ์ด์์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
๐ฌ LRU ๋ฆฌ์คํธ
๊ฐ์ฅ ์ค์ํ LRU ๋ฆฌ์คํธ์ ๋ํด์ ์์ธํ ์์๋ณด์.
LRU ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ LRU + MRU ๋ฆฌ์คํธ๊ฐ ๊ฒฐํฉ๋ ํํ๋ก, ์ ๊ทธ๋ฆผ์์ Old ์๋ธ ๋ฆฌ์คํธ ์์ญ์ LRU, New ์๋ธ ๋ฆฌ์คํธ ์์ญ์ MRU๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์์ฃผ ์ ๊ทผ๋๋ ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ New ์๋ธ๋ฆฌ์คํธ์ ์ ์ฌํ๊ณ , ์์ฃผ ์ ๊ทผ๋์ง ์๋ ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ Old ์๋ธ๋ฆฌ์คํธ์ ์ ์ฅํ๋ ๊ฒ์ด๋ค. ์ด๋ ํ ๋ฒ ๋์คํฌ๋ก๋ถํฐ ์ฝ์ด์จ ํ์ด์ง๋ ์ต๋ํ ์ค๋ซ๋์ ๋ฒํผ ํ์ด ๊ด๋ฆฌํ๋๋ก ํด์ ๋์คํฌ๋ก๋ถํฐ ๋ค์ ์ฝ์ด์ค๋ ์์ ์ ์ต์ํํ๊ธฐ ์ํด์์ด๋ค.
๐ก LRU (Least Recently Used)
๊ฐ์ฅ ์ค๋ ์๊ฐ ๋์ ์ฐธ์กฐ๋์ง ์์ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ ์ ์ฑ
๐ก MRU (Most Recently Used)
๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋ ํ์ด์ง๋ฅผ ๊ต์ฒดํ๋ ์ ์ฑ
์ฌ๊ธฐ์ New ์๋ธ ๋ฆฌ์คํธ์ Tail๊ณผ Old ์๋ธ ๋ฆฌ์คํธ์ head๊ฐ ๋ง๋๋ ์ง์ ์ด ๋ฒํผ ํ ์ ์ฒด์ 'MidPoint'๋ผ๊ณ ํ ์ ์์ผ๋ฉฐ, InnoDB๊ฐ ์๋ก์ด ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ๋ฒํผ ํ๋ก ์ฝ์ด์ฌ ๋ midPoint์ ์ฝ์
ํ๊ฒ ๋๋ค. (Old ์๋ธ๋ฆฌ์คํธ์ Head์ ์ฝ์
)
๋ง์ฝ Old ์๋ธ๋ฆฌ์คํธ์ ์กด์ฌํ๋ ํ์ด์ง๋ฅผ ์ ๊ทผํ๋ฉด ํด๋น ๋ฐ์ดํฐ ํ์ด์ง๋ 'Young'์ด๋ผ๊ณ ํ๋จ๋๋ฉฐ, New ์๋ธ๋ฆฌ์คํธ์ head๋ก ์ด๋ํ๋ค. ์ด๋, ์ฌ์ฉ์๊ฐ ์์ฑํ ์ฟผ๋ฆฌ๋ ์ค์ ๋ก ํ์ํด์ ์ ๊ทผํ ํ์ด์ง๋ ๋ฐ๋ก young์ด ๋์ง๋ง, read-ahead์ ์ํด์ ์๋์ผ๋ก ์ฝ์ด์ค๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ young์ผ๋ก ํ๋จ๋์ง ์๋๋ค.
๐ก Read-Ahead
์ฌ์ฉ๋ ๊ฒ ๊ฐ์ ๋ฐ์ดํฐ ํ์ด์ง์ ๋ํด ๋ฒํผ ํ๋ก ๋๊ธฐํํ๋ I/O request๋ฅผ ์๋ฏธํ๋ค. ์ด๋, ๋น๋๊ธฐ๋ก ๋์ํ๋ค.
ํ๋์ extent (64๊ฐ์ ํ์ด์ง ๊ทธ๋ฃน) ์ ์ฒด๋ฅผ ๋ฒํผ ํ์ prefetch ํ๊ฒ ๋๋๋ฐ, 2๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
- linear read-ahead / random read-ahead.
- ๋ฒํผ ํ ๋ด์์ ์์ฐจ์ ์ผ๋ก ์ฝํ์ง ํ์ด์ง์ ๊ฐ์๋ก ํ๋จํ๊ฑฐ๋, ๋ฒํผํ ๋ด์ ์กด์ฌํ๋ ํ์ด์ง์ ๊ฐ์๋ก ํ๋จํ๊ฑฐ๋.
์ด๋ฌํ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด์, ๋ฒํผํ์ ์๋ ๋ฐ์ดํฐ ์ค์์ ์์ฃผ ์ ๊ทผ๋์ง ์์ผ๋ฉด young์ด ๋๋ ํ์ด์ง๊ฐ ์์ผ๋ก ์ด๋ํ๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ tail๋ก ์ด๋ํ๊ฒ ๋๋ค. ๋ํ, Old ์๋ธ๋ฆฌ์คํธ์ ์๋ ํ์ด์ง๋ค์ ์๋ก์ด ํ์ด์ง๋ค์ด ๊ณ์ midPoint์ ์ฝ์
๋๋ค ๋ณด๋๊น ๊ฒฐ๊ตญ tail ์ชฝ์ผ๋ก ๊ฐ๊น์์ง๊ฒ ๋๊ณ , ๊ณ์ ์ ๊ทผ๋์ง ์์ผ๋ฉด ๊ฒฐ๊ตญ ์ญ์ ๋๋ ๊ฒ์ด๋ค.
๐ฌ InnoDB์์ ๋ฐ์ดํฐ ์ฐพ๋ ๊ณผ์
1. ํ์ํ ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ํ์ด์ง๊ฐ ๋ฒํผ ํ์ ์กด์ฌํ๋์ง ๊ฒ์ฌํ๋ค.
- ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค / ํ
์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ๋ฒํผ ํ์์ ํ์ด์ง๋ฅผ ๊ฒ์ํ๋ค.
- ๋ฒํผ ํ์ ์ด๋ฏธ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ์กด์ฌํ๋ค๋ฉด ํด๋น ํ์ด์ง์ ํฌ์ธํฐ๋ฅผ New ์๋ธ๋ฆฌ์คํธ ์ชฝ์ผ๋ก ์น๊ธ์ํจ๋ค.
๐ก ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค (Adaptive Hash Index)
์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ ํด์๋ก ์ ์ํ์ฌ B-Tree๋ฅผ ํ์ง ์๊ณ ๋ฐ๋ก ๋ฐ์ดํฐ๋ก ์ ๊ทผํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค.
์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ Innodb_buffer_pool_size์ 1/64 ์ ๋์ ํฌ๊ธฐ๋ก ์ด๊ธฐํ๋๋ค.
2. ๋์คํฌ์์ ํ์ํ ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ๋ฒํผ ํ์ ์ ์ฌํ๊ณ , ์ ์ฌ๋ ํ์ด์ง์ ๋ํ ํฌ์ธํฐ๋ฅผ Old ์๋ธ๋ฆฌ์คํธ์ ํค๋ ๋ถ๋ถ์ ์ถ๊ฐํ๋ค. (midPoint ์ฝ์
)
3. Old ์๋ธ๋ฆฌ์คํธ ํค๋ ๋ถ๋ถ์ ์ ์ฌ๋ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ์ค์ ๋ก ์ฝํ๋ฉด New ์๋ธ๋ฆฌ์คํธ ํค๋ ๋ถ๋ถ์ผ๋ก ์ด๋ํ๋ค.
- ์ด๋, ๋๋์ ์ฝ๊ธฐ ์์
์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ๋ฒํผ ํ์ ์ ์ฌ๋ ๋์ง๋ง, ์ค์ ์ฟผ๋ฆฌ์์ผ๋ก๋ ์ฌ์ฉ๋์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ New ์๋ธ ๋ฆฌ์คํธ์ ํค๋ ๋ถ๋ถ์ผ๋ก ์ด๋ํ์ง๋ ์๋๋ค.
4. ๋ฒํผ ํ์ ์์ฃผํ๋ ๋ฐ์ดํฐ ํ์ด์ง๋ ์ฌ์ฉ์๊ฐ ์ต๊ทผ์ ์ผ๋ง๋ ์ ๊ทผํ๋์ง์ ๋ฐ๋ผ์ Age๋ฅผ ๋ถ์ฌ๋ฐ์ผ๋ฉฐ, ์ฟผ๋ฆฌ์์ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์๋๋ค๋ฉด Age๊ฐ ์ค๋๋๊ธฐ ๋๋ฌธ์ (Aging) ๋ฒํผ ํ์์ ์ ๊ฑฐ๋๋ค. (Eviction)
- ๋ง์ฝ, ๋ฒํผ ํ์ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ์ฟผ๋ฆฌ์ ์ํด์ ์ฌ์ฉ๋๋ฉด ๋์ด๊ฐ ๋ค์ ์ด๊ธฐํ๋๊ธฐ ๋๋ฌธ์ New ์๋ธ๋ฆฌ์คํธ์ ํค๋ ๋ถ๋ถ์ผ๋ก ์ฎ๊ฒจ์ง๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ต๊ทผ์ ์ผ๋ง๋ ์ ๊ทผํ๋์ง์ ๋ฐ๋ผ์ Old / New ์๋ธ๋ฆฌ์คํธ๋ก ์ด๋ํ๋ ๊ฒ์ด๋ฉฐ, Old ์๋ธ๋ฆฌ์คํธ ๋์ผ๋ก ๋ฐ๋ ค๋ ๋ฐ์ดํฐ๋ ๋ฒํผ ํ์์ ์ ๊ฑฐํด์ ์๋ก์ด ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ์ ์ฌํ ์ ์๋ ๋น ๊ณต๊ฐ์ ์ค๋นํ๊ฒ ๋๋ค.
5. ํ์ํ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์ ๊ทผ๋๋ ๋ฐ์ดํฐ๋ผ๋ฉด, ํด๋น ํ์ด์ง์ ์ธ๋ฑ์ค ํค๋ฅผ ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค์ ์ถ๊ฐํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฒ์์ ํ ๋ฒ ์ฝํ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ์์ฃผ ์ฌ์ฉ๋๋ฉด New ์๋ธ๋ฆฌ์คํธ์์ ๊ณ์ ์ด์๋จ๊ฒ ๋๊ณ , ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค๋ฉด ๊ณ์ ๋ฐ๋ ค์ Old ์๋ธ๋ฆฌ์คํธ ๋์ผ๋ก ๋ฐ๋ ค๋๋ค๊ฐ ๋ฒํผ ํ์์ ์ ๊ฑฐ๋๋ค.
๐ฑ Adaptive Hash Index (์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค)
์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค๋ ์ฌ์ฉ์๊ฐ ์์ฃผ ์์ฒญํ๋ ๋ฐ์ดํฐ์ ๋ํด์ ์๋์ผ๋ก ์์ฑํ๋ ์ธ๋ฑ์ค์ด๋ค.
์์ฃผ ์ฝํ๋ ๋ฐ์ดํฐ ํ์ด์ง์ ํค ๊ฐ์ ์ด์ฉํด ํด์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด์, ํด๋น ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ๋ฐ๋ก ์ฐพ์๊ฐ๋ ๊ฒ์ด๋ค.
ํด์ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํค ๊ฐ๊ณผ ์ธ๋ฑ์ค ํค ๊ฐ์ด ์ ์ฅ๋ ๋ฐ์ดํฐ ํ์ด์ง ์ฃผ์์ ์์ผ๋ก ๊ด๋ฆฌ๋๋ฉฐ, ์ธ๋ฑ์ค ํค ๊ฐ์ B-Tree ์ธ๋ฑ์ค์ ๊ณ ์ ๋ฒํธ์ ์ค์ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋ชจ๋ B-Tree ์ธ๋ฑ์ค์ ๋ํ ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค๋ ํ๋์ ํด์ ์ธ๋ฑ์ค์ ์ ์ฅ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ B-Tree์ ๊ณ ์ ๋ฒํธ๋ฅผ ํตํด ๊ฒน์น์ง ์๋๋ก ๋ง๋ ๊ฒ์ด๋ค.
๋ฒํผ ํ์ ๋ก๋ฉ๋ ํ์ด์ง ์ฃผ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฒํผ ํ์ ์ฌ๋ผ๊ฐ ๋ฐ์ดํฐ์ ๋ํด์๋ง ๊ด๋ฆฌ๋๋ค.
๊ทธ๋์, ๋ฒํผ ํ์์ ์ญ์ ๋๋ฉด ์ธ๋ฑ์ค ์ ๋ณด ์ญ์ ํจ๊ป ์ ๊ฑฐ๋๋ค.
= ์ฆ, ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค๋ ๋ฒํผํ์ ์ฌ๋ผ๊ฐ ๋ฐ์ดํฐ์ ๋ํด ๋ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๋ง๋ ๊ฒ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค๋ ๋์์ด ๋๋ค.
- ๋์คํฌ์ ๋ฐ์ดํฐ๊ฐ innoDB ๋ฒํผ ํ์ ํฌ๊ธฐ์ ๋น์ทํ ๊ฒฝ์ฐ (์ฝ๊ธฐ ์์ ์ด ๋ง์ง ์์)
- ๋๋ฑ ๋น๊ต์ IN ์ฐ์ฐ์ ํตํ ๋น๊ต ์์ ์ด ๋ง์ ๊ฒฝ์ฐ
- ์ฟผ๋ฆฌ๊ฐ ์ผ๋ถ ๋ฐ์ดํฐ๋ง ์ง์ค๋๋ ๊ฒฝ์ฐ
ํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ ํฌ๊ฒ ์๋ฏธ์์ง ์๊ธฐ ๋๋ฌธ์ ์ ๊ณ ๋ คํด์ ์ฌ์ฉํ์.
- ๋์คํฌ ์ฝ๊ธฐ ์์ ์ด ๋ง์ ๊ฒฝ์ฐ
- ํน์ ํจํด์ ์ฟผ๋ฆฌ๊ฐ ๋ง์ ๊ฒฝ์ฐ (JOIN, LIKE ๊ฒ์)
- ๋งค์ฐ ํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ํญ๋๊ฒ ์ฝ๋ ๊ฒฝ์ฐ
โญ๏ธ ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค๋ ํ
์ด๋ธ์ ์ญ์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋ ํด๋น ํ
์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ด์ง ๋ด์ฉ์ ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค์์ ์ ๊ฑฐํด์ผ ํ๋ค ๋ณด๋ ์ด๋ด ๋๋ CPU cost๊ฐ ํฌ๋ค. ์ ๊ณ ๋ คํด์ ์ฌ์ฉํ์.
show engine innodb status;
์ ์ฌ์ง์ innodb status๋ฅผ ํ์ธํ์ ๋์ ๊ฒฐ๊ณผ์ด๋ค. ํ์ฌ๋ ๋ณ๋์ ์์
์ ํ๋ ๊ฒ ์์ด์ 0์ผ๋ก ๋์ค์ง๋ง, ์ฌ๊ธฐ์ hash searches๋ ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๊ฒฐ๊ณผ๋ฅผ, non-hash searches๋ ์ฌ์ฉํ์ง ์์ ๊ฒฐ๊ณผ์ด๋ค.
(hash searches) / (hash searches + non-hash searches) * 100์ ํ์ ๋ 100%์ ๊ฐ๊น๋ค๋ฉด ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ , ๋ฎ๋ค๋ฉด ๋นํ์ฑํํ๋ ๊ฒ๋ ๊ณ ๋ คํด๋ณด๋ ๊ฒ์ด ์ข๋ค. ๋นํ์ฑํ๋ฅผ ํ๊ฒ ๋๋ฉด ๋ฒํผ ํ์ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ค.
# ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
SELECT EVENT_NAME, CURRENT_NUMBER_OF_BYTES_USED
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME='memory/innodb/adaptive hash index'
๐ฑ Change Buffer (์ฒด์ธ์ง ๋ฒํผ)
์ฒด์ธ์ง ๋ฒํผ๋ ํน์ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ๋ฒํผ ํ์ ์์ ๋ secondary-index ํ์ด์ง์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์บ์ํ๋ ํน์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค.
Secondary-index์ ๊ฒฝ์ฐ ์ ๋ํฌํ์ง ์๊ณ , ์์์ ์์๋ก ์ฝ์
๋๋ค. insert, update ์์
์ ๋ฐ์ดํฐ ํ์ผ๋ฟ๋ง ์๋๋ผ ์ธ๋ฑ์ค๋ ํจ๊ป ์
๋ฐ์ดํธํ๋ฉด์ ๋๋คํ๊ฒ ๋์คํฌ๋ฅผ ์ฝ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ฒ ๋๋ค. ์ด๋ฅผ ์ํด ๋ณ๊ฒฝํด์ผ ํ๋ ์ธ๋ฑ์ค ํ์ด์ง๊ฐ ๋ฒํผ ํ์ ์์ผ๋ฉด ๋ฐ๋ก ์
๋ฐ์ดํธ๋ฅผ ์ํํ์ง๋ง, ๋์คํฌ๋ก๋ถํฐ ์ฝ์ด์์ ์
๋ฐ์ดํธํด์ผ ํ๋ค๋ฉด ์ฆ์ ์คํํ์ง ์๊ณ ์ฒด์ธ์ง ๋ฒํผ์ ์ ์ฅํ๋ค๊ฐ ์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ๋ฐํํ๋๋ก ์ต์ ํ๊ฐ ๋์ด ์๋ค.
โญ๏ธ ๋จ, ์ ๋ํฌ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ์ค๋ณต ์ฒดํฌ๋ฅผ ํด์ผ ํ๋ฏ๋ก ์ฒด์ธ์ง ๋ฒํผ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฒด์ธ์ง ๋ฒํผ์ ์ ์ฅ๋ ์ธ๋ฑ์ค ๋ ์ฝ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋ ์ค '์ฒด์ธ์ง ๋ฒํผ ๋จธ์ง ์ค๋ ๋ (Merge Thread)'์ ์ํด์ ๋ณํฉ๋๋ค.
innodb_change_buffering์ด๋ผ๋ ๋ณ์๋ฅผ ํตํด์ ์ด๋ค ์์
์ธ์ง์ ๋ฐ๋ผ ์ฒด์ธ์ง ๋ฒํผ๋ฅผ ํ์ฑํํ ์ ์๋ค.
- all: ๋ชจ๋ ์ธ๋ฑ์ค ๊ด๋ จ ์์ (inserts, deletes, purges) ๋ฒํผ๋ง
- none: ๋ฒํผ๋ง X
- inserts: ์๋ก์ด ์์ดํ ์ ์ถ๊ฐํ๋ ์์ ๋ง ๋ฒํผ๋ง
- deletes: ๊ธฐ์กด ์์ดํ ์ ์ญ์ ํ๋ ์์ ๋ง ๋ฒํผ๋ง (์๊ตฌ ์ญ์ ๊ฐ ์๋, ์ญ์ ๋๋ค๊ณ ๋งํน๋ง ํจ)
- changes: inserts + deletes๋ง ๋ฒํผ๋ง
- purges: purges - ์๊ตฌ ์ญ์ ์์ ๋ง ๋ฒํผ๋ง
์ฒด์ธ์ง ๋ฒํผ์ ๊ฒฝ์ฐ ๋ฒํผ ํ์ 25%~50%๊น์ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ๋ ์ฌ์ฉ ์ค์ธ์ง๋ ์๋์ ๊ฐ์ด ํ์ธํ ์ ์๋ค.
select EVENT_NAME, CURRENT_NUMBER_OF_BYTES_USED
from performance_schema.memory_summary_global_by_event_name
where EVENT_NAME='memory/innodb/ibuf0ibuf';
๐ฑ Log Buffer (๋ก๊ทธ ๋ฒํผ)
๋ก๊ทธ ๋ฒํผ๋ ๋์คํฌ์ ๋ก๊ทธ ํ์ผ์ ๊ธฐ๋กํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ๋ฐ์ดํฐ ์์ญ์ด๋ค.
๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋จผ์ ๋ก๊ทธ๋ก ๊ธฐ๋กํ๋๋ฐ, ์ด๋ ๋์คํฌ์ ๋ฐ๋ก ๊ธฐ๋กํ๋ ๊ฒ์ด ์๋นํ ๋น์ฉ์ด ๋ค๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ, ๋ฆฌ๋ ๋ก๊ทธ์ ์์ฑํ๋ฉด ๋น์ ์ ์ข
๋ฃ ์ ๋ณต๊ตฌ๋ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๋นํ ์ค์ํ๋ค.
ํํ ๋น์ ์ ์ข
๋ฃ๋ ์ดํ, ์ผ๊ด๋์ง ์์ ๋ฐ์ดํฐ๋ 2์ข
๋ฅ๋ก ๋๋๋ค.
- ์ปค๋ฐ์ ๋์ง๋ง ๋ฐ์ดํฐ ํ์ผ์ ๊ธฐ๋ก๋์ง ์์
- ๋กค๋ฐฑ์ ๋์ง๋ง ๋ฐ์ดํฐ ํ์ผ์ ์ด๋ฏธ ๊ธฐ๋ก์ด ๋์ด๋ฒ๋ฆผ
1๋ฒ์ ๊ฒฝ์ฐ ๋ฆฌ๋ ๋ก๊ทธ์ ์ ์ฅ๋ ๊ฑธ ๊ธฐ๋กํ๋ฉด ๋๊ณ , 2๋ฒ์ ๊ฒฝ์ฐ ๋ณ๊ฒจ์ค๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ธฐ๋กํด์ผ ํ๋ค.
๋น์ฐํ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ํด์๋ผ๋ฉด ํธ๋์ญ์
์ด ์ปค๋ฐ๋ ๋๋ง๋ค ๋ฆฌ๋ ๋ก๊ทธ๋ฅผ ์ฆ์ ๋์คํฌ์ ๊ธฐ๋กํ๋ ๊ฒ ์ข์ง๋ง, ๋น์ฉ์ด ํฐ ๋์คํฌ ์์
์ ๋ถํ๊ฐ ์ผ์ด๋ ํฌ์ธํธ์ด๋ค. ์ด๋ฅผ ์ํด innodb_flush_log_at_trx_commit ์์คํ
๋ณ์๋ฅผ ํตํด์ ์ด๋ ์ ๋ ์ฃผ๊ธฐ๋ก ๋๊ธฐํํ ์ง ์ค์ ํ ์ ์๋ค.
0: 1์ด์ ํ ๋ฒ์ฉ ๋ฆฌ๋ ๋ก๊ทธ๋ฅผ ๋์คํฌ๋ก ๊ธฐ๋ก ํ ๋๊ธฐํ
1: ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ๋๋ง๋ค ๋์คํฌ๋ก ๊ธฐ๋ก ํ ๋๊ธฐํ (๊ธฐ๋ณธ๊ฐ)
2: ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ๋๋ง๋ค ๋์คํธ ๊ธฐ๋ก์ ๋์ง๋ง, ๋๊ธฐํ๋ 1์ด์ ํ ๋ฒ์ฉ
Log Buffer์ ๊ฒฝ์ฐ ๋์คํฌ ์์ญ์ ์๋ Redo Log์ ๋ฐ์ ํ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์์ธํ ๊ฑด ๋ค์ ํฌ์คํ
์์ ์์๋ณด์.
๐ฑ ๋ฒํผ ํ ํ๋ฌ์
dirty page๋ฅผ ๋์คํฌ์ ๋๊ธฐํํ๋ ๊ฒ์ ๋ํฐ ํ์ด์ง ํ๋ฌ์๋ผ๊ณ ํ๋ค.
InnoDB์์๋ ํ๋ฌ์ ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํ์ฌ 2๊ฐ์ง์ ๋ฐฉ๋ฒ์ ์ ์ํ๊ณ ์๋๋ฐ, 'ํ๋ฌ์ ๋ฆฌ์คํธ ํ๋ฌ์(Flush-List Flush)'์ 'LRU ๋ฆฌ์คํธ ํ๋ฌ์ (LRU-List Flush)๊ฐ ์๋ค.
๐ฌ ํ๋ฌ์ ๋ฆฌ์คํธ ํ๋ฌ์
InnoDB๋ ๋ฆฌ๋ ๊ณต๊ฐ์ ์ฌํ์ฉ์ ์ํด์, ์ฃผ๊ธฐ์ ์ผ๋ก ์ค๋๋ ๋ฆฌ๋ ๋ก๊ทธ ์ํธ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๊ณต๊ฐ์ ๋น์ด๋ค. ์ด๋, ๋์คํฌ๋ก ๋๊ธฐํ๋๋ ์์
์ด ๊ผญ ์ ํ๋์ด์ผ ํ๋๋ฐ Flush_List ํจ์๋ฅผ ํธ์ถํด์ ์ค๋์ ์ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ ํ์ด์ง ์์๋๋ก ๋์คํฌ์ ๋๊ธฐํํ๋ ์์
์ ์ํํ๋ค. ํด๋น ์์
์ 'ํด๋ฆฌ๋ ์ค๋ ๋ (Cleaner Thread)'๋ฅผ ํตํด์ ์ด๋ฃจ์ด์ง๋ค.
์ด๋ฅผ ์ํด ๋ค์ํ ์์คํ
๋ณ์๋ค์ ์ ๊ณตํ๋๋ฐ, ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- innodb_page_cleaners
: ํด๋ฆฌ๋ ์ค๋ ๋์ ๊ฐ์๋ฅผ ์กฐ์ ํ๋ค. ๋ฒํผ ํ์ ๊ฐ์๋ณด๋ค ๋ง์ผ๋ฉด innodb_buffer_pool_instances ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
๋ ์ ๋ค๋ฉด ํ๋์ ํด๋ฆฌ๋ ์ค๋ ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋ฒํผ ํ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. (์ฌ๋งํ๋ฉด ๋์ผํ๊ฒ ํ์.) ๊ธฐ๋ณธ๊ฐ์ 4์ด๋ค.
- innodb_max_dirty_pages_pct
: ๋ฒํผ ํ์ด ๋ํฐ ํ์ด์ง๋ฅผ ๋ช ํผ์ผํธ๋ ๊ฐ์ง๊ณ ์์์ง ๋น์จ ์ค์ (ํด์๋ก ์ฌ๋ฌ ๋ฒ์ ๋์คํฌ ์ฐ๊ธฐ๋ฅผ ํ ๋ฒ์ผ๋ก ์ต์ ํ ๊ฐ๋ฅ)
์ต๋ 90%๊น์ง ๊ฐ์ง๊ณ ์์ ์ ์๋ค.
- innodb_max_dirty_pages_pct_lwm
: ๋์คํฌ๋ก ์์ฑ๋๋ ํ์ด์ง๋ณด๋ค ๋ฒํผ ํ์ ๋ ๋ง์ ๋ํฐ ํ์ด์ง๊ฐ ์กด์ฌํ๊ฒ ๋๋ฉด, ๋ํฐ ํ์ด์ง๋ฅผ ๋ชจ๋ ๋์คํฌ ํ์ด์ง์ ์์ฑํ๊ธฐ ์ํด์ ๋์คํฌ ์ฐ๊ธฐ ์์ ์ด ํญ๋ฐํ ์ ์๋ค. (์ฆ, pages_pct๋ก ์ ์ํ ์๊ณ๊ฐ๊น์ง ๋๋ฌํ์ง ์๋๋ก ๋ง๋๋ ๋ณ์) ์ด๋ฅผ ๋ง๊ธฐ ์ํด ์ผ์ ์ ์ด์์ ๋ํฐ ํ์ด์ง๊ฐ ์๊ธฐ๋ฉด ์กฐ๊ธ์ฉ ๋์คํฌ๋ก ๊ธฐ๋กํ๋ '์ฌ์ ํ๋ฌ์' ๋น์จ์ ์กฐ์ ํ๋ค. ๊ธฐ๋ณธ ๊ฐ์ 10%์ด๋ค.
- innodb_io_capacity
: ์ผ๋ฐ์ ์ธ ์ํฉ์์ ์ด๋ ์ ๋์ ๋์คํฌ ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ์ง ์ค์ . ์ฌ๊ธฐ์ ๋งํ๋ ๋์คํฌ ์์ ์ '๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋'๊ฐ ์ํํ๋ ์์ ์ด๋ฉฐ, ๋๋ถ๋ถ ๋ํฐ ํ์ด์ง์ ์ฐ๊ธฐ ์์ ์ด ํด๋นํ๋ค.
- innodb_io_capacity_max
: ์ต๋์ ์ฑ๋ฅ์ ๋ฐํํ ๋ ์ด๋ ์ ๋์ ๋์คํฌ ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ์ง ์ค์ .
- innodb_flush_neighbors
: ๋์คํฌ ๊ธฐ๋ก ์ ๋์คํฌ์์ ๊ทผ์ ํ ํ์ด์ง์ ๋ํฐ ํ์ด์ง๊ฐ ์๋ค๋ฉด ํจ๊ป ๋ฌถ์ด์ ๊ธฐ๋กํ๋ ๊ธฐ๋ฅ์ ํ์ฑํํ ์ง ์ค์ .
-์ด๋ฉด ๋นํ์ฑํ (SSD ๊ถ์ฅ), 1์ด๋ฉด ํ์ฑํ (HDD ๊ถ์ฅ), 2๋ฉด ์ฐ์๋ ๋ํฐ ํ์ด์ง๋ฅผ ํ๋ฌ์ํ๋ ๊ฒ ์๋, ๊ทธ๋ฅ ํ๋๋ง ํ๋ฌ์.
- innodb_lru_scan_depth
๋ฒํผ ํ ์ธ์คํด์ค๋ง๋ค ํด๋ฆฌ๋ ์ค๋ ๋๊ฐ ๋ํฐ ํ์ด์ง ํ๋ฌ์๋ฅผ ์ํด ๋ฒํผ ํ LRU ๋ฆฌ์คํธ๋ฅผ ์ผ๋ง๋ ๊น๊ฒ ์ค์บํ ์ง ์ค์ .
innodb_lru_scan_depth * innodb_buffer_pool_instances๊ฐ ํด๋ฆฌ๋ ์ค๋ ๋๊ฐ 1์ด์ ์ํํ๋ ์์ ๋์ ์ ์ํ๋ค.
- innodb_adaptive_flushing
: ์ด๋ํฐ๋ธ ํ๋ฌ์ ํ์ฑํ ์ฌ๋ถ ์ค์ . ํ์ฑํ ์ capacity, capacity_max ๊ฐ์ ์์คํ ๋ณ์ ๊ฐ์ ์์กดํ์ง ์๊ณ , ๋ณ๋์ ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ ์ ํ ์์ ๋ํฐ ํ์ด์ง๊ฐ ๋ฒํผ ํ์ ์ ์ง๋๋๋ก ๋์คํฌ ์ฐ๊ธฐ ์์ ์ ์ํํ๋ค.
๋ฒํผ ํ์ ๋ํฐ ํ์ด์ง ์์ ๋ฆฌ๋ ๋ก๊ทธ ๋ ์ฝ๋์ ์์ฑ ์๋๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ ์ ๋์ ๋ํฐ ํ์ด์ง๋ฅผ ํ๋ฌ์ํ ์ง ์์์ ๊ฒฐ์ ํ๋ค.
- innodb_adaptive_flushing_lwm
: ํ์ฑ ๋ฆฌ๋ ๊ณต๊ฐ์ด n% ๋ฏธ๋ง์ผ ๋ ์ด๋ํฐ๋ธ ํ๋ฌ์๋ฅผ ํ์ฑํ ํ ์ง ์ ์ฉํ๋ ๊ฐ. ์ด ์๊ณ๊ฐ์ ๋๊ฒ ๋๋ฉด innodb_adaptive_flushing์ด ๋นํ์ฑํ๋์ด ์๋๋ผ๋ ์์์ ์ด๋ํฐ๋ธ ํ๋ฌ์๋ฅผ ์ ์ฉํ์ฌ ํ์ฑํํ๋ค.
๐ฌ LRU ๋ฆฌ์คํธ ํ๋ฌ์
LRU ๋ฆฌ์คํธ์์ ์ฌ์ฉ ๋น๋๊ฐ ๋ฎ์ผ๋ฉด Old ์๋ธ๋ฆฌ์คํธ์์ ๋ฐ๋ ค๋๋ค๊ฐ ํ๋ฌ์๋๋ ๊ฒ ๊ธฐ์ต๋ ๊ฒ์ด๋ค. ์ด๋ ์ฌ์ฉํ๋ ๊ฒ LRU ๋ฆฌ์คํธ ํ๋ฌ์์ด๋ฉฐ, innodb_lru_scan_depth ๋ณ์์ ์ค์ ๋ ๊ฐ์๋งํผ ํ์ด์ง๋ฅผ ์ค์บํ๋ฉฐ ๋ํฐ ํ์ด์ง๋ฅผ ๋์คํฌ์ ๋๊ธฐํํ๋ค.
ํ๋ฌ์๋ ๋ํฐ ํ์ด์ง๋ค์ ํ๋ ์์ ๋น์ด ๋ค์, free ํ์ด์ง๋ก ๋ง๋ค์ด์ Free List์ ์ฝ์
ํ๋ค. ์ด๋, ๋ฒํผ ํ ์ธ์คํด์ค๋ณ๋ก ์ต๋ ์ค์ ํ ๊ฐ์๋งํผ ์ค์บํ๊ธฐ ๋๋ฌธ์ innodb_buffer_pool_instances * innodb_lru_scan_depth ์๋งํผ ์ํ๋๋ค.
๐ฑ ๋ฒํผ ํ ์ํ ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ
๋์คํฌ์ ๋ฐ์ดํฐ ๋ฒํผ ํ์ ์ ์ฌ๋์ด ์๋ ์ํ๋ฅผ '์๋ฐ์
'์ด๋ผ๊ณ ํ๋๋ฐ, ์ ์๋ฐ์
๋์ด ์๋ค๋ฉด ๋น์ฐํ ์ฟผ๋ฆฌ ์๋๊ฐ ๋งค์ฐ ์ฆ๊ฐํ๋ค.
ํ์ง๋ง, ์๋ฒ๋ฅผ ์ฌ์์ํ๋ ๊ฒฝ์ฐ ์ ์ฌ๋์ด ์๋ ๊ฒ ์์ผ๋ ์ฒ์์๋ ์์ฒญ ์๋๊ฐ ๋งค์ฐ ๋๋ฆฌ๊ฒ ๋๋ค. ํ์ง๋ง, MySQL 5.6๋ถํฐ๋ ์ฌ์์ ์ innodb_buffer_dump_now๋ผ๋ ๋ณ์๋ฅผ ํตํด์ ํ์ฌ์ ๋ฒํผ ํ ์ํ๋ฅผ ๋ฐฑ์
ํ ์ ์๋ค. ๋ฐฑ์
ํ innodb_buffer_dump_load_now๋ฅผ ํตํด์ ๋ค์ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ค!
# ๋ฐฑ์
ํ๊ธฐ
SET GLOBAL innodb_buffer_pool_dump_now = ON;
# ๋ก๋ํ๊ธฐ
SET GLOBAL innodb_buffer_pool_load_now = ON;
๋ฐฑ์ ์์๋ ์ ์ฌ๋ ๋ฐ์ดํฐ ํ์ด์ง์ ๋ฉํ ์ ๋ณด๋ง ๊ฐ์ ธ์์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฉ๋์ ๊ทธ๋ ๊ฒ ํฌ์ง ์์ผ๋ฉฐ (ib_buffer_pool ํ์ผ ํ์ธ), ๋ฐฑ์ ์๋๋ ๋น ๋ฅด๋ค. ํ์ง๋ง, ๋ค์ ๋ก๋ํ ๋๋ ์ ์ฌ ์์ ์ ์ฌ์งํํด์ผ ํ๋ค ๋ณด๋๊น ์๊ฐ์ด ์ข ๊ฑธ๋ฆด ์ ์๋ค. ์งํ ์ํฉ์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ ๋ ฅํ์.
# ์ผ๋ง๋ ๋ณต๊ตฌ๋์๋์ง ํ์ธ
SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status'\G
๋ง์ฝ ๋๋ฌด ์ค๋ ๊ฑธ๋ ค์ ์ฐธ์ ์ ์๋ค๋ฉด ๋ฉ์ถ์.
SET GLOBAL innodb_buffer_pool_load_abort = ON;
๊ทผ๋ฐ ์ด๋ฐ ๊ฑธ ์๋์ผ๋ก ํ๋ ๊ฑด ์ฝ์ง ์๋ค.
๊ทธ๋์ MySQL ์๋ฒ๊ฐ ์
ง๋ค์ด ๋๊ธฐ ์ ์ ๋ฐฑ์
ํ๊ณ , ์์ ์ ์๋์ผ๋ก ๋ณต๊ตฌํ๋๋ก innodb_buffer_pool_dump_at_shutdown๊ณผ innodb_buffer_pool_load_at_startup์ ์ค์ ํ์ผ์ ๋ฃ์ด๋์. (๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๊ฐ ๋์ด ์๊ธด ํ๋ค ใ
ใ
)
๊ทธ๋ ๋ค๋ฉด, ๋ฒํผ ํ์๋ ์ด๋ค ๋ด์ฉ์ด ์ ์ฌ๋์ด ์์๊น?
์๋๋ ํ
์ด๋ธ์ ์ธ๋ฑ์ค๋ณ๋ก ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ์ผ๋ง๋ innoDB ๋ฒํผ ํ์ ์ ์ฌ๋์ด ์๋์ง๋ฅผ ๋ํ๋ธ๋ค.
select
it.NAME AS table_name,
ii.NAME AS index_name,
ici.N_CACHED_PAGES AS 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;