DevLog ๐Ÿ˜ถ

[Real MySQL 8.0] InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์•Œ์•„๋ณด๊ธฐ - 2ํŽธ (Buffer Pool - in memory structures) ๋ณธ๋ฌธ

๐Ÿ“–/Real MySQL 8.0

[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 (์–ด๋Œ‘ํ‹ฐ๋ธŒ ํ•ด์‹œ ์ธ๋ฑ์Šค)

https://tech.kakao.com/2016/04/07/innodb-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;
Comments