๐ก ๋ณธ ๋ฌธ์๋ MySQL์ ๊ธฐ๋ณธ์๋ผ ๋ถ๋ฆฌ๋ Real MySQL์ด๋ผ๋ ์ฑ ์ ๋ฐํ์ผ๋ก 'MySQL ์ํคํ ์ฒ'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
์ค์ ๋ก ์ฟผ๋ฆฌ๊ฐ ๋ค์ด์์ ๋ MySQL ์์ฒด์์๋ ์ด๋ค์์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์ด๋ค์์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋์ง๋ฅผ ์ ๋ฆฌํด๋์์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
1. MySQL์ ์ ์ฒด ๊ตฌ์กฐ
MySQL ์๋ฒ๋ ํฌ๊ฒ MySQL ์์ง๊ณผ ์คํ ๋ฆฌ์ง ์์ง์ผ๋ก ๊ตฌ๋ถํด์ ๋ณผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ MySQL์ ์ฟผ๋ฆฌ ํ์๋ ์ตํฐ๋ง์ด์ ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์คํ ๋ฆฌ์ง ์์ง๊ณผ ๊ตฌ๋ถํ๊ณ ์ ์์ ๊ทธ๋ฆผ์์๋ "MySQL์์ง"๊ณผ "์คํ ๋ฆฌ์ง ์์ง"์ผ๋ก ๊ตฌ๋ถํ์ผ๋ฉฐ, ์ด ๋์ ๋ชจ๋ ํฉ์ณ์ ๊ทธ๋ฅ MySQL ๋๋ MySQL ์๋ฒ๋ผ๊ณ ํํํฉ๋๋ค.
1.1 MySQL ์์ง
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ์ ๋ฐ ์ฟผ๋ฆฌ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ปค๋ฅ์
ํธ๋ค๋ฌ์ SQLํ์ ๋ฐ ์ ์ฒ๋ฆฌ๊ธฐ, ์ฟผ๋ฆฌ์ ์ต์ ํ๋ ์คํ์
์ํ ์ตํฐ๋ง์ด์ ๊ฐ ์ค์ฌ์ ์ด๋ฃน๋๋ค. ์์ฒญ๋ SQL ๋ฌธ์ฅ์ ๋ถ์ํ๊ฑฐ๋ ์ต์ ํํ๋ ๋ฑ DBMS ๋๋์ ํด๋นํ๋ ์ฒ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฑ๋ฅ ํฅ์์ ์ํด MyISAM์ ํค ์บ์๋ InnoDB์ ๋ฒํผ ํ๊ณผ ๊ฐ์ ๋ณด์กฐ ์ ์ฅ์ ๊ธฐ๋ฅ์ด ํฌํจ๋ผ ์์ต๋๋ค. ๋ํ, MySQL์ ํ์ค SQL(ANSI SQL-92) ๋ฌธ๋ฒ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ํ์ค ๋ฌธ๋ฒ์ ๋ฐ๋ผ ์์ฑ๋ ์ฟผ๋ฆฌ๋ ํ DBMS์ ํธํ๋์ด ์คํ๋ ์ ์์ต๋๋ค.
1.2 ์คํ ๋ฆฌ์ง ์์ง
์ค์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๊ฑฐ๋ ๋์คํฌ ์คํ ๋ฆฌ์ง๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๋ถ๋ถ์ ์คํ ๋ฆฌ์ง ์์ง์ด
์ ๋ดํฉ๋๋ค. MYSQL ์๋ฒ์์ MySQL ์์ง์ ํ๋์ง๋ง ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ๋ฌ๊ฐ๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค์ ์์ ์ ๊ฐ์ด ํ
์ด๋ธ์ด ์ฌ์ฉํ ์คํ ๋ฆฌ์ง ์์ง์ ์ง์ ํ๋ฉด ์ดํ ํ
์ด๋ธ์ ๋ชจ๋ ์ฝ๊ธฐ ์์
์ด๋ ๋ณ๊ฒฝ ์์
์ ์ ์๋
์คํ ๋ฆฌ์ง ์์ง์ด ์ฒ๋ฆฌํฉ๋๋ค.
mysql > CREATE TABLE test_table (fd1 IT, fd2 INT) ENGINE = INNODB;
1.3 ํธ๋ค๋ฌ API
MySQL ์์ง์ ์ฟผ๋ฆฌ ์คํ๊ธฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฑฐ๋ ์ฝ์ด์ผ ํ ๋๋ ๊ฐ ์คํ ๋ฆฌ์ง ์์ง์๊ฒ ์ฐ๊ธฐ ๋๋ ์ฝ๊ธฐ๋ฅผ ์์ฒญํ๋๋ฐ, ์ด๋ฌํ ์์ฒญ์ ํธ๋ค๋ฌ(Handler) ์์ฒญ์ด๋ผ๊ณ ํ๊ณ , ์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ API๋ฅผ ํธ๋ค๋ฌ API๋ผ๊ณ ํ๋ค. InnoDB ์คํ ๋ฆฌ์ง ์์ง ๋ํ ์ด ํธ๋ค๋ฌ API๋ฅผ ์ด์ฉํด MySQL ์์ง๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค. ์ด ํธ๋ค๋ฌ API๋ฅผ ํตํด ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ(๋ ์ฝ๋) ์์ ์ด ์์๋์ง๋ ๋ค์์ ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์์ต๋๋ค.
"SHOW GLOBAl STATUS LIKE 'Handler%';"
1.4 MySQL ์คํ ๋ฆฌ์ง ์์ง ๋น๊ต
๋๋ถ๋ถ์ ์์ง๋ค์ด ์ค๋ผํด ์์ง์ ๊ธฐ์ค์ผ๋ก ๊ธฐ๋ฅ์ ์ค์ด๊ฑฐ๋ ์ ์ฌํ๊ฒ ๊ตฌํํ๊ณ ์์ต๋๋ค. ๊ธฐ๋ฅ์ ์ค์ธ ์์ง์ ๊ทธ๋งํผ ๋ฝ ๊ฒฝํฉ์ด๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ถํ๋ฅผ ์ค์ด๋ฉด์ ๋๋ ์ธ์ํธ๋ ๋ฉ๋ชจ๋ฆฌ๋ด์ ์กฐํ๋ก ์ฑ๋ฅ์ ๋์ด๊ณ ์๋ ๊ฒฝํฅ์ ๋ณด์ด๊ณ ์์ต๋๋ค. MySQL ์๋ฒ(mysqld)์์ ์ง์๋๋ ์คํ ๋ฆฌ์ง ์์ง์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ 'SHOW ENGINES'๋ก ํ์ธํ ์ ์์ผ๋ฉฐ, ๋ค์์ ํ๋ก ๋น๊ต ์ ๋ฆฌํ์์ต๋๋ค.
์คํ ๋ฆฌ์ง ์์ง | ๋ฒ์ | ํธ๋์ญ์ | LOCK ์ธ๋ถ์ฑ | ๊ฐ์ | ์ฝ์ |
MyISAM | ๋ชจ๋ ๋ฒ์ | ์ง์ ์ํจ | ๋์ ์ฝ์
๊ฐ๋ฅ ํ ์ด๋ธ ๋ฝ |
SELECT, INSERT, ๋๋์ ์ฌ | ์ฝ๊ธฐ/์ฐ๊ธฐ ํผํฉ ์์ |
MyISAM Merge | ๋ชจ๋ ๋ฒ์ | ์ง์ ์ํจ | ๋์ ์ฝ์
๊ฐ๋ฅ ํ ์ด๋ธ ๋ฝ |
๋ถํ ๋ณด๊ด, ๋ฐ์ดํฐ์จ์ดํ์ฐ์ง |
์ ์ญ์ ํ ์ด๋ธ ๊ฒ์ |
Memory(HEAP) | ๋ชจ๋ ๋ฒ์ | ์ง์ ์ํจ | ํ ์ด๋ธ ๋ฝ | ์ค๊ฐ ๊ณ์ฐ, ํต๊ณ ์ฐธ์กฐ ๋ฐ์ดํฐ |
๋๋ ๋ฐ์ดํฐ์
, ์ง์์ ์ธ ์คํ ๋ฆฌ์ง |
InnoDB | ๋ชจ๋ ๋ฒ์ | ์ง์ | MVCC์ ROW๋ฝ | ํธ๋์ญ์ ์ฒ๋ฆฌ | |
Falcon | 6.0 ์ด์ | ์ง์ | MVCC์ ROW ๋ฝ | ํธ๋์ญ์ ์ฒ๋ฆฌ | |
Archive | 4.1 ์ด์ | ์ง์ ์ํจ | ROW ๋ฝ | ๋ก๊น , ์ง๊ณ ๋ถ์ | ์์ ์ ๊ทผ(์ธ๋ฑ์ฑ), ๊ฐฑ์ , ์ญ์ |
CSV | 4.1 ์ด์ | ์ง์ ์ํจ | ํ ์ด๋ธ ๋ฝ | ๋ก๊น , ์ธ๋ถ ๋ฐ์ดํฐ ๋๋ ์ ์ฌ | ์์ ์ ๊ทผ(์ธ๋ฑ์ฑ) |
Bloackhole | 4.1 ์ด์ | ์ง์ ์ํจ | ๋ฝ ์ง์ ์ํจ | ๋ก๊น , ๋ณต์ ์์นด์ด๋ธ | ํน์ ๋ชฉ์ (๋ก๊น ) ์ด์ธ์ ์ฌ์ฉ |
Federated | 5.0 ์ด์ | ์ง์ ์ํจ | ๋ฝ ์ง์ ์ํจ | ๋ฐฐํฌ๋ ๋ฐ์ดํฐ ์์ค ๊ด๋ฆฌ | ํน์ ๋ชฉ์ (์๊ฒฉ ๋ฐ์ดํฐ ์กฐํ) ์ด์ธ์ ์ฌ์ฉ |
NDB ํด๋ฌ์คํฐ | 5.0 ์ด์ | ์ง์ | ROW ๋ฝ | ๊ณ ๋์ ๊ฐ์ฉ์ฑ | ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ด๋ ค์ |
PBXT | 5.0 ์ด์ | ์ง์ | MVCC์ ROW ๋ฝ | ํธ๋์ญ์ ์ฒ๋ฆฌ, ๋ก๊น | ํด๋ฌ์คํฐ ์ธ๋ฑ์ค ์ง์ ์ํจ |
SolidDB | 5.0 ์ด์ | ์ง์ | MVCC์ ROW ๋ฝ | ํธ๋์ญ์ ์ฒ๋ฆฌ | |
Maria | 6.X ์ด์ | ์ง์ | MVCC์ ROW ๋ฝ | MyISAM ์์ง ๋์ฒด |
- ์ฝ๊ธฐ ์ ์ฉ ํ ์ด๋ธ์์ ๊ตณ์ด ํธ๋์ญ์ ์ด๋ ๋์์ฑ์ ์๊ตฌํ ํ์๋ ์๊ธฐ๋๋ฌธ์ ๊ทธ๋ฌํ ๊ฒ์ ๋ฐฐ์ ํ ์์ง์ ์ ํํ์ฌ ํ ์ด๋ธ์ ํ์ฉํ๊ฒ ๋ฉ๋๋ค.
- MySQL ์์ง๋ค ์ค ๊ฐ์ฅ ๋ณดํธ์ ์ผ๋ก ์ฐ์ด๋ฉด์ ์ค๋ผํด๊ณผ ์ ์ฌํ ์์ง์ InnoDB ์์ง์ ๋๋ค.
2. MySQL ์ค๋ ๋ฉ ๊ตฌ์กฐ
MySQL์ ํ๋ก์ธ์ค ๊ธฐ๋ฐ์ด ์๋๋ผ ์ค๋ ๋ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ฉฐ, ํฌ๊ฒ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ๊ตฌ๋ถํ ์ ์๋ค.
2.1 ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋(ํด๋ผ์ด์ธํธ ์ค๋ ๋)
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ์ํ๊ฒ ๋๋ฉด MySQL ์๋ฒ๋ ๊ทธ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํด ์ค ์ค๋ ๋๋ฅผ ์์ฑํด ๊ทธ ํด๋ผ์ด์ธํธ์๊ฒ ํ ๋นํด์ค๋๋ค. ์ด ์ค๋ ๋๋ DBMS์ ์๋จ์์ ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ์) ํต์ ํ๊ธฐ ๋๋ฌธ์ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ผ๊ณ ํ๋ฉฐ, ๋ํ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ค๋ ๋๋ผ๊ณ ๋ ํฉ๋๋ค.
ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ ์ต์ํ MySQL ์๋ฒ์ ์ ์๋ ํด๋ผ์ด์ธํธ์ ์๋งํผ ์กด์ฌํ๋ฉฐ, ์ฃผ๋ก ๊ฐ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋ฌด์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์์ ์ ๋ง์น๊ณ ์ปค๋ฅ์ ์ ์ข ๋ฃํ๋ฉด, ํด๋น ์ปค๋ฅ์ ์ ๋ด๋นํ๋ ์ค๋ ๋๋ ๋ค์ ์ค๋ ๋ ์บ์(Thread pool)๋ก ๋๋์๊ฐ๋๋ค. ์ด๋ ์ด๋ฏธ ์ค๋ ๋ ์บ์์ ์ผ์ ๊ฐ์ ์ด์์ ๋๊ธฐ ์ค์ธ ์ค๋ ๋๊ฐ ์์ผ๋ฉด, ์ค๋ ๋ ์บ์์ ๋ฃ์ง ์๊ณ ์ค๋ ๋๋ฅผ ์ข ๋ฃ์์ผ ์ผ์ ๊ฐ์์ ์ค๋ ๋ ๋ง ์ค๋ ๋ ์บ์์ ์กด์ฌํ๊ฒ ํฉ๋๋ค.
์ด๋ ๊ฒ ์ค๋ ๋์ ๊ฐ์๋ฅผ ์ผ์ ํ๊ฒ ์ ์งํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ํ๋ผ๋ฏธํฐ๊ฐ thread_cache_size์ ๋๋ค. MyISAM ํ ์ด๋ธ์ ๋์คํฌ ์ฐ๊ธฐ ์์ ๊น์ง ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ์ง๋ง, InnoDB ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๋ฒํผ๋ ์บ์๊น์ง๋ง ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ๊ณ , ๋๋จธ์ง ๋ฒํผ๋ก๋ถํฐ ๋์คํฌ๊น์ง ๊ธฐ๋กํ๋ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํฉ๋๋ค.
2.2 ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋
์ธ์ํธ ๋ฒํผ(Insert Buffer)๋ฅผ ๋ณํฉํ๋ ์ค๋ ๋, ๋ก๊ทธ๋ฅผ ๋์คํฌ๋ก ๊ธฐ๋กํ๋ ์ค๋ ๋, InnoDB ๋ฒํผ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ๊ธฐ๋กํ๋ ์ค๋ ๋, ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋ก ์ฝ์ด๋ค์ด๋ ์ค๋ ๋, ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ์ฌ๋ฌ ๊ฐ์ง ์ ๊ธ์ด๋ ๋ฐ๋๋ฝ์ ๋ชจ๋ํฐ๋ง ํ๋ ์ค๋ ๋๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ ์ค๋ ๋๋ฅผ ์ด๊ดํ๋ ๋ฉ์ธ ์ค๋ ๋๋ ์์ต๋๋ค.
๋ชจ๋ ์ค์ํ ์ญํ ์ด์ง๋ง, ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ก๊ทธ ์ค๋ ๋(Log thread)์ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ๋ด๋ ค์ฐ๋ ์์ ์ ์ฒ๋ฆฌํ๋ ์ฐ๊ธฐ ์ฐ๋ ๋ ์ ๋๋ค.
- ์ฝ๊ธฐ / ์ฐ๊ธฐ ์ฐ๋ ๋์ ๊ฐ์๋ฅผ ์ง์ ํ๋ ํ๋ผ๋ฏธํฐ : innodb_write_io_threads / innodb_read_io_threads
SQL ์ฒ๋ฆฌ ๋์ค ๋ฐ์ดํฐ์ ์ฐ๊ธฐ ์์ ์ ์ง์ฐ(๋ฒํผ๋ง)๋์ด ์ฒ๋ฆฌ๋ ์ ์์ง๋ง ๋ฐ์ดํฐ์ ์ฝ๊ธฐ ์์ ์ ์ ๋ ์ง์ฐ๋๋ฉด ์๋ฉ๋๋ค(์ฌ์ฉ์๊ฐ SELECT ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋๋ฐ, "์์ฒญ๋ SELECT๋ 10๋ถ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ฃผ๊ฒ ๋ค"๋ผ๊ณ ์๋ต์ ๋ณด๋ด๋ DBMS๋ ์ฌ์ฉํ๋ฉด ์๋ฉ๋๋ค). ๊ทธ๋์ ์ผ๋ฐ์ ์ธ ์์ฉ DBMS์๋ ๋๋ถ๋ถ ์ฐ๊ธฐ ์์ ์ ๋ฒํผ๋งํด์ ์ผ๊ด ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ํ์ฌ๋ผ ์์ผ๋ฉฐ InnoDB ๋ํ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฌํ ์ด์ ๋ก InnoDB์์๋ INSERT์ UPDATE ๊ทธ๋ฆฌ๊ณ DELETE ์ฟผ๋ฆฌ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ๋ฐ์ดํฐ ํ์ผ๋ก ์์ ํ ์ ์ฅ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋ฉ๋๋ค. ํ์ง๋ง MyISAM์์ ์ผ๋ฐ์ ์ธ ์ฟผ๋ฆฌ๋ ์ฐ๊ธฐ ๋ฒํผ๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ์ฌ์ฉ๊ตฌ์กฐ
3.1 ๋ฉ๋ชจ๋ฆฌ ์์ญ
MySQL์์ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ฒ ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ผ๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค. ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ MySQL ์๋ฒ๊ฐ ์์๋๋ฉด์ ๋ฌด์กฐ๊ฑด ์ด์์ฒด์ ๋ก๋ถํฐ ํ ๋น๋ฉ๋๋ค. ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์ญ์ญ์ ์ฐจ์ด๋ MySQL ์๋ฒ ๋ด์ ์กด์ฌํ๋ ๋ง์ ์ค๋ ๋๊ฐ ๊ณต์ ํด์ ์ฌ์ฉํ๋ ๊ณต๊ฐ์ธ์ง ์๋์ง์ ๋ฐ๋ผ ๊ตฌ๋ถ๋๋ฉฐ ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ด ์์ต๋๋ค.
3.1.1 ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ค๋ ๋์ ์์ ๋ฌด๊ดํ๊ฒ ์ผ๋ฐ์ ์ผ๋ก๋ ํ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ง ํ ๋น๋ฉ๋๋ค.
- ๋จ, ํ์์ ๋ฐ๋ผ 2๊ฐ ์ด์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ ์๋ ์์ง๋ง ํด๋ผ์ด์ธํธ์ ์ค๋ ๋ ์์๋ ๋ฌด๊ดํ๋ฉฐ, ์์ฑ๋ ๊ธ๋ก๋ฒ ์์ญ์ด N๊ฐ๋ผ ํ๋๋ผ๋ ๋ชจ๋ ์ค๋ ๋์ ์ํด ๊ณต์ ๋ฉ๋๋ค.
3.1.2 ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- MySQL ์๋ฒ์์ ์กด์ฌํ๋ ํด๋ผ์ด์ธํธ ์ค๋ ๋๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋๋ค.
- ํด๋ผ์ด์ธํธ์ MySQL ์๋ฒ์์ ์ปค๋ฅ์ ์ ์ธ์ ์ด๋ผ๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ธ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
- ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ ํด๋ผ์ด์ธํธ ์ค๋ ๋๋ณ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น๋๋ฉฐ ์ ๋ ๊ณต์ ๋์ด ์ฌ์ฉ๋์ง ์๋๋ค๋ ํน์ง์ด ์์ต๋๋ค.
- ์ปค๋ฅ์ ์ด ์ด๋ ค ์๋ ๋์ ๊ณ์ ํ ๋น๋ ์ํ๋ก ๋จ์ ์๋ ๊ณต๊ฐ๋ ์๊ณ (์ปค๋ฅ์ ๋ฒํผ๋ ๊ฒฐ๊ณผ ๋ฒํผ), ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ์๊ฐ์๋ง ํ ๋นํ๋ค๊ฐ ๋ค์ ํด์ ํ๋ ๊ณต๊ฐ(์ํธ ๋ฒํผ๋ ์กฐ์ธ ๋ฒํผ)๋ ์์ต๋๋ค.
3.2 MySQL ์์ง๊ณผ ์คํ ๋ฆฌ ์์ง์ ์์ญ ์ฒ๋ฆฌ
SQL ํ์ <-> SQL ์ตํฐ๋ง์ด์ <-> SQL ์คํ๊ธฐ <-> ๋ฐ์ดํฐ ์ฝ๊ธฐ/์ฐ๊ธฐ <-> ๋์คํฌ ์คํ ๋ฆฌ์ง
MySQL์์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ๊ณผ์ ์ ํฌ๊ฒ ๋๋๋ค๋ฉด ๊ฑฐ์ ๋๋ถ๋ถ์ ์์ ์ด MySQL ์์ง(SQL ํ์, ์ตํฐ๋ง์ด์ , ์คํ๊ธฐ)์์ ์ฒ๋ฆฌ๋๊ณ , ๋ง์ง๋ง "๋ฐ์ดํฐ ์ฝ๊ธฐ/์ฐ๊ธฐ" ์์ ๋ง ์คํ ๋ฆฌ์ง ์์ง์ ์ํด ์ฒ๋ฆฌ๋๋ค.(์์ฃผ ์๋ก์ด ์ฉ๋์ ์คํ ๋ฆฌ์ง ์์ง์ ๋ง๋ ๋ค ํ๋๋ผ๋ DBMS์ ์ ์ฒด ๊ธฐ๋ฅ์ด ์๋ ์ผ๋ถ๋ถ์ ๊ธฐ๋ฅ๋ง ์ํํ๋ ์์ง์ ์์ฑํ๊ฒ ๋๋ค๋ ์๋ฏธ) ํ์ง๋ง, ์ค์ง์ ์ธ GROUP BY๋ ORDER BY๋ฑ ๋ง์ ๋ณต์กํ ์ฒ๋ฆฌ๋ ์คํ ๋ฆฌ์ง ์์ง ์์ญ์ด ์๋๋ผ MySQL ์์ง์ ์ฒ๋ฆฌ ์์ญ์ธ ์ฟผ๋ฆฌ ์คํ๊ธฐ์์ ์ฒ๋ฆฌ๋๋ค.
4. ์ฟผ๋ฆฌ ์คํ ๊ตฌ์กฐ
4.1 ํ์(Parser)
์ฌ์ฉ์ ์์ฒญ์ผ๋ก ๋ค์ด์จ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ํ ํฐ(MySQL์ด ์ธ์ํ ์ ์๋ ์ต์ ๋จ์์ ์ดํ๋ ๊ธฐํธ)์ผ๋ก ๋ถ๋ฆฌํด ํธ๋ฆฌ ํํ์ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด ๋ด๋ ์์ ์ ์๋ฏธํฉ๋๋ค. ์ฟผ๋ฆฌ๋ฌธ์ฅ์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ ์ค๋ฅ๋ ์ด ๊ณผ์ ์์ ๋ฐ๊ฒฌ๋๋ฉฐ ์ฌ์ฉ์์๊ฒ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ฒ ๋ฉ๋๋ค.
4.2 ์ ์ฒ๋ฆฌ๊ธฐ(Preprocessor)
ํ์ ๊ณผ์ ์์ ๋ง๋ค์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ์ ์ด ์๋์ง ํ์ธํฉ๋๋ค. ๊ฐ ํ ํฐ์ ํ ์ด๋ธ ์ด๋ฆ์ด๋ ์นผ๋ผ ์ด๋ฆ ๋๋ ๋ด์ฅ ํจ์์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋งคํ์ ํด๋น ๊ฐ์ฒด์ ์กด์ฌ ์ฌ๋ถ์ ๊ฐ์ฒด์ ์ ๊ทผ๊ถํ ๋ฑ์ ํ์ธํ๋ ๊ณผ์ ์ ์ด ๋จ๊ณ์์ ์ํํฉ๋๋ค. ์กด์ฌ ํ์ง ์๊ฑฐ๋ ๊ถํ์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด์ ํ ํฐ์ ์ด ๋จ๊ณ์์ ๊ฑธ๋ฌ์ง๋๋ค.
4.3 ์ตํฐ๋ง์ด์ (Query Optimizer)
์ฌ์ฉ์์ ์์ฒญ์ผ๋ก ๋ค์ด์จ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
4.4 ์คํ ์์ง(Query Execution Engine)
์คํ ์์ง์ ๋ง๋ค์ด์ง ๊ณํ๋๋ก ๊ฐ ํธ๋ค๋ฌ์๊ฒ ์์ฒญํด์ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋ค๋ฅธ ํธ๋ค๋ฌ ์์ฒญ์ ์ ๋ ฅ์ผ๋ก ์ฐ๊ฒฐํ๋ ์ญํ ์ ์ํํฉ๋๋ค. ์ตํฐ๋ง์ด์ ๊ฐ GROUP BY๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ ํ ์ด๋ธ์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๊ณ ๊ฐ์ ํ์๋, ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ์ํํฉ๋๋ค.
ex) ์คํ์์ง์ด ํธ๋ค๋ฌ์๊ฒ ํ ์ด๋ธ์ ๋ง๋ค์ด, WHERE ์ ์ ์ผ์นํ๋ ๋ ์ฝ๋ ์ฝ์ด์, ์ฝ์ด์จ ๋ ์ฝ๋๋ค ์์ ํ ์ด๋ธ๋ก ์ ์ฅํด๋ฑ์ ์์ฒญํ๊ณ ์ต์ข ์ ์ผ๋ก ์คํ ์์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์๋ ๋ค๋ฅธ ๋ชจ๋์๊ฒ ๋๊น๋๋ค.
์ฆ, ์คํ ์์ง์ ๋ง๋ค์ด์ง ๊ณํ๋๋ก ๊ฐ ํธ๋ค๋ฌ์๊ฒ ์์ฒญํด์ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋ค๋ฅธ ํธ๋ค๋ฌ ์์ฒญ์ ์ ๋ ฅ์ผ๋ก ์ฐ๊ฒฐํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
4.5 ํธ๋ค๋ฌ(Handler): ์คํ ๋ฆฌ์ง ์์ง
MySQL ์๋ฒ์ ๊ฐ์ฅ ๋ฐ๋จ์์ MySQL ์คํ ์์ง์ ์์ฒญ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ์ ์ฅํ๊ณ ๋์คํฌ๋ก๋ถํฐ ์ฝ์ด์ค๋ ์ญํ ์ ๋ด๋นํ๋ค.
4.6 ์ฟผ๋ฆฌ ์บ์(Query Cache): MySQL 8.0 ๋ถํฐ ์ ๊ฑฐ
์ฟผ๋ฆฌ ์บ์ ๊ธฐ๋ฅ์ ๋์ผ SQL ์คํ์ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ๊ณผ์ ์์ Parsing, Preprocesor, Query Optimizer ๋จ๊ณ๋ฅผ ์ํํ์ง ์๊ณ ์บ์์ ๋ด๊ฒจ์ง ์ด์ ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ๋ฐํํฉ๋๋ค. ๋ค๋ง ๋จ์ ์ผ๋ก ํ ์ด๋ธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์บ์ฑ๋ ๋ฐ์ดํฐ ์ญ์ ๊ฐ ํ์ํ๊ณ ๊ทธ ๊ณผ์ ์์ ํด๋ฆฌ ์บ์์ ์ ๊ทผํ๋ ์ฐ๋ ๋์ Lock์ด ๊ฑธ๋ฆฌ๊ฒ ๋๊ณ (Waiting for query cache lock) ๊ทธ์ ๋ฐ๋ผ์ ๋์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ ์ ํ๊ฐ ๋ฐ์๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ MySQL 8.0 ์์๋ Query Cache ๊ธฐ๋ฅ์ด Remove ๋์์ต๋๋ค.
- ์์ฒญ๋ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ด ์ฟผ๋ฆฌ ์บ์์ ์กด์ฌํ๋๊ฐ?
- ํด๋น ์ฌ์ฉ์๊ฐ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ ๊ถํ์ ๊ฐ์ง๊ณ ์๋๊ฐ?
- ํธ๋์ญ์
๋ด์์ ์คํ๋ ์ฟผ๋ฆฌ์ธ ๊ฒฝ์ฐ ๊ฐ์ ๋ฒ์ ๋ด์ ์๋ ๊ฒฐ๊ณผ์ธ๊ฐ?
- ํธ๋์ญ์ ์ ์์ ์ ID๋ณด๋ค ID ๊ฐ์ด ํฐ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝํ ์์ ๋ด์ญ์ด๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ ์ฐธ์กฐํ ์ ์๋ค. ์ด๋ฅผ ๊ฐ์๋ฒ์ ๋ผ๊ณ ํ๋ค. ์ฟผ๋ฆฌ ์บ์๋ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ธ ํธ๋์ญ์ ์ ID๊ฐ ๊ฐ์ ๋ฒ์ ๋ด์ ์์ ๋๋ง ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
- CURRENT_DATE(), SYSDATE(), RAND() ๋ฑ๊ณผ ๊ฐ์ด ํธ์ถ ์์ ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ์์๊ฐ ์๋๊ฐ?
- ํ๋ฆฌํ์ด ์คํ
์ดํธ๋จผํธ์ ๊ฒฝ์ฐ ๋ณ์๊ฐ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๊ฐ?
- ํ๋ฆฌํ์ด ์คํ ์ดํธ๋จผํธ(๋ฐ์ธ๋ ๋ณ์๊ฐ ์ฌ์ฉ๋ ์ฟผ๋ฆฌ)์ ๊ฒฝ์ฐ์๋ ์ฟผ๋ฆฌ ๋ฌธ์ฅ ์์ฒด์ ๋ณ์("?")๊ฐ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ ๋ฌธ์ฅ ์์ฒด๋ก ์ฟผ๋ฆฌ ์บ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ฉํ๋ค ํ๋๋ผ๋ ์ค์ MySQL ์๋ฒ์์๋ ํ๋ฆฌํ์ด ์คํ ์ดํธ๋จผํธ์ ํํ๋ก ์คํ๋์ง ์๋๋ค. ์ง์ ํ ํ๋ฆฌํ์ด ์คํ ์ดํธ๋จผํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ก๊ทธ๋จ์ ์์ค์ฝ๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ์ ์์ฑํ ๋ ํน๋ณํ ์ต์ ์ ์ฌ์ฉํด์ผ๋ง ํ๋ค.
- ์บ์๊ฐ ๋ง๋ค์ด์ง๊ณ ๋ ์ดํ ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ์ฌ์ฉ์์ ์ํด ๋ณ๊ฒฝ๋์ง ์์๋๊ฐ?
- ์ฟผ๋ฆฌ์ ์ํด ๋ง๋ค์ด์ง ๊ฒฐ๊ณผ๊ฐ ์บ์ํ๊ธฐ์ ๋๋ฌด ํฌ์ง ์์๊ฐ?
5. ๋ณต์ (Replication)
MySQL์ ๋ณต์ ๋ ๋ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๊ณ ๋ ํ๋๋ฐ, ๋ณต์ ๋ 2๋ ์ด์์ MySQL ์๋ฒ๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋๋ก ์ค์๊ฐ์ผ๋ก ๋๊ธฐํ ํ๋ ๊ธฐ์ ์ ๋๋ค. ๋ณต์ ์๋ INSERT๋ UPDATE์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ MySQL์๋ฒ์ SELECT ์ฟผ๋ฆฌ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ๋ง ํ ์์๋ MySQL์๋ฒ๋ก ๋๋ฉ๋๋ค.
5.1 ๋ง์คํฐ(Master) / ์ฌ๋ ์ด๋ธ(Slave)
MySQL์์๋ ์ฐ๊ธฐ์ ์ฝ๊ธฐ ์ญํ ๋ก ๊ตฌ๋ถํด, ์ ์๋ฅผ ๋ง์คํฐ๋ผ๊ณ ํ๊ณ ํ์๋ฅผ ์ฌ๋ ์ด๋ธ๋ผ๊ณ ํฉ๋๋ค. ์๋ฒ์ ๋ณต์ ์์๋ ๋จธ์คํฐ๋ ๋ฐ๋์ 1๊ฐ์ด๋ฉฐ ์ฌ๋ ์ด๋ธ๋ 1๊ฐ ์ด์์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.
5.1.1 ๋ง์คํฐ
์ฃผ๋ก ๋ฐ์ดํฐ๊ฐ ์์ฑ ๋ฐ ๋ณ๊ฒฝ, ์ญ์ ๋๋ ์ฃผ์ฒด(์์์ )๋ฅผ ๋ง์คํฐ ์ฅ๋น๋ผ ํ๋ฉฐ, MySQL์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๊ฐ ํ์ฑํ๋๋ฉด ์ด๋ค MySQL ์๋ฒ๋ ๋ง์คํฐ๊ฐ ๋ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ณต์ ์ ์ฐธ์ฌํ๋ ์ฌ๋ฌ ์๋ฒ ๊ฐ์ด๋ฐ ๋ณ๊ฒฝ์ด ํ์ฉ๋๋ ์๋ฒ๋ฅผ ๋ง์คํฐ๋ก ํ์ ํ ๋๊ฐ ๋ง์ต๋๋ค.
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ณต์ ๋๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ๋ ์ด๋ธ ์๋ฒ์์ ๋ณ๊ฒฝ ๋ด์ญ์ ์์ฒญํ๋ฉด ๋ง์คํฐ ์ฅ๋น ๋ ๊ทธ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ฅผ ์ฝ์ด ์ฌ๋ ์ด๋ธ๋ก ๋๊น๋๋ค. ๋ง์คํฐ ์ฅ๋น์ ํ๋ก์ธ์ค ๊ฐ์ด๋ฐ "Bimlog dump"๋ผ๋ ์ค๋ ๋๊ฐ ์ด ์ผ์ ์ ๋ดํ๋ ์ค๋ ๋์ ๋๋ค.
5.1.2 ์ฌ๋ ์ด๋ธ
๋ฐ์ดํฐ(๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ)๋ฅผ ๋ฐ์ ์ฌ ๋ง์คํฐ ์ฅ๋น์ ์ ๋ณด(IP์ฃผ์์ ํฌํธ ์ ๋ณด ๋ฐ ์ ์ ๊ณ์ )์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ ์ฌ๋ ์ด๋ธ๊ฐ ๋ฉ๋๋ค. (๋ง์คํฐ๋ ์ฌ๋ ์ด๋ธ๋ผ๊ณ ํด์ ๋ณ๋์ ๋น๋ ์ต์ ์ด ํ์ํ๊ฑฐ๋ ํ๋ก๊ทธ๋จ์ ๋ณ๋๋ก ์ค์นํด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค.)๋ง์คํฐ ์๋ฒ๊ฐ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ฌ๋ ์ด๋ธ ์๋ฒ๋ ๋ฆด๋ ์ด ๋ก๊ทธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฌ๋ ์ด๋ธ ์๋ฒ์ I/O ์ค๋ ๋๋ ๋ง์คํฐ ์๋ฒ์ ์ ์ํด ๋ณ๊ฒฝ ๋ด์ญ์ ์์ฒญํ๊ณ ๋ฐ์ ์จ ๋ณ๊ฒฝ ๋ด์ญ์ ๋ฆด๋ ์ด ๋ก๊ทธ์ ๊ธฐ๋กํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋ ์ด๋ธ ์๋ฒ์ SQL ์ค๋ ๋๊ฐ ๋ฆด๋ ์ด ๋ก๊ทธ์ ๊ธฐ๋ก๋ ๋ณ๊ฒฝ ๋ด์ญ์ ์ฌ์คํํจ์ผ๋ก์จ ์ฌ๋ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ง์คํฐ์ ๋์ผํ ์ํ๋ก ์ ์งํฉ๋๋ค. I/O ์ค๋ ๋์ SQL ์ค๋ ๋๋ ๋ง์คํฐ MySQL์์๋ ๊ฐ๋๋์ง ์์ผ๋ฉฐ, ๋ณต์ ๊ฐ ์ค์ ๋ ์ฌ๋ ์ด๋ธ MySQL ์๋ฒ์์ ์๋์ ์ผ๋ก ๊ฐ๋ํ๋ ์ค๋ ๋์ ๋๋ค.
5.2 ๋ณต์ ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฃผ์ํ ์
- ์ฌ๋ ์ด๋ธ๋ ํ๋์ ๋ง์คํฐ๋ง ์ค์ ๊ฐ๋ฅ
- ๋ง์คํฐ์ ์ฌ๋ ์ด๋ธ์ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์ํด ์ฌ๋ ์ด๋ธ๋ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์
- ์ฌ๋ ์ด๋ธ ์๋ฒ์ฉ ์ฅ๋น๋ ๋ง์คํฐ์ ๋์ผํ ์ฌ์์ด ์ ํฉ
- ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ก ์คํ๋ ์ฟผ๋ฆฌ๊ฐ ์ฌ๋ ์ด๋ธ์์ ์ง์ฐ๋์ง ์๊ณ ํ๋์ ์ค๋ ๋๋ก ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ฐ์ดํฐ ์กฐํ๋ณด๋ค๋ 10๋ถ์ 1 ์์ค์ผ๋ก ์ ์ง๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ฏ๋ก ๋ง์คํฐ ์๋ฒ์ ์ฌ๋ ์ด๋ธ ์๋ฒ๋ฅผ ๊ฐ์ ์ฌ์์ผ๋ก ์ ์งํ ๋๊ฐ ๋ง์ต๋๋ค.
- ๋ํ, ์ฌ๋ ์ด๋ธ ์๋ฒ๋ ๋ง์คํฐ ์๋ฒ๊ฐ ๋ค์ด๋ ๊ฒฝ์ฐ ๊ทธ์ ๋ํ ๋ณต๊ตฌ ๋์์ผ๋ก ์ฌ์ฉ๋ ๋๋ ๋ง๊ธฐ ๋๋ฌธ์ ์ฌ์์ ๋์ผํ๊ฒ ๋ง์ถ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ ๋๋ค
- ๋ณต์ ๊ฐ ๋ถํ์ํ ๊ฒฝ์ฐ์๋ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ฅผ ์ค์ง.
- ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ฅผ ์์ ์ ์ผ๋ก ๊ธฐ๋กํ๊ธฐ ์ํด ๊ฐญ ๋ฝ(Gap lock)์ ์ ์งํ๊ณ , ๋งค๋ฒ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ๋ ๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ์ํจ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๊ธฐ๋กํด์ผ ํ๋ค. ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋ ์์ ์ AutoCommit์ด ํ์ฑํ ๋ MySQL ์๋ฒ์์ ์ฌ๊ฐํ ๋ถํ๋ก ๋ํ๋ ๋๊ฐ ๋ง์ต๋๋ค.
- ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค(Isolation level)
- ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ํ์ผ์ ์ด๋ค ๋ด์ฉ์ด ๊ธฐ๋ก๋๋๋์ ๋ฐ๋ผ STATEMENT ํฌ๋งท ๋ฐฉ์๊ณผ ROW ํฌ๋งท ๋ฐฉ์์ด ์์ต๋๋ค.
- STATEMENT ๋ฐฉ์์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ํ์ผ์ ๋ง์คํฐ์์ ์คํ๋๋ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ๊ธฐ๋กํ๋ ๋ฐฉ์์ด๋ฉฐ, ROW ํฌ๋งท์ ๋ง์คํฐ์์ ์คํ๋ ์ฟผ๋ฆฌ์ ์ํด ๋ณ๊ฒฝ๋ ๋ ์ฝ๋ ๊ฐ์ ๊ธฐ๋กํ๋ ๋ฐฉ์์ ๋๋ค.
MySQL์ ๋ณต์ ๋ ๋ง์คํฐ์์ ์ฒ๋ฆฌ๋ ๋ด์ฉ์ด ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ๋ก ๊ธฐ๋ก๋๊ณ , ๊ทธ ๋ด์ฉ์ด ์ฌ๋ ์ด๋ธ MySQL ์๋ฒ๋ก ์ ๋ฌ๋์ด ์ฌ์คํ ๋๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋๋ค. ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ํ์ผ์ SQL ๋ฌธ์ฅ์ ๊ธฐ๋กํ๋ ๋ฐฉ์์ ๋ฌธ์ฅ ๊ธฐ๋ฐ ๋ณต์ ๋ผ๊ณ ํ๋ฉฐ, ๋ณ๊ฒฝ๋ ๋ ์ฝ๋๋ฅผ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๊ธฐ๋กํ๋ ๋ฐฉ์์ ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ๋ณต์ ๋ผ๊ณ ํ๋ค. SQL ๊ธฐ๋ฐ์ ๋ณต์ ๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋ ค๋ฉด REPEATABLE-READ ์ด์์ ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค์ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ๊ทธ๋ก ์ธํด InnoDB ํ
์ด๋ธ์์๋ ๋ ์ฝ๋ ๊ฐ์ ๊ฐ๊ฒฉ์ ์ ๊ทธ๋ ๊ฐญ๋ฝ์ด๋ ๋ฅ์คํธ ํค ๋ฝ์ด ํ์ํด์ง๋ค. ๋ฐ๋ฉด ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ๋ณต์ ๋
๋ง์คํฐ ์ฌ๋ ์ด๋ธ MySQL ์๋ฒ ๊ฐ์ ๋คํฐ์ํฌ ํธ๋ ํฝ์ ๋ง์ด ๋ฐ์์ํฌ ์ ์์ง๋ง READ-COMMITTED ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค์์๋ ์๋ํ ์ ์์ผ๋ฉฐ InnoDB ํ
์ด๋ธ์์ ์ ๊ธ์ ๊ฒฝํฉ์ ์ค์ด๋ ๋ค.
6. InnoDB ์คํ ๋ฆฌ์ง ์์ง ์ํคํ ์ฒ
InnoDB๋ MySQL์์ ์ฌ์ฉํ ์ ์๋ ์คํ ๋ฆฌ์ง ์์ง ์ค์์ ๊ฑฐ์ ์ ์ผํ๊ฒ ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ์ ๊ธ์ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ, ๋๋ฌธ์ ๋์ ๋์์ฑ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ณ ๋ํ ํ์ ์ ์ด๋ฉฐ ์ฑ๋ฅ์ด ๋ฐ์ด๋ฉ๋๋ค.
6.1 InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ํน์ฑ
- ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ์ํ ํด๋ฌ์คํฐ๋ง
- InnoDB์ ๋ชจ๋ ํ
์ด๋ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก PK๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋ฌ์คํฐ๋ง ๋์ด ์ ์ฅ๋ฉ๋๋ค. ์ฆ, PK๊ฐ ์์๋๋ก ๋์คํฌ์
์ ์ฅ๋๊ณ , ์ด๋ก ์ธํด PK์ ์ํ ๋ ์ธ์ง ์ค์บ์ ์๋นํ ๋นจ๋ฆฌ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- InnoDB์ ๋ชจ๋ ํ
์ด๋ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก PK๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋ฌ์คํฐ๋ง ๋์ด ์ ์ฅ๋ฉ๋๋ค. ์ฆ, PK๊ฐ ์์๋๋ก ๋์คํฌ์
- ์ ๊ธ์ด ํ์ ์๋ ์ผ๊ด๋ ์ฝ๊ธฐ
- InnoDB ์คํ ๋ฆฌ์ง ์์ง์ MVCC๋ผ๋ ๊ธฐ์ ์ ์ด์ฉํด ๋ฝ์ ๊ฑธ์ง ์๊ณ ์ฝ๊ธฐ ์์
์ ์ํํฉ๋๋ค. ๋ฝ์ ๊ฑธ์ง ์๊ธฐ ๋๋ฌธ์
InnoDB์์ ์ฝ๊ธฐ ์์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ง๊ณ ์๋ ๋ฝ์ ๊ธฐ๋ค๋ฆฌ์ง๋ ์์ต๋๋ค.
- InnoDB ์คํ ๋ฆฌ์ง ์์ง์ MVCC๋ผ๋ ๊ธฐ์ ์ ์ด์ฉํด ๋ฝ์ ๊ฑธ์ง ์๊ณ ์ฝ๊ธฐ ์์
์ ์ํํฉ๋๋ค. ๋ฝ์ ๊ฑธ์ง ์๊ธฐ ๋๋ฌธ์
- ์ธ๋ํค ์ง์
- ์ธ๋ํค๋ ๋ถ๋ชจํ
์ด๋ธ์ด๋ ์์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ์ฒดํฌํ๋ ์์
์ด ํ์ํ๋ฏ๋ก ์ ๊ธ์ด ์ฌ๋ฌ ํ
์ด๋ธ๋ก ์ ํ๋๊ณ ,
๊ทธ๋ก ์ธํด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ์ค๋ฌด์์๋ ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- ์ธ๋ํค๋ ๋ถ๋ชจํ
์ด๋ธ์ด๋ ์์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ์ฒดํฌํ๋ ์์
์ด ํ์ํ๋ฏ๋ก ์ ๊ธ์ด ์ฌ๋ฌ ํ
์ด๋ธ๋ก ์ ํ๋๊ณ ,
- ์๋ ๋ฐ๋๋ฝ ๊ฐ์ง
- ์๋ํ๋ ์ฅ์ ๋ณต๊ตฌ
- ์ค๋ผํด์ ์ํคํ ์ฒ ์ฌ์ฉ
6.2 InnoDB ๋ฒํผํ
- InnoDB ์คํ ๋ฆฌ์ง ์์ง์์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๋ถ๋ถ์ผ๋ก, ๋์คํฌ์ ๋ฐ์ดํฐ ํ์ผ์ด๋ ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ํด ๋๋ ๊ณต๊ฐ์ ๋๋ค. ์ฐ๊ธฐ ์์ ์ ์ง์ฐ์์ผ ์ผ๊ด ์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฒํผ ์ญํ ๋ ๊ฐ์ด ํฉ๋๋ค. ๋ฒํผ ํ์ด ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ๋๋คํ ๋์คํฌ ์์ ์ ํ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ๋ฒํผ ํ์ ํฌ๊ธฐ๋ innodb_buffer_pool_size๋ก ์ค์ ํ๋๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด ์ฅ์ฐฉ๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ 50 ~ 80% ์์ค์์ ๋ฒํผ ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ด์์ฒด์ ์ ๊ฐ ํด๋ผ์ด์ธํธ ์ค๋ ๋๊ฐ ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ๋ ์ถฉ๋ถํ ๊ณ ๋ คํด์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
- InnoDB ๋ฒํผ ํ์ ์์ง ๋์คํฌ์ ๊ธฐ๋ก๋์ง ์์ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค(์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ์ด์ง๋ฅผ Dirty page๋ผ๊ณ ํฉ๋๋ค).
- ์ด๋ฌํ Dirty page๋ InnoDB์์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๋ ์ด๋ค ์กฐ๊ฑด์ด ๋๋ฉด ์ฒดํฌํฌ์ธํธ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ Write ์ค๋ ๋๊ฐ ํ์ํ ๋งํผ์ ๋ฐ์ดํฐ ํ์ด์ง๋ง ๋์คํฌ๋ก ๊ธฐ๋กํฉ๋๋ค.
6.3 ์ธ๋(Undo)๋ก๊ทธ
์ธ๋ ์์ญ์ UPDATE ๋ฌธ์ฅ์ด๋ DELETE์ ๊ฐ์ ๋ฌธ์ฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํด์ ๋ ๋ณ๊ฒฝ๋๊ธฐ ์ ์ ๋ฐ์ดํฐ(์ด์ ๋ฐ์ดํฐ)๋ฅผ ๋ณด๊ดํ๋ ๊ณณ์ ๋๋ค. ์ธ๋์ ๋ฐ์ดํฐ๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ, ํธ๋์ญ์ ์ ๋กค๋ฐฑ ๋๋น์ฉ์ผ๋ก ์ธ๋ ์์ญ์ ๋ฐฑ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ฐ์ดํฐ ํ์ผ(๋ฐ์ดํฐ/์ธ๋ฑ์ค ๋ฒํผ)๋ก ๋ณต๊ตฌํฉ๋๋ค.
- ๋ ๋ฒ์งธ, ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค์ ์ ์งํ๋ฉด์ ๋์ ๋์์ฑ์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.
6.4 ์ธ์ํธ ๋ฒํผ(Insert Buffer)
- RDBMS์์ ๋ ์ฝ๋๊ฐ INSERT๋๊ฑฐ๋ UPDATE ๋ ๋๋ ๋ฐ์ดํฐ ํ์ผ์ ๋ณ๊ฒฝํ๋ ์์ ๋ฟ ์๋๋ผ ํด๋น ํ ์ด๋ธ์ ํฌํจ๋ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ์์ ๋ ํ์ํฉ๋๋ค.
- ๊ทธ๋ฐ๋ฐ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ์์ ์ ๋๋คํ๊ฒ ๋์คํฌ๋ฅผ ์ฝ๋ ์์ ์ด ํ์ํ๋ฏ๋ก ํ ์ด๋ธ์ ์ธ๋ฑ ์ค๊ฐ ๋ง๋ค๋ฉด ์ด ์์ ์ ์๋นํ ๋ง์ ์์์ ์๋ชจํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ InnoDB๋ ๋ณ๊ฒฝํด์ผ ํ ์ธ๋ฑ์ค ํ์ด์ง๊ฐ ๋ฒํผ ํ์ ์์ผ๋ฉด ์ ๋ฐ์ดํธ๋ฅผ ์ํํ์ง๋ง, ๊ทธ๋ ์ง ์๊ณ ๋์คํฌ๋ก๋ถํฐ ์ฝ์ด์์ ์ ๋ฐ์ดํธํด์ผ ํ๋ค๋ฉด, ์ด๋ฅผ ์ฆ์ ์คํํ์ง ์๊ณ ์์ ๊ณต๊ฐ์ ์ ์ฅํด ๋๊ณ ๋ฐ๋ก ์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ํํ๋ก ์ฑ๋ฅ์ ํฅ์ ์ํค๊ฒ ๋ฉ๋๋ค. ์ด๋ ์ฌ์ฉํ๋ ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ธ์ํธ ๋ฒํผ(Insert Buffer)๋ผ๊ณ ํฉ๋๋ค.
- ์ฌ์ฉ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํ๊ธฐ ์ ์ ๋ฐ๋์ ์ค๋ณต ์ฌ๋ถ๋ฅผ ์ฒดํฌํด์ผ ํ๋ ์ ๋ํฌ ์ธ๋ฑ์ค๋ ์ธ์ํธ ๋ฒํผ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ธ์ํธ ๋ฒํผ์ ์์๋ก ์ ์ฅ๋ผ ์๋ ์ธ๋ฑ์ค ๋ ์ฝ๋ ์กฐ๊ฐ์ ์ดํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ ์ํด ๋ณํฉ๋๋๋ฐ, ์ด ์ค๋ ๋๋ฅผ ์ธ์ํธ ๋ฒํผ ๋จธ์ง ์ค๋ ๋(Merge thread)๋ผ๊ณ ํฉ๋๋ค.
MySQL 5.5๋ถํฐ๋ innod_change_buffering์ด๋ผ๋ ์ค์ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ก ๋์ ๋์ด ์์ ์ ์ข ๋ฅ๋ณ๋ก ์ธ์ํธ ๋ฒํผ๋ฅผ ํ์ฑํํ ์ ์์ผ๋ฉฐ, ์ธ์ํธ ๋ฒํผ๊ฐ ๋นํจ์จ์ ์ผ ๋๋ ์ธ์ํธ ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ง ์๊ฒ ์ค์ ํ ์ ์๋๋ก ๊ฐ์ ๋์ต๋๋ค.
6.5 ๋ฆฌ๋(Redo) ๋ก๊ทธ ๋ฐ ๋ก๊ทธ ๋ฒํผ
- ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํด ๋๊ธฐ ์ํด ์กด์ฌํ๋ InnoDB ๋ฒํผ ํ๋ก๋ง์ ACID๋ฅผ ๋ณด์ฅํ ์ ์๋๋ฐ, ์ด๋ฅผ ์ํด ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ์์ฐจ์ ์ผ๋ก ๋์คํฌ์ ๊ธฐ๋กํ๋ ๋ก๊ทธ ํ์ผ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ๋ฆฌ๋ ๋ก๊ทธ๋ผ๊ณ ํฉ๋๋ค.
- ๋ฆฌ๋ ๋ก๊ทธ ๋๋ถ์ DBMS ๋ฐ์ดํฐ๋ ๋ฒํผ๋ง์ ํตํด ํ๊บผ๋ฒ์ ๋์คํฌ์ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ์ฒ๋ฆฌํ ์ ์๊ณ ๊ทธ๋ก ์ธํด ์๋นํ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๊ฒ ๋์ต๋๋ค.
- ํ์ง๋ง ์ฌ์ฉ๋(ํนํ ๋ณ๊ฒฝ ์์ )์ด ๋งค์ฐ ๋ง์ DBMS ์๋ฒ์ ๊ฒฝ์ฐ์๋ ์ด ๋ฆฌ๋ ๋ก๊ทธ์ ๊ธฐ๋ก ์์ ์ด ํฐ ๋ฌธ์ ๊ฐ ๋๋๋ฐ, ์ด๋ฌํ ๋ถ๋ถ์ ๋ณด์ํ๊ธฐ ์ํด ACID ์์ฑ์ ๋ณด์ฅํ๋ ์์ค์์ ๋ฒํผ๋งํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฆฌ๋ ๋ก๊ทธ ๋ฒํผ๋ง์ ์ฌ์ฉ๋๋ ๊ณต๊ฐ์ด ๋ก๊ทธ ๋ฒํผ๋ผ ํฉ๋๋ค.
6.6 MVCC(Multi Version Concirrency Control)
์ผ๋ฐ์ ์ผ๋ก ๋ ์ฝ๋ ๋ ๋ฒจ์ ํธ๋์ญ์
์ ์ง์ํ๋ DBMS๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ฉฐ, MVCC์ ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ ์ ๊ธ์ ์ฌ์ฉํ์ง
์๋ ์ผ๊ด๋ ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํ๋๋ฐ ์์ต๋๋ค. InnoDB๋ ์ธ๋ ๋ก๊ทธ๋ฅผ ์ด์ฉํด ์ด ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํน์ ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ 1๋ฒ ์ฌ์ฉ์๊ฐ 'A' ๋ด์ฉ์์ 'B' ๋ด์ฉ์ผ๋ก UPDATE ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
- InnoDB ๋ฒํผ ํ : ์์ ๋ 'B' ๋ด์ฉ์ด ๋ฐ์(๋ ์ฝ๋ ์ ์ฒด)
- Undo ๋ก๊ทธ : ์์ ์ ์ 'A' ๋ด์ฉ์ด ๋ฐ์(PK, ๋ฉํ์ ๋ณด ๋ฐ ์์ ๋ ์นผ๋ผ๋ง ๋ฐฑ์ )
- ์ด ๋ ์ปค๋ฐ์ด๋ ๋กค๋ฐฑ์ด ์์ง ์ผ์ด๋์ง ์๋ ์ํฉ์์, 2๋ฒ ์ฌ์ฉ์๊ฐ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ ค๊ณ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ด ์ง๋ฌธ์ ๋ต์ ๊ฒฉ๋ฆฌ ์์ค์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ, ์ด๋ฌํ ๊ณผ์ ์ DBMS ์์๋ MVCC ๋ผ๊ณ ํํํ๋ค.
- READ_UNCOMMITTED : InnoDB ๋ฒํผ ํ์ด๋ ๋ฐ์ดํฐ ํ์ผ๋ก๋ถํฐ ๋ณ๊ฒฝ๋ 'B' ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ๋ฐํํฉ๋๋ค.
- READ_COMMITTED ์ด์ : ์์ง ์ปค๋ฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ธ๋ ์์ญ์ 'A' ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
6.7 ์ ๊ธ ์๋ ์ผ๊ด๋ ์ผ๊ธฐ(Non-locking consistent read)
- InnoDB์์ ๊ฒฉ๋ฆฌ ์์ค์ด SERIALIZABLE์ด ์๋ READ-UNCOMMITTED์ด์์ ์์ค์ธ ๊ฒฝ์ฐ, INSERT์ ์ฐ๊ฒฐ๋์ง ์์ ์์ํ ์ฝ๊ธฐ(SELECT) ์์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ๋ณ๊ฒฝ ์์ ๊ณผ ๊ด๊ณ์์ด ํญ์ ์ ๊ธ์ ๋๊ธฐํ์ง ์๊ณ ๋ฐ๋ก ์คํ๋ฉ๋๋ค.
- ์ฝ์ผ๋ ค๋ ํ์ด ์ค์ ๋ก lock์ด ๊ฑธ๋ ค์์ด๋ ์ฝ์ ๋๋ undo์์ญ์์ ์ฝ๊ธฐ ๋๋ฌธ์ lock์ด ๊ฑธ๋ฆฌ๋ ๋ง๋ ์๊ด์์ด ์ด์ ๋ฒ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
์ฐธ๊ณ
- [book] ์ด์ฑ์ฑ. ใ๊ฐ๋ฐ์์ DBA๋ฅผ ์ํ Real MySQLใ. ์ํค๋ถ์ค. 2012.
- [Blog] Real MySQL ์ ๋ฆฌ, 3์ฅ MySQL ์ํคํ ์ฒ: https://junghyungil.tistory.com/135
- [Blog] MySQL ์ํคํ ์ณ: https://enterone.tistory.com/223
'Study: ComputerScience(CS) > CS: Database(SQL)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] RDB ํธ๋์ญ์ (feat. ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค) (0) | 2022.11.08 |
---|---|
[DB] DB ๋ฐ์ดํฐ dumpํ๋ ๋ฐฉ๋ฒ : MySQL ๋ฐ์ดํฐ๋ฅผ export, import ํ์! (feat. mysqldump) (0) | 2022.09.09 |
[DB] ์ปค๋ฅ์ ํ(DBCP)์ด๋? DB Connection Pool (0) | 2022.08.22 |
[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฉ์ด์ ๋ฆฌ (0) | 2022.04.16 |