DevLog ๐ถ
[Real MySQL 8.0] InnoDB ์คํ ๋ฆฌ์ง ์์ง ์์๋ณด๊ธฐ - 3ํธ (Buffer Pool - on disk structures) ๋ณธ๋ฌธ
[Real MySQL 8.0] InnoDB ์คํ ๋ฆฌ์ง ์์ง ์์๋ณด๊ธฐ - 3ํธ (Buffer Pool - on disk structures)
dolmeng2 2023. 6. 15. 13:52๐ฑ ๋ค์ด๊ฐ๊ธฐ ์
์ด๋ฒ ํฌ์คํ
์์๋ InnoDB์ ์ ๋ฐ์ ์ธ ์ํคํ
์ฒ ์ค์์ ๋์คํฌ ์์ญ์ ๋ํด์ ์์๋ณด์.
๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋จํ๊ฒ๋ง ์ง๊ณ ๋์ด๊ฐ๊ณ ์ ํ๋ค.
๐ฑ Tablespace
ํ
์ด๋ธ ์คํ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํฐ ๋
ผ๋ฆฌ์ ์ธ ๋จ์์ด๋ฉฐ, Segment -> Extent -> Page -> Row์ ๊ฐ์ ํํ๋ก ๊ตฌ์ฑ๋๋ค. MySQL์์ ํ
์ด๋ธ ์คํ์ด์ค๋ ์ ์ฅํ๋ ๋ฐ์ดํฐ์ ์ข
๋ฅ์ ๋ฐ๋ผ์ 5๊ฐ์ง๋ก ๋ถ๋ฅ๊ฐ ๊ฐ๋ฅํ๋ฐ, ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- System tablespace
- File-Per-Table tablespace
- General Tablespace
- Temporary Tablespace
- Undo Tablespace
๐ฑ System tablespace
System tablespace์ ๊ฒฝ์ฐ MySQL์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋ Shared Tablespace์ด๋ค.
์ฒด์ธ์ง ๋ฒํผ๊ฐ ์๋ ์์ญ์ด๋ฉฐ, ์ฌ๊ธฐ์ ํ
์ด๋ธ์ ์์ฑํ๊ฒ ๋๋ฉด ํ
์ด๋ธ๊ณผ ์ธ๋ฑ์ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
๋ด๋ถ์ ๋ฐ์ดํฐ ํ์ผ์ ํฌ๊ธฐ์ ์๋ innodb_data_file_path๋ผ๋ ์์คํ
ํ๊ฒฝ๋ณ์๋ก ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
๐ฑ File-Per-Table tablespace
ํ๋์ ํ
์ด๋ธ์ ๋ํ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ณ์ ์ธ ํ์ผ๋ก ๊ด๋ฆฌํ๋ ํ
์ด๋ธ ์คํ์ด์ค์ด๋ค.
์ฆ, ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ํ
์ด๋ธ์ ์ด ๊ณต๊ฐ์ ์ ์ฅ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
inno_file_per_table ์ต์
์ผ๋ก ์กฐ์ ์ด ๊ฐ๋ฅํ๋ฉฐ, ํด๋น ์ต์
์ ๋นํ์ฑํ ํ๋ฉด ์์คํ
ํ
์ด๋ธ์คํ์ด์ค์ ์์ใ
๋๋ค.
- truncate / drop ์ฐ์ฐ ์ ๋์คํฌ ๊ณต๊ฐ์ OS์๊ฒ ๋ฐ๋ฉ๋๋ค. (ํ
์ด๋ธ ์ญ์ ์ ๋ฒํผ ํ์ ์ ๊ทธ๊ณ ์ค์บํ๊ธฐ ๋๋ฌธ์ ๋ฒํผ ํ์ด ํฌ๋ค๋ฉด ์๊ฐ์ด ๋ ์์๋ ์ ์๋ค๋ ์ ์ฃผ์)
- ๋ค๋ฅธ MySQL ์ธ์คํด์ค์์ file-per-table ๊ณต๊ฐ์ ์๋ ํ
์ด๋ธ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๐ฑ General tablespace
create tablespace๋ก ๋ง๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ ๋ง๋ค ์ ์์ผ๋ฉฐ, shared tablespace์ฌ์ ์ฌ๋ฌ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
๋ค๋ฅธ ํ
์ด๋ธ ์คํ์ด์ค๋ฅผ general๋ก ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ์์ ํ
์ด๋ธ์ ์ง์ํ์ง ์๋๋ค.
file-per-table ํ
์ด๋ธ ์คํ์ด์ค์ ๋ค๋ฅด๊ฒ truncate / drop ์์ ๋ฐ์ดํฐ ํ์ผ์ ๋น์ด์๋ ๊ณต๊ฐ์ด ์๊ธฐ๋ฉฐ, OS๋ก ๋ฐํ๋์ง ์๋๋ค.
๐ฑ Temporary tablespace
๋ด๋ถ์ ์ผ๋ก 2๊ฐ์ง์ ํ
์ด๋ธ ์คํ์ด์ค๋ก ๋ถ๋ฆฌ๋๋๋ฐ, Session / Global Temporary tablespace๋ก ๋๋๋ค.
Session Temporary tablespace์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์์ฑํ ์์ ํ
์ด๋ธ๊ณผ ์ตํฐ๋ง์ด์ ๊ฐ ์์๋ก ์์ฑํ๋ ์์ ํ
์ด๋ธ์ ๋ด์ฉ์ ์ ์ฅํ๋ค.
์ด ๊ณต๊ฐ์ ์ปค๋ฅ์
์ด ์ข
๋ฃ๋๋ฉด truncate ๋์ด์ temp tablespace pool๋ก ๋ฐํ๋๋ค. ํ์ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ์์๋๋ฉด 10๊ฐ์ temporary tablespace๋ฅผ ์์ฑํ๋ฉฐ, ํ์์ ๋ฐ๋ผ์ ํ์ ๋ ์ถ๊ฐ๋๋ค.
Global Temporary tablespace์ ๊ฒฝ์ฐ ์์ ํ
์ด๋ธ์ ๋ํ ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ๋ค์ ์ ์ฅํ๋ค. ๋ฐ์ดํฐ ํ์ผ์ ์๋ ๊ฒฝ๋ก๋ ์ด๋ฆ, ํฌ๊ธฐ, ์์ฑ์ ์ ์ํ๋ฉฐ (innodb_temp_data_file_path ๋ณ์๋ก ์ง์ ) ๊ฐ์ ์ง์ ํ์ง ์์๋ค๋ฉด ํ๋์ ๋ฐ์ดํฐ ํ์ผ๋ก ์์ฑํ๊ฒ ๋๋ค. (innodb_data_home_dir ๋๋ ํฐ๋ฆฌ์ ์์ฑ)
๋ง์ฐฌ๊ฐ์ง๋ก ์ข
๋ฃ๋๊ฑฐ๋ ์ค๋จ๋๋ฉด ์ ๊ฑฐ๋๊ณ , ์๋ฒ๊ฐ ์ฌ์์๋๋ฉด ๋ค์ ์์ฑ๋๋ค.
๐ฑ Undo Tablespace
Undo tablespace์๋ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ ๋ํ Undo Log ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ค. Undo ๋ก๊ทธ์ ๊ฒฝ์ฐ ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ ๋ด๋ถ์ ํฌํจ๋ ์ธ๋ ๋ก๊ทธ ์ธ๊ทธ๋จผํธ์ ์กด์ฌํ๋ฉฐ, ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ์ ๊ฒฝ์ฐ undo tablespace or global tempory tablespace ์์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก 2๊ฐ์ undo tablespace๊ฐ ์์ฑ๋๋ฉฐ, innodb_undo_directory ์์คํ
๋ณ์์ ์ ์๋ ์์น์ ํ์ผ์ด ์์ฑ๋๋ค. (๋ฏธ์ง์ ์ mysql data ๋๋ ํฐ๋ฆฌ์ ์์ฑ)
โญ๏ธ ์ฌ๊ธฐ์ ์ผ๋ฐ ํ
์ด๋ธ์ ๋ํ ํธ๋์ญ์
์ Undo tablespace, ์์ ํ
์ด๋ธ์ ๋ํ ํธ๋์ญ์
์ Global temporary tablespace์ undo log๊ฐ ํ ๋น๋๋ค.
๐ฌ Undo Log
InnoDB๋ ํธ๋์ญ์
(๋กค๋ฐฑ ๋๋น)๊ณผ ๊ฒฉ๋ฆฌ ์์ค ๋ณด์ฅ์ ์ํด CUD ์ฟผ๋ฆฌ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๊ธฐ ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋๋ก ๋ฐฑ์
ํ๋ฉฐ, ์ด๋ฅผ Undo Log๋ผ๊ณ ํ๋ค. ๋งค์ฐ ์ค์ํ ์ญํ ์ ํ๋ ๋งํผ ๊ด๋ฆฌ ๋น์ฉ๋ ์๋นํ๋ค.
๋ง์ฝ, A๋ผ๋ ํธ๋์ญ์
์ด ๋งค์ฐ ๊ธธ์ด์ ๊ทธ ์ฌ์ด์ ์ฌ๋ฌ CUD ์์
์ด ์ผ์ด๋ฌ๋ค๋ฉด, ์ฌ์ด์ ๋ฐ์ํ ์์
์ ํธ๋์ญ์
์ด ๋๋๋๋ผ๋ ์ธ๋ ๋ก๊ทธ๋ ๊ณ์ํด์ ๋ณด์กด๋ ๊ฒ์ด๋ค. MySQL 5.5 ์ด์ ์์๋ ํ ๋ฒ ์ฆ๊ฐํ ์ธ๋ ๋ก๊ทธ ๊ณต๊ฐ์ด ๋ค์ ์ค์ด๋ค์ง ์์๋ค. ์ด๋ฌ๋ค ๋ณด๋ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ธ๋ ๋ก๊ทธ์ ์์ด ๊ธ๊ฒฉํ๊ฒ ์ฆ๊ฐ๋๊ณ , ์กฐํ ์๋ง๋ค ์ปค์ง ์ธ๋ ๋ก๊ทธ๋ฅผ ์ค์บํ๋ฉด์ ์ฑ๋ฅ์ด ๋๋น ์ง๊ฒ ๋์๋ค. ํ์ง๋ง 8.0์ผ๋ก ์ค๋ฉด์ ํ์ํ ์์ ์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ์ฃผ๊ฑฐ๋, ์ธ๋ ๋ก๊ทธ๋ฅผ ๋์๊ฐ๋ฉด์ ์ฌ์ฉํด์ ๋์คํฌ ๊ณต๊ฐ์ด ํฌ๊ฒ ๋์ด๋์ง ์๋๋ก ๋ง๋ค์ด๋์๋ค.
๋ํ, ์ธ๋ ๋ก๊ทธ๊ฐ ์ผ๋ง๋ ์ฆ๊ฐํ๋์ง ๋ชจ๋ํฐ๋งํ๋ ๊ธฐ๋ฅ๋ ์ถ๊ฐ๋์๋ค.
SHOW ENGINE INNODB STATUS \G
์ด๋ฐ ์์ผ๋ก ๋์จ๋ค. ์ ๊ธฐ์ History List์ ์๋ ์ซ์๊ฐ ์ธ๋ ๋ก๊ทธ์ ๊ฑด์์ด๋ค. (๋ฑํ ์์
ํ ๊ฒ ์์ด์ 0์ด๋ค)
MySQL 8.0์ด๋ผ๋ฉด ์๋์ ๊ฐ์ด ์ข ๋ ๋ช
์์ ์ผ๋ก ํ์ธํ ์ ์๋ค.
select count
from information_schema.INNODB_METRICS
where SUBSYSTEM='transaction'
and name = 'trx_rseg_history_len';
๐ก ์ฐธ๊ณ ๋ก, ์ธ๋ ๋ก๊ทธ์ ๊ฒฝ์ฐ ์ต๋ 4๊ฐ๋ก ๋ถ๋ฆฌ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ํ ์ด๋ธ์ ๋ํ INSERT
- ์ฌ์ฉ์ ์ ์ ํ ์ด๋ธ์ ๋ํ UPDATE / DELETE
- ์ฌ์ฉ์ ์ ์ ์์ ํ ์ด๋ธ์ ๋ํ INSERT
- ์ฌ์ฉ์ ์ ์ ์์ ํ ์ด๋ธ์ ๋ํ UPDATE / DELETE
์ด๋ UPDATE / DELETE ์ ๋ฐ์ํ ์ธ๋ ๋ก๊ทธ๋ MVCC, ๋ฐ์ดํฐ ๋ณต๊ตฌ์ ๋ชจ๋ ์ฌ์ฉ๋์ง๋ง INSERT์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๋ณต๊ตฌ์ ๋ํด์๋ง ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์์์ ์ฌ์ฉํ๋ ํ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ UPDATE / DELETE๋ก ์ธํด ๋ฐ์ํ ์ธ๋ ๋ก๊ทธ ๊ฐ์๋ง ํ์๋๋ค.
์ด๋ฌํ ์ธ๋ ๋ก๊ทธ๋ MySQL 8.0๋ถํฐ ๋ก๊ทธ ํ์ผ์ ํตํด์ ๊ธฐ๋ก๋๋ค.
์ด์ ์๋ ์์คํ
ํ
์ด๋ธ์คํ์ด์ค์ ์ ์ฅ๋์๋๋ฐ, 1~128๊ฐ์ ๋กค๋ฐฑ ์ธํฌ๋จผ์ค๋ฅผ ๊ฐ์ง๋ค. (ํ์ด์ง ํฌ๊ธฐ / 16bytes๊ฐ)
ํ๋์ ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ ๋ด์๋ ๋ค์ 1๊ฐ ์ด์์ Undo ์ฌ๋กฏ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํ๋์ ํธ๋์ญ์
์ ์ต๋ 4๊ฐ๊น์ง์ ์ธ๋ ์ฌ๋กฏ์ ์ฌ์ฉํ๋ค. (์ผ๋ฐ์ ์ผ๋ก๋ 2๊ฐ)
๊ทธ๋์, ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ํธ๋์ญ์
์ ๊ฐ์๋ ๋ณดํต (innoDB ํ์ด์ง ํฌ๊ธฐ) / 16 * (๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ ๊ฐ์) * (์ธ๋ ํ
์ด๋ธ์คํ์ด์ค ๊ฐ์)๋ก ๊ตฌํ ์ ์๋ค. ์ธ๋ ๋ก๊ทธ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ฉด ํธ๋์ญ์
์ ์์ํ ์ ์๊ธฐ ๋๋ฌธ์, ์ธ๋ ๋ก๊ทธ ๊ด๋ จ ๋ณ์๋ฅผ ์กฐ์ ํ ๋๋ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ํธ๋์ญ์
๊ฐ์์ ๋ฐ๋ผ์ ํ
์ด๋ธ์คํ์ด์ค์ ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ ๊ฐ์๋ฅผ ์ค์ ํด์ผ ํ๋ค.
MySQL 8.0๋ถํฐ๋ create undo tablespace๋ drop tablespace ๋ฑ์ ํตํด์ ๋์ ์ผ๋ก ํ
์ด๋ธ ์คํ์ด์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ค.
# undo log ๊ด๋ จ ํ
์ด๋ธ์คํ์ด์ค ํ์ธ
select TABLESPACE_NAME, FILE_NAME
from information_schema.FILES
where FILE_TYPE like 'undo log'
๐ฌ Undo tablespace ๊ณต๊ฐ ์ค์ด๊ธฐ
๋ง์ฝ ์ธ๋ ํ
์ด๋ธ์คํ์ด์ค์ ๊ณต๊ฐ์ ์ค์ด๊ณ ์ถ๋ค๋ฉด, 2๊ฐ์ง์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
CUD ์ฟผ๋ฆฌ ์์
์ ์ธ๋ ๋ก๊ทธ๋ก ๊ธฐ๋ก๋๋๋ฐ, ํธ๋์ญ์
์ด ์ปค๋ฐ๋๋ฉด ์ธ๋ ๋ก๊ทธ์ ๋ณต์ฌ๋ ๊ฐ์ ๋ถํ์ํ๊ธฐ ๋๋ฌธ์ ํผ์ง ์ค๋ ๋๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ํด๋น ๊ฐ์ ์ ๊ฑฐํ๋ค. ์ด๋, innodb_undo_log_truncate ์์คํ
๋ณ์๊ฐ on์ด๋ผ๋ฉด ํผ์ง ์ค๋ ๋๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ๊ณต๊ฐ์ OS์๊ฒ ๋ฐ๋ฉํ๋ค. (๋ฐ๋ฉ ์ฃผ๊ธฐ๋ innodb_purge_rseg_truncate_frequency ๋ณ์ ์กฐ์ )
ํน์, ์ง์ ๋นํ์ฑํ ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํด์ ํผ์ง ์ค๋ ๋๊ฐ ๋นํ์ฑ ์ํ์ธ ํ
์ด๋ธ์คํ์ด์ค๋ฅผ ๋ฐ๋ฉํ๋๋ก ๋ง๋ค ์ ์๋ค. (์ด๋๋ ํ
์ด๋ธ์คํ์ด์ค๊ฐ ์ต์ 3๊ฐ ์ด์์ ๋์ด์ผ ์๋์ด ๊ฐ๋ฅํ๋ค.)
# ๋นํ์ฑํ
alter undo tablespace tablespace_name set inactive;
# ํผ์ง ์ค๋ ๋์ ์ํด ์ธ๋ ํ
์ด๋ธ์คํ์ด์ค ๊ณต๊ฐ์ด ๋ฐ๋ฉ๋๋ฉด ์ฌํ์ฑํ
alter undo tablespace tablespace_name set active;
๐ฑ Double Write Buffer
๋ฆฌ๋ ๋ก๊ทธ๋ ํ์ด์ง์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ๊ธฐ๋กํ๋๋ฐ, ๋ง์ฝ ๋ํฐ ํ์ด์ง ํ๋ฌ์ ์ ์ผ๋ถ๋ง ๊ธฐ๋ก๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ํด๋น ํ์ด์ง ๋ด์ฉ์ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์๋ ์๋ค. ์ด๋ฐ ์์ผ๋ก ์ผ๋ถ๋ง ๊ธฐ๋ก๋๋ ๊ฒ์ Partial-Page, ๋๋ Torn-Page๋ผ๊ณ ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ง๊ธฐ ์ํด InnoDB์์๋ 'Double-Write'๋ผ๋ ๊ณต๊ฐ์ ํตํด, ๋ฒํผ ํ๋ก๋ถํฐ ํ๋ฌ์๋ ํ์ด์ง๋ฅผ ๋ฐ์ดํฐ ํ์ผ์ ์ฐ๊ธฐ ์ ์ ์ ์ฅํ๋ค.
1. A~E๊น์ง์ ๋ํฐ ํ์ด์ง ํ๋ฌ์
2. ๋์คํฌ๋ก ๊ธฐ๋กํ๊ธฐ ์ ์ A~E๊น์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด์ Double Write Bufer์ ๊ธฐ๋ก
3. ๋ํฐ ํ์ด์ง๋ฅผ ์ ๋นํ ์์น์ ๋๋ค์ผ๋ก ์ฐ๊ธฐ ์์ ์งํ
๋ง์ฝ ์ ์ ๊ธฐ๋ก ์ Double Write Buffer์ ๊ธฐ๋ก๋ ๊ฒ์ ์ ๊ฑฐ๋๊ณ , ๋น์ ์์ ์ผ๋ก ์ข
๋ฃ๋์๋ค๋ฉด ํด๋น ๋ด์ฉ์ ์ฐธ์กฐํ์ฌ ๋ณต๊ตฌํ๋ค.
๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ด ์ค์ํ ์๋น์ค๋ผ๋ฉด ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. (innodb_doublewrite ๋ณ์ ์ฌ์ฉ)
- ์ฐธ๊ณ ๋ก innodb_flush_log_at_trx_commit ์ต์
์ (์ปค๋ฐ ์ ์๋ฌด ์์
๋ X, ํด๋น ์ต์
์ด ์ผ์ ธ ์๋ค๋ฉด ์ปค๋ฐ ์ ๋ก๊ทธ ๋ฒํผ์ ๋ฐ์ดํฐ ์ฐ๊ณ => ๋์คํฌ์ ๋ฐ์ดํฐ ์ฐ๋ ์์
์งํ) ์ฑ๋ฅ์์ผ๋ก ๊ป๋ค๋ฉด doublewrite๋ ๋์.
๐ฑ Redo Log
Redo Log๋ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ํธ๋์ญ์ ์ ์ํด ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค. (๋ณต๊ตฌ ์์ ) ๊ธฐ๋ณธ์ ์ผ๋ก MySQL์ innoDB์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฐ๋ก ๋์คํฌ์ ์ ์ฅํ์ง ์๊ณ ๋ฒํผ ํ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์, ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ์ ์ฉ๋์ง ์์๋ค๋ฉด ์ฌ์์ ๋์ ์ค์ Redo ์์ ์ ๋จผ์ ์ํํ๊ฒ ๋๋ค.
- ์ฐธ๊ณ ๋ก, ๋ณต๊ตฌ ์์ ์ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋ค.
ํ ์ด๋ธ ์คํ์ด์ค ํ์ํ๊ธฐ -> ๋ฆฌ๋ ๋ก๊ทธ ์ ์ฉํ๊ธฐ -> ์๋ฃ๋์ง ์์ ํธ๋์ญ์ ๋กค๋ฐฑํ๊ธฐ -> ์ฒด์ธ์ง ๋ฒํผ ๋ณํฉํ๊ธฐ -> ํผ์งํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฒํผ ํ์ ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ํ๋ก ์ ํ ๋ณ๊ฒฝ๋์ง ์์ Clean ํ์ด์ง์, ๋ณ๊ฒฝ๋์์ง๋ง ๋์คํฌ์ ์์ง ๊ธฐ๋ก๋์ง ์์ Dirty ํ์ด์ง๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ, Dirty ํ์ด์ง์ ๊ฒฝ์ฐ ๋์คํฌ์ ๋ฒํผ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ๋ฐ์ดํฐ์ ์ํ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋์ ๋๊ธฐํํด์ผ ํ๋ค.
๋ํฐ ํ์ด์ง์ ๊ฒฝ์ฐ ์ฌ์ค์ ๋ฒํผํ์ ์์๋ก ์ ์ง๋๋ ๋ฐ์ดํฐ ์ํ์ด๊ธฐ ๋๋ฌธ์, innoDB์์๋ ์ด๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ , ์ด ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ 'ํ์ฑ ๋ฆฌ๋ ๋ก๊ทธ - Active Redo Log'๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
ํ์ฑ ๋ฆฌ๋ ๋ก๊ทธ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋๋ง๋ค ์๋ก์ด ๋ก๊ทธ ์ํธ๋ฆฌ๋ก ๋ฎ์ด์์ฐ๋ฉฐ ๊ธฐ๋ก๋ ํ์ผ์ ์์ฐจ์ ์ผ๋ก ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. (์ฐ์ฌ์ง ๋ฆฌ๋ ๋ก๊ทธ ์์ฒด) ์ฌ์ฌ์ฉ์ ํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ ๋ก๊ทธ์์๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๊ณต๊ฐ๊ณผ ์ฌ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ๊ณต๊ฐ์ผ๋ก ๋๋์ด์ง๋ฉฐ, ์ด ์ค์์ ํ์ฑ ๋ฆฌ๋ ๋ก๊ทธ์ ๊ฒฝ์ฐ '์ฌ์ฌ์ฉ ๋ถ๊ฐ๋ฅ ๊ณต๊ฐ'์ ์๋ฏธํ๋ค.
๋ฆฌ๋ ๋ก๊ทธ๋ ์ํํ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ ๊ณ์ ๋ฎ์ด ์์์ง๋ฉด์ ์์ด์ง๋ค. ํ์ง๋ง, ๊ธฐ๋ก๋ ๋๋ง๋ค ๊ณ์ ์ฆ๊ฐํ๋ 'LSN (Log Sequence Number)'์ด๋ผ๋ ๊ฐ์ ํ์ํ๋ค. LSN์ Redo Log์ ๊ธฐ๋ก๋ ์์
์ ์์ ์ ๊ฐ๋ฆฌํจ๋ค๊ณ ๋ณผ ์ ์๋ค.
๐ก InnoDB๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฒดํฌํฌ์ธํธ๋ฅผ ํตํด Redo ๋ก๊ทธ์ ๋ฒํผ ํ์ Dirty ํ์ด์ง๋ฅผ ๋์คํฌ๋ก ๋๊ธฐํํ๋ค.
์ด๋ ๊ฒ ๋ฐ์ํ ์ฒดํฌํฌ์ธํธ ์ค์์ ๊ฐ์ฅ ์ต๊ทผ ์ฒดํฌํฌ์ธํธ ์ง์ ์ LSN์ด ํ์ฑ ๋ฆฌ๋ ๋ก๊ทธ ๊ณต๊ฐ์ ์์์ ์ด ๋๋ค.
๐ก CheckPoint
- ์ฒดํฌํฌ์ธํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ฒํผ ํ ๋ด์ ๋ณ๊ฒฝ๋ ํ์ด์ง๋ฅผ ๋์คํฌ๋ก ๋๊ธฐํ ์์ ์ ์งํํ๋ค.
Sharp CheckPoint
- ์ปค๋ฐ๋ ํธ๋์ญ์ ์ ๋ชจ๋ ๋ํฐ ํ์ด์ง๋ฅผ ๋์คํฌ์ ํ๋ฌ์ํ๊ณ , ๊ฐ์ฅ ์ต๊ทผ์ ์ปค๋ฐ๋ ํธ๋์ญ์ ์ LSN์ ๊ธฐ๋กํจ
- ์ ์ ์ข ๋ฃ๋ ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ ์ํํ์ฌ ์ฌ์ฌ์ฉํ ๋ Sharp CheckPoint ํ์ฉ
Fuzzy CheckPoint
- ๋ํฐ ํ์ด์ง๋ฅผ ์กฐ๊ธ์ฉ ๋์คํฌ๋ก ํ๋ฌ์ํ๊ณ , ๊ทธ ์์น๋ฅผ ์์ - ์ข ๋ฃ ์ง์ ์ LSN์ ๊ธฐ๋กํ์ฌ ๊ด๋ฆฌ
- ๋ง์คํฐ ์ค๋ ๋์ ๋ํด 1~10์ด๋ง๋ค ์ฃผ๊ธฐ์ ์ผ๋ก ํ๋ฌ์ ๋ฆฌ์คํธ ํ์ธ
- ํ๋ฆฌ ํ์ด์ง์ ์ฌ์ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋ LRU ๋ฆฌ์คํธ์ ๋ํฐ ํ์ด์ง ์ฒดํฌํฌ์ธํธ
- ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ด ๋ค ์ฐผ์ ๋ ์ผ๋ถ ํ์ด์ง ๊ฐ์ ํ๋ฌ์ ์ ์ฌ์ฉ
- ๋ํฐ ํ์ด์ง๊ฐ ๋๋ฌด ๋ง์ ๋ ์ฒดํฌํฌ์ธํธ
๋ํ, ๊ฐ์ฅ ์ต๊ทผ ์ง์ ์ LSN๊ณผ ๋ง์ง๋ง ๋ฆฌ๋ ๋ก๊ทธ ์ํธ๋ฆฌ์ LSN ์ฐจ์ด๋ฅผ Checkpoint Age๋ผ๊ณ ํ๋ฉฐ, ํด๋น ๊ฐ์ด ํด์๋ก ์์ง ๋์คํฌ์ ๋ฐ์๋์ง ์์ ๋ณ๊ฒฝ์ฌํญ์ด ๋ง๋ค๋ ๊ฒ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ ์ ํ ์์ ์ ์ํํด์ฃผ๋ ๊ฒ์ด ์ค์ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฒํผ ํ์ dirty ํ์ด์ง๋ ํน์ ๋ฆฌ๋ ๋ก๊ทธ ์ํธ๋ฆฌ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ , ์ฒดํฌํฌ์ธํธ๊ฐ ๋ฐ์ํ๋ฉด ์ฒดํฌํฌ์ธํธ LSN๋ณด๋ค ์์ ๋ฆฌ๋ ๋ก๊ทธ ์ํธ๋ฆฌ์ ๊ด๋ จ๋ dirty ํ์ด์ง, ๋ฆฌ๋ ๋ก๊ทธ ์ํธ๋ฆฌ๋ ๋ชจ๋ ๋์คํฌ๋ก ๋๊ธฐํ๋ผ์ผ ํ๋ค.
ex) ๋ฒํผ ํ์ด 100๊ธฐ๊ฐ, ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ ์ ์ฒด ํฌ๊ธฐ๋ 100๋ฉ๊ฐ
- Checkpoint Age ์ญ์ ์ต๋ 100๋ฉ๊ฐ๊น์ง ํ์ฉ๋๋ค. ๋ฆฌ๋ ๋ก๊ทธ ์ํธ๋ฆฌ๊ฐ ํ๊ท ์ ์ผ๋ก 4KB๋ผ๋ฉด 100MB / 4KB = 25600๊ฐ ์ ๋์ dirty ํ์ด์ง๋ง ๋ฒํผ ํ์ ๋ณด๊ดํ ์ ์๊ฒ ๋๋ค. ๋ง์ฝ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ 16KB๋ผ๋ฉด ํ์ฉ ๊ฐ๋ฅํ ์ ์ฒด ๋ํฐ ํ์ด์ง๋ 400MB ์ ๋์ด๋ค.
= ๋ฒํผ ํ์ ๋งค์ฐ ํฌ์ง๋ง, ์ค์ ์ฐ๊ธฐ ๋ฒํผ๋ง์ ์ํ ํจ๊ณผ๋ ๊ฑฐ์ ๋ชป ๋ณด๋ ์ํ์ด๋ค.
ex) ๋ฒํผ ํ์ 100๋ฉ๊ฐ, ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ 100๊ธฐ๊ฐ
- ์์ ๊ฒฝ์ฐ์ ๋ค๋ฅด๊ฒ ์ ์ฒด ๋ํฐ ํ์ด์ง๋ ์ต๋ 400๊ธฐ๊ฐ ์ ๋ ๊ฐ์ง ์ ์๊ฒ ๋๋ค. ํ์ง๋ง, ๋ฒํผ ํ์ ํฌ๊ธฐ๊ฐ 100๋ฉ๊ฐ๋๊น ํ์ฉ ๊ฐ๋ฅํ ๋ํฐ ํ์ด์ง๋ 100๋ฉ๊ฐ ์ ๋์ด๋ค. ์ด ๊ฒฝ์ฐ์๋ ๋ฒํผ ํ์ด ํ์ํ ๋ ๋๋ฌด ๋ง์ dirty ํ์ด์ง๋ฅผ ํ ๋ฒ์ ๊ธฐ๋กํด์ผ ๋ ์๋ ์์ด์ ์ข์ง๋ ์๋ค.
= ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ ๋งค์ฐ ํฌ์ง๋ง, ๋ฒํผ ํ์ด ํ์ํ ๋ ๋ํฐ ํ์ด์ง๋ฅผ ๊ฐ์๊ธฐ ์์ฒญ ์จ์ผ ํ๋ ์ผ์ด ์๊ธธ ์ ์์ด์ ๋ถํ๊ฐ ์๊ธธ ์๋ ์๋ค.
๋ ์์ ๋ชจ๋ ์๋นํ ๊ทน๋จ์ ์ด๋ค.
๋ง์ฝ ๋ฒํผ ํ์ ํฌ๊ธฐ๊ฐ 100๊ธฐ๊ฐ ์ดํ๋ผ๋ฉด ๋๋ต 5~10๊ธฐ๊ฐ ์ ๋๋ก๋ง ์ ํํ์.
๐ฌ Redo Log ๋์ ์์
1. ๋ฒํผ ํ์์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด๋น๋๋ ํ์ด์ง๋ฅผ ์์ ํ ๋ค์ Dirty ๋งํน ์งํ
2. ๊ด๋ จ๋ ๋ฆฌ๋ ๋ก๊ทธ ๋ ์ฝ๋๋ฅผ Double Write Buffer์ ์ ์ฅ
3. ๋ฆฌ๋ ๋ก๊ทธ ๋ ์ฝ๋๋ฅผ Log Buffer๋ก ์ด๋
4. ๋ฆฌ๋ ๋ก๊ทธ ๋ ์ฝ๋๋ฅผ Redo Log File๋ก ํ๋ฌ์
5. ๋ณ๊ฒฝ๋ Dirty ํ์ด์ง์ ๋ํด ์ฒดํฌํฌ์ธํธ๋ฅผ ์ํํ์ฌ System tablespace์ ์ ์ฅ
- ์ค์ํ ์ ์ ๋ฐ๋ก ๋์คํฌ ์์ญ์ธ System tablespace์ ์ ์ฅํ๋ ๊ฒ ์๋๋ผ Log Buffer์ ๋ค์ด๊ฐ๊ณ , ํ ๋ฒ์ ๋ชจ์์ Redo Log File๋ก ํ๋ฌ์ํ๋ค๋ ๊ฒ ์ค์ํ๋ค.
๐ฌ Redo Log ํ์ผ์ ์ ์ฒด ํฌ๊ธฐ
๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ ์ ์ฒด ํฌ๊ธฐ๋ ๋ฒํผ ํ์ ํจ์จ์ฑ์ ๊ฒฐ์ ํ ๋งํผ ์ค์ํ๋ค.
innodb_log_file_size ๋ณ์๋ฅผ ํตํด ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ ํฌ๊ธฐ๋ฅผ, innodb_log_files_in_group์ ํตํด ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ ๊ฐ์๋ฅผ ์ค์ ํ ์ ์์ด, ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๊ฐ์ ๊ณฑํ ๊ฐ์ด ๋ก๊ทธ ํ์ผ์ ์ ์ฒด ํฌ๊ธฐ๊ฐ ๋๋ค. ๋ก๊ทธ ๋ฒํผ์ ํฌ๊ธฐ๋ ๊ธฐ๋ณธ๊ฐ์ด 16MB์ด๋ฉฐ, ๋ง์ฝ ํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ๋ณ๊ฒฝํ๋ค๋ฉด ๋ ํฌ๊ฒ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
๐ฌ Redo Log ์์นด์ด๋น
๋ฆฌ๋ ๋ก๊ทธ์ ๊ฒฝ์ฐ ์ค์ํ ๋งํผ, ๋ก๊ทธ๋ฅผ ๊ณ์ ์ถ์ ํ๋ฉด์ ์๋ก ์ถ๊ฐ๋ ๋ฆฌ๋ ๋ก๊ทธ ์ํธ๋ฆฌ๋ฅผ ๋ณต์ฌํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๋ค. (MySQL 8.0 ์ํฐํ๋ผ์ด์ฆ ๋ฒ์ ) ์ด๋, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ง์์ ๋ฆฌ๋ ๋ก๊ทธ ๋ด์ฉ์ด ๋ณต์ฌ๋๊ธฐ๋ ์ ์ ๋ฎ์ด์์์ง๋๋ผ๋ ๋ฆฌ๋ ๋ก๊ทธ ์์นด์ด๋น์ ํ์ฉํ๋ฉด ๋ฐฑ์
์ด ์คํจํ์ง ์๊ฒ ๋๋ค. (innodb_redo_log_archive_start, nnodb_redo_log_archive_stop)
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ๋ ๋ก๊ทธ๋ ํญ์ ํ์ฑํ๋์ด ์๋๋ฐ, MySQL 8.0๋ถํฐ๋ ๋นํ์ฑํํ๋๋ก ๋ง๋ค ์๋ ์๋ค.
๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๊ฑฐ๋ ํ ๋ฒ์ ์ ์ฌํ๋ ๊ฒฝ์ฐ์๋ ๋นํ์ฑํํ์ฌ ์ ์ฌ ์๊ฐ์ ๋ฎ์ถ ์ ์๋ค.
# ๋นํ์ฑํ
ALTER INSTANCE DISABLE INNODB REDO_LOG
# ํ์ฑํ
ALTER INSTANCE ENABLE INNODB REDO_LOG
๋ฌผ๋ก , ๋นํ์ฑ ํ ๋ฐ์ดํฐ ์ ์ฌ ์์
์ ์งํํ๋ค๋ฉด ๊ผญ ๋ค์ ํ์ฑํ๋ฅผ ํด์ค์ผ ํ๋ค. (๋น์ ์ ์ข
๋ฃ์ ๋ ๋๋นํ๊ธฐ)
๋ด์ฉ์ด ๋ง์์ ์ด์ง๋ฝ๋ค...
๋์ค์ ๋ค์ ์ ๋ฆฌํด๋ด์ผ๊ฒ ๋ค ใ
ใ
;