Real MySQL 4.1 ~ 4.2 ํ์ต ํ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
4.1 MySQL ์์ง ์ํคํ ์ฒ
4.1.1 MySQL ์ ์ ์ฒด ๊ตฌ์กฐ
- MySQL ์ MySQL ์์ง๊ณผ ์คํ ๋ฆฌ์ง ์์ง์ผ๋ก ๊ตฌ๋ถํ๋ค.
- MySQL ์์ง - ์ปค๋ฅ์
ํธ๋ค๋ฌ, SQL ํ์, ์ ์ฒ๋ฆฌ๊ธฐ, ์ตํฐ๋ง์ด์ ๊ฐ ์ค์ฌ์ ์ด๋ฃฌ๋ค.
- ์ปค๋ฅ์
ํธ๋ค๋ฌ
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ์ ์ ์ ๋ฐ ์ฟผ๋ฆฌ ์์ฒญ์ ์ฒ๋ฆฌ, ์คํ ๋ฆฌ์ง ์์ง์๊ฒ ์ฐ๊ธฐ ๋๋ ์ฝ๊ธฐ๋ฅผ ์์ฒญ
- 'SHOW GLOBAL STATUS LIKE Handler%'; ๋ช ๋ น์ผ๋ก ๋ฐ์ดํฐ ์์ ์ ๊ฐ์๋ฅผ ์ ์ ์๋ค.
- SQLํ์ - SQL๋ฌธ์ฅ์ ์ชผ๊ฐ์ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ์ฒดํฌํ๊ณ Parse Tree ๋ฅผ ๋ง๋ฌ
- ์ ์ฒ๋ฆฌ๊ธฐ - Parse Tree ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก SQL ๋ฌธ์ฅ๊ตฌ์กฐ์ ๋ฌธ์ ๊ฐ ์๋์ง ์ฒดํฌ
- ์ตํฐ๋ง์ด์ - ์ฟผ๋ฆฌ์ ์ต์ ํ๋ ์คํ์ ๊ณํ
- ์ปค๋ฅ์
ํธ๋ค๋ฌ
- ์คํ ๋ฆฌ์ง ์์ง - ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๊ฑฐ๋ ์ฝ์ด์จ๋ค.
- MySQL ์๋ฒ์์ MySQL ์์ง์ 1๊ฐ์ง๋ง, ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋์์ ์ฌ์ฉํ ์ ์๋ค.
- CREATE TABLE table_name (column_name, type) ENGINE=INNODB;
- ์คํ ๋ฆฌ์ง ์์ง์ ๋์คํฌI/O๋ฅผ ์ค์ด๊ธฐ ์ํด ์บ์ฑ ๊ธฐ๋ฅ์ ๋ด์ฅํ๊ณ ์๋ค.
- MyISAM ์คํ ๋ฆฌ์ง ์์ง - ํค ์บ์, InnoDB ์คํ ๋ฆฌ์ง ์์ง - InnoDB ๋ฒํผ ํ ๊ธฐ๋ฅ์ ๋ด์ฅํ๊ณ ์๋ค.
4.1.2 MySQL ์ค๋ ๋ฉ ๊ตฌ์กฐ
MySQL ์๋ฒ๋ ํ๋ก์ธ์ค ๊ธฐ๋ฐ์ด ์๋ ์ค๋ ๋ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ค.
ํฌ๊ฒ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ๊ตฌ๋ถํ๋ค.
- ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋
- ์ต์ MySQL์๋ฒ์ ์ ์๋ ํด๋ผ์ด์ธํธ ์ ๋งํผ ์กด์ฌ
- ํด๋ผ์ด์ธํธ๊ฐ ์ปค๋ฅ์
์ ์ข
๋ฃํ๋ฉด ํด๋น ์ปค๋ฅ์
์ ๋ด๋นํ๋ ์ค๋ ๋๋ ์ค๋ ๋ ์บ์๋ก ๋๋์๊ฐ๋ค.
- ์ค๋ ๋ ์บ์์ ์ ์งํ ์ ์๋ ์ต๋ ์ค๋ ๋ ๊ฐ์๋ thread_cache_size ์์คํ ๋ณ์๋ก ์ค์ .
- ๋ง์ฝ, ์ด ๊ฐ์ ๋์ด๊ฐ๋ฉด ์ปค๋ฅ์ ์ด ์ข ๋ฃ๋ ์ค๋ ๋๋ฅผ ์บ์์ ๋ฃ์ง์๊ณ ์ข ๋ฃ์ํจ๋ค.
- ๋ฐ์ดํฐ๋ฅผ MySQL์ ๋ฒํผ๋ ์บ์์์ ๊ฐ์ ธ์ค๋ฉฐ, ์ด ๊ณณ์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์จ๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋
- ์ฃผ๋ก ๋ฒํผ๋ ์บ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ฐ๋ ์์
์ ๋ด๋นํ๋ค.
- ๋ก๊ทธ๋ฅผ ๋์คํฌ๋ก ์ฐ๊ธฐ, InnoDB ๋ฒํผ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ฐ๊ธฐ, ์ ๊ธ/๋ฐ๋๋ฝ์ ๋ชจ๋ํฐ๋งํ๊ธฐ
* ์คํ ๋ฆฌ์ง ์์ง ์ข ๋ฅ์ ๋ฐ๋ฅธ ๋ฒํผ๋ง ๊ธฐ๋ฅ
InnoDB - ๋ฒํผ๋ง ๊ธฐ๋ฅ ํ์ฌ๋์ ์ฐ๊ธฐ ์์ ์ ์ผ๊ด ์ฒ๋ฆฌํจ -> ๋์คํฌ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์
MyISAM - ๋ฒํผ๋ง ๊ธฐ๋ฅ์ด ์์ด์ ์ฐ๊ธฐ ์์ ๊ฑด๋น ๋์คํฌ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
4.1.3 ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ๊ตฌ์กฐ
MySQL์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ๊ตฌ๋ถ
- ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ์ด ์์ญ์ ํด๋นํ๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ OS๋ก๋ถํฐ ํ ๋น๋๋ค.
- ์์ฑ๋ ๊ธ๋ก๋ฒ ์์ญ์ด N๊ฐ ์ด๋๋ผ๋ ๋ชจ๋ ์ค๋ ๋์ ์ํด ๊ณต์ ๋๋ค.
- ํ
์ด๋ธ ์บ์, InnoDB ๋ฒํผ ํ, InnoDB ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค, InnoDB ๋ฆฌ๋ ๋ก๊ทธ ๋ฒํผ๊ฐ ์๋ค.
- ํ ์ด๋ธ ์บ์ : ์์ฃผ ์ฌ์ฉํ๋ ํ ์ด๋ธ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑ
- InnoDB ๋ฒํผ ํ : ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑ
- InnoDB ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค : ์์ฃผ ์กฐํ๋๋ ๋ฐ์ดํฐ์ ๋ํด ํด์ ์ธ๋ฑ์ค ์์ฑํ์ฌ ์กฐํ ์ด์ ์ ๊ณต
- InnoDB ๋ฆฌ๋ ๋ก๊ทธ ๋ฒํผ : ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ ์ฅํ ํ, ๋ฆฌ๋ ๋ก๊ทธ ํ์ผ์ ๊ธฐ๋กํ๋ ๋ฒํผ
- ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ํด๋ผ์ด์ธํธ ์ค๋ ๋๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ํด๋ผ์ด์ธํธ ์ค๋ ๋๋ณ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น๋๋ฉฐ ์ ๋ ๊ณต์ ๋์ง ์๋ ์์ญ
- ์ฟผ๋ฆฌ ์ฉ๋๋ณ๋ก ํ์ํ ๋๋ง ๊ณต๊ฐ์ ํ ๋น ๋ฐ๋๋ค.
- ์ปค๋ฅ์ ๋ฒํผ, ์ ๋ ฌ ๋ฒํผ
4.1.6 ์ฟผ๋ฆฌ ์คํ ๊ตฌ์กฐ
ํ๋์ ์ฟผ๋ฆฌ ์์ ์ ์ฌ๋ฌ ํ์ ์์ ์ผ๋ก ๋๋๋ค.
๊ฐ ํ์ ์์ ์ด MySQL ์์ง ์์ญ์์ ์ฒ๋ฆฌ๋๋์ง, ์คํ ๋ฆฌ์ง ์์ง์์ ์ฒ๋ฆฌ๋๋์ง ๊ตฌ๋ถํ ์ค ์์์ผ ํ๋ค.
- MySQL ์์ง ์์ญ
- ์ฟผ๋ฆฌ ํ์
- ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ํ ํฐ(๊ฐ์ฅ ์์ ๋จ์)๋ก ๋ถ๋ฆฌํด ํธ๋ฆฌ ํํ์ ๊ตฌ์กฐ๋ก ๋ง๋ ๋ค.
- ๊ธฐ๋ณธ ๋ฌธ๋ฒ ์ค๋ฅ๋ ์ด ๊ณผ์ ์์ ๋ฐ๊ฒฌ๋๋ฉฐ, ์ฌ์ฉ์์๊ฒ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๋ฌ
- ์ ์ฒ๋ฆฌ๊ธฐ
- ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๋ธ/์ปฌ๋ผ ์ด๋ฆ, ํจ์์ ๊ฐ์ ์กด์ฌ ์ฌ๋ถ, ์ ๊ทผ ๊ถํ์ ํ์ธํ๋ค.
- ์ตํฐ๋ง์ด์
- ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ๋ฐฉ๋ฒ์ ๊ฒฐ์
- ์คํ ์์ง(์ฟผ๋ฆฌ ์คํ๊ธฐ)
- ์คํ ์์ง์ ๊ฐ ํธ๋ค๋ฌ(์คํ ๋ฆฌ์ง ์์ง)์๊ฒ ์์ฒญํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฑฐ๋, ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ํธ๋ค๋ฌ์๊ฒ ์ค๋ค.
- Order By, Group By ๋ฑ ๋ณต์กํ ์ฒ๋ฆฌ๋ MySQL ์์ง์ ์ฒ๋ฆฌ ์์ญ์ธ ์ด๊ณณ '์ฟผ๋ฆฌ ์คํ๊ธฐ' ์์ ์ฒ๋ฆฌ๋๋ค.
- ์คํ ๋ฆฌ์ง ์์ง(ํธ๋ค๋ฌ)
- MySQL ์คํ ์์ง์ ์์ฒญ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ์ ์ฅํ๊ฑฐ๋ ์ฝ์ด ์ค๋ ์ญํ ์ ํ๋ค.
4.1.8 ์ฟผ๋ฆฌ ์บ์
์ฟผ๋ฆฌ ์บ์ - SQL ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ํ์ฌ ์ฝ๊ธฐ ์ฑ๋ฅ์ด ์ข์๋ค.
ํ์ง๋ง, ๋์ ์ฒ๋ฆฌ์์ ์ฑ๋ฅ ์ ํ์ ๋ง์ ๋ฒ๊ทธ์ ์์ธ์ผ๋ก 8.0 ์ดํ๋ก๋ ๊ด๋ จ ๊ธฐ๋ฅ ๋ฐ ๋ณ์๊ฐ ์์ ํ ์ ๊ฑฐ๋์๋ค.
4.2 InnoDB ์คํ ๋ฆฌ์ง ์์ง ์ํคํ ์ฒ
์คํ ๋ฆฌ์ง ์์ง ์ค ๊ฑฐ์ ์ ์ผํ๊ฒ ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ์ ๊ธ์ ์ ๊ณตํ๋ค -> ๋์์ฑ ์ฒ๋ฆฌ์ ๋ฐ์ด๋๋ฉฐ ์์ ์
4.2.1 ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ์ํ ํด๋ฌ์คํฐ๋ง
- InnoDB์ ๋ชจ๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋ฌ์คํฐ๋ง๋์ด ์ ์ฅ๋๋ค.
- ํ ์ด๋ธ์ ๋ ์ฝ๋๋ค์ ํ๋ผ์ด๋จธ๋ฆฌ ํค ๊ฐ์ ์์๋๋ก ๋์คํฌ์ ์ ์ฅ๋๋ค.
- ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ ๋ ์ฝ๋์ ์ฃผ์ ๋์ ํ๋ผ์ด๋จธ๋ฆฌ ํค์ ๊ฐ์ ๋ ผ๋ฆฌ์ ์ธ ์ฃผ์๋ก ์ฌ์ฉ
- ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ฅผ ์ด์ฉํ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ์๋นํ ๋นจ๋ฆฌ ์ฒ๋ฆฌ๋ ์ ์๋ค.
- MyISAM ์คํ ๋ฆฌ์ง ์์ง์ ํด๋ฌ์คํฐ๋ง ํค๋ฅผ ์ง์ํ์ง ์๊ณ , PK๋ฅผ ํฌํจํ ๋ชจ๋ ์ธ๋ฑ์ค๋ ๋ฌผ๋ฆฌ์ ์ธ ๋ ์ฝ๋์ ์ฃผ์ ๊ฐ์ ๊ฐ๋๋ค.
4.2.2 ์ธ๋ ํค ์ง์
InnoDB๋ ์ง์ํ์ง๋ง, MyISAM ๊ณผ MEMORY ์์๋ ์ฌ์ฉํ ์ ์๋ค.
InnoDB์์์ ์ธ๋ํค ํน์ง
- ๋ถ๋ชจ ํ ์ด๋ธ๊ณผ ์์ ํ ์ด๋ธ ๋ชจ๋ ํด๋น ์นผ๋ผ์ ์ธ๋ฑ์ค ์์ฑ์ด ํ์
- ๋ณ๊ฒฝ ์์๋ ๋ฐ๋์ ๋ถ๋ชจ/์์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ์ฒดํฌํ๊ธฐ ๋๋ฌธ์ ์ ๊ธ์ด ์ฌ๋ฌ ํ
์ด๋ธ๋ก ์ ํ๋๋ค.
- ์ด๋ก ์ธํด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๋๊ฐ ๋ง์ผ๋ฏ๋ก ์ธ๋ํค ์กด์ฌ์ ์ฃผ์ํ๋ค.
InnoDB์์์ ์ธ๋ํค ์ฒดํฌ ํด์ ( ์๋น์ค์ ๊ธด๊ธ ์กฐ์น๋ฅผ ์ํด ์ธ๋ํค ์ ์ฝ์กฐ๊ฑด์ ๊บผ์ผํ ๋ )
- SET SESSION foreign_key_checks=OFF ๋ฅผ ํตํด ํ์ฌ ์ธ์
์ ๋ํด ์์คํ
๋ณ์๋ฅผ OFF๋ก ์ค์ ํ๋ฉด ์ธ๋ํค ๊ด๊ณ์ ๋ํ ์ฒดํฌ ์์
์ ์ผ์์ ์ผ๋ก ๋ฉ์ถ ์ ์๋ค.
- ๋ง์ฝ, SESSION ์ ๋นผ๋จน๋๋ค๋ฉด GLOBAL ๋ก ์ ์ฉํ๋ค๋ ์๋ฏธ๋ก ๋ฐ์๋ค์ฌ MySQL์๋ฒ๋ ๋ชจ๋ ํ ์ด๋ธ์ ์ธ๋ํค ์ฒดํฌ๋ฅผ ๋๊ฒ ๋๋ ์ฃผ์ํ์.
4.2.3 MVCC (Multi Version Concurrency Control)
- ๊ฐ๋
- ์ ๊ธ์ ์ฌ์ฉํ์ง ์๋ ์ผ๊ด๋ ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํจ
- InnoDB ๋ ์ธ๋ ๋ก๊ทธ(Undo log)๋ก ๊ตฌํํ๋ค.
- ํ๋์ ๋ ์ฝ๋์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ๋ฒ์ ์ด ๋์์ ๊ด๋ฆฌ๋๋ค๋ ์๋ฏธ
- ์์
id = 1 ์ด๊ณ , name = '๊ทธ๋ก๋ฐ' ์ธ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.
์ด ๋ฐ์ดํฐ์ ๋ํด "UPDATE table_name SET name='์๋ ์ค' WHERE id=1;" ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ๊ฑธ ๊ฐ์ ํฉ๋๋ค.
UPDATE ์ฟผ๋ฆฌ๊ฐ ์คํ๋ ๋, MVCC๋ฅผ ํตํด ์ผ๊ด๋ ์ฝ๊ธฐ๋ฅผ ๋ณด์ฅํ๋ ๊ณผ์
- ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด, id = 1 ์ด๊ณ , name = '๊ทธ๋ก๋ฐ' ์ InnoDB ๋ฒํผ ํ์ ์ ์ฌํ๋ค.
- ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด, id = 1 ์ด๊ณ , name = '๊ทธ๋ก๋ฐ' ์ ์ธ๋ ๋ก๊ทธ์ ๋ณต์ฌํ๊ณ , id = 1 ์ด๊ณ , name='์๋ ์ค' ๋ฅผ InnoDB ๋ฒํผ ํ์ ์ ์ฌํ๋ค.
- ๋ง์ฝ, ๊ฒฉ๋ฆฌ ์์ค์ด READ_UNCOMMITTED ๋ผ๋ฉด ๋ณ๊ฒฝํ๋ ค๋ id = 1 ์ด๊ณ , name='์๋ ์ค' ๋ฅผ ๋ฒํผ ํ์์ ์ฝ์ด ๋ฐํํ๋ค.
- ๋ง์ฝ, ๊ทธ ์ด์์ ๊ฒฉ๋ฆฌ ์์ค์ด๋ผ๋ฉด ๊ธฐ์กด ๊ฐ์ธ id = 1 ์ด๊ณ , name = '๊ทธ๋ก๋ฐ' ์ ๋ฐํํ๋ค.
- ๊ฒฐ๋ก
์ฆ, ํ๋์ ๋ ์ฝ๋( id = 1 ์ด๊ณ , name = '๊ทธ๋ก๋ฐ' ) ์ ๋ํด 2๊ฐ์ ๋ฒ์ ์ด ์ ์ง๋๊ณ , ํ์์ ๋ฐ๋ผ ์ด๋ ๋ฐ์ดํฐ๊ฐ ์ฝ์ด ์ง๋์ง ๊ฒฉ๋ฆฌ ์์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๊ตฌ์กฐ์ด๋ค.
๋ง์ฝ, ํธ๋์ญ์ ์ด ๊ธธ์ด์ง๋ฉด ์ธ๋๋ก๊ทธ๊ฐ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์ง ๋ชปํ๊ณ ๋ฌดํํ ๋ง์์ง ์ ์๋ค.
- ์ด๋ MySQL ์๋ฒ๊ฐ ๋๋ ค์ง๊ฑฐ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
์ธ๋ ์์ญ์ ๋ฐ์ดํฐ๋ ์ด ์์ญ์ ํ์๋ก ํ๋ ํธ๋์ญ์ ์ด ์์ ๋ ๋น๋ก์ ์ญ์ ๋๋ค.
- ๊ทธ๋ฌ๋ ํธ๋์ญ์ ์ด ์์๋๋ค๋ฉด ๊ฐ๋ฅํ ๋นจ๋ฆฌ ๋กค๋ฐฑ์ด๋ ์ปค๋ฐ์ ํตํด ํธ๋์ญ์ ์ ์๋ฃํ์
4.2.5 ์๋ ๋ฐ๋๋ฝ ๊ฐ์ง
InnoDB ๋ ๋ฐ๋๋ฝ ๊ฐ์ง ์ค๋ ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋ฐ๋๋ฝ ๋ฐ์ ์ 2๊ฐ์ ํธ๋์ญ์ ์ค ์ธ๋ ๋ก๊ทธ ์์ด ์ ์ ํธ๋์ญ์ ์ ๊ฐ์ ์ข ๋ฃํ๋ค, ์ด๋ ๋กค๋ฐฑ์ ํด๋ ์ธ๋ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ ๋ด์ฉ์ด ์ ๊ธฐ ๋๋ฌธ์ด๋ค.
innodb_table_locks
- ํ ์ด๋ธ ์ ๊ธ์ ํ์ฑํ ํ๋ ์์คํ ๋ณ์๋ก ํ ์ด๋ธ ๋จ์ ๋ฐ๋๋ฝ์ ๊ฐ์งํ๋ค.
innodb_deadlock_detect
- ๋ฐ๋๋ฝ ๊ฐ์ง ์ค๋ ๋์ธ ์์คํ ๋ณ์์ด๋ค.
- ๋์ ์ฒ๋ฆฌ ์ค๋ ๋๊ฐ ๋งค์ฐ ๋ง๊ฑฐ๋ ๊ฐ ํธ๋์ญ์ ์ด ๊ฐ์ง ์ ๊ธ์ ๊ฐ์๊ฐ ๋ง์์ง๋ฉด ๋ฐ๋๋ฝ ๊ฐ์ง ์ค๋ ๋๋ ๋๋ ค์ง๋ค.
- ๋ฐ๋๋ฝ ๊ฐ์ง ์ค๋ ๋๊ฐ ๋๋ ค์ง๋ฉด ์๋น์ค ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌ ์ค์ธ ์ค๋ ๋๊ฐ ๋๋ ค์ง๋ค.
innodb_lock_wait_timeout
- ๋ฐ๋๋ฝ ๊ฐ์ง ์ค๋ ๋๊ฐ ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์ณ์ OFFํ์ ๋, ํด๋น ์์คํ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋๋ฝ ์ํฉ์์ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์์ฒญ์ด ์คํจํ๋๋ก ํ๋ค.
- ์ด๋จ์ ์ค์ ๊ฐ๋ฅ์ด๋ฉฐ, ๊ธฐ๋ณธ๊ฐ 50์ด ๋ณด๋ค ํจ์ฌ ๋ฎ์ ์๊ฐ์ผ๋ก ๋ณ๊ฒฝํด์ ์ฌ์ฉํ์
์ด๋ฌํ ๊ธฐ๋ฅ์ Google ์ด ์ค๋ผํด์ ์์ฒญํด์ ์๊ธฐ๊ฒ ๋์๋ค. Google ์ ๋์ ์ฒ๋ฆฌ ์ค๋ ๋๊ฐ ๋งค์ฐ ๋ง๊ณ , ํธ๋์ญ์ ์ด ๊ฐ์ง ์ ๊ธ์ ๊ฐ์๊ฐ ๋ง์์ ๋ฐ๋๋ฝ ๊ฐ์ง ์ค๋ ๋ ๋๋ฌธ์ ์ฑ๋ฅ์ด ๋ฎ์์ก์๋ค.
์ฆ, PK ๋๋ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋งค์ฐ ๋์ ๋์์ฑ ์ฒ๋ฆฌ๋ฅผ ์๊ตฌํ๋ ์๋น์ค๊ฐ ์๋ค๋ฉด innodb_deadlock_detect ๋ฅผ ๋นํ์ฑํํด์ ์ฑ๋ฅ ๋น๊ต๋ฅผ ํด๋ณด๋ ๊ฒ๋ ํ ๊ธฐํ๋ผ๊ณ ํ๋ค.
4.2.7 InnoDB ๋ฒํผ ํ
๋ฒํผ ํ์ ํฌ๊ธฐ ์ค์
- ์ฐ๊ธฐ์์ ์ ์ง์ฐ์์ผ ์ผ๊ด ์์ ์ผ๋ก ์ฒ๋ฆฌํด์ ๋์คํฌ์ ๋๋คI/O ๋ฅผ ์ค์ธ๋ค.
- ์ด์์ฒด์ ์ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ๊ฐ 8GB ๋ฏธ๋ง์ด๋ผ๋ฉด 50% ๋ง ๋ฒํผํ ๋ก ์ค์ ํ๊ณ ๋๋จธ์ง๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
- 8GB ์ด์์ธ ๊ฒฝ์ฐ, ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ์ 50% ์์ ์์ํด์ ์กฐ๊ธ์ฉ ์ฌ๋ ค๊ฐ๋ฉฐ ์ต์ ์ ์ ์ฐพ๋๋ค.
- innodb_buffer_pool_size ์์คํ
๋ณ์๋ก ํฌ๊ธฐ๋ฅผ ์ค์ ํ ์ ์๋ค.
- ํ ์ฌ์ด์ฆ๋ฅผ ํฌ๊ฒ ํ๋ ๊ฒ์ ์์คํ ์ํฅ๋๊ฐ ํฌ์ง ์์ง๋ง, ํ ์ฌ์ด์ฆ๋ฅผ ์ค์ด๋ ๊ฒ์ ์๋น์ค ์ํฅ์ด ๋งค์ฐ ํฐ ์์ ์ด๋ ํ์ง ์๋๋ก ์ฃผ์
4.2.9 ์ธ๋ ๋ก๊ทธ
- ํธ๋์ญ์
๋กค๋ฐฑ์ ์ํด ์ฌ์ฉ๋๋ ์์ญ์ด๋ค.
- ๋ง์ฝ, ํธ๋์ญ์ ์ด ๊ธธ์ด์ง๋ฉด ์ธ๋๋ก๊ทธ๊ฐ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์ง ๋ชปํ๊ณ ๋ฌดํํ ๋ง์์ง ์ ์๋ค.
- ์ด๋ MySQL ์๋ฒ๊ฐ ๋๋ ค์ง๊ฑฐ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
- ์ธ๋ ์์ญ์ ๋ฐ์ดํฐ๋ ์ด ์์ญ์ ํ์๋ก ํ๋ ํธ๋์ญ์
์ด ์์ ๋ ๋น๋ก์ ์ญ์ ๋๋ค.
- ๊ทธ๋ฌ๋ ํธ๋์ญ์ ์ด ์์๋๋ค๋ฉด ๊ฐ๋ฅํ ๋นจ๋ฆฌ ๋กค๋ฐฑ์ด๋ ์ปค๋ฐ์ ํตํด ํธ๋์ญ์ ์ ์๋ฃํ์
- MySQL 8.0 ๋ฒ์ ์์ ์๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ์ธ๋ ๋ก๊ทธ ๋ ์ฝ๋ ๊ฑด์๋ฅผ ํ์ธํ ์ ์๋ค.
SELECT count
FROM information_schema.innodb_metrics
WHERE SUBSYSTEM='transaction' AND NAME='trx_rseg_history_len';
4.2.10 ์ฒด์ธ์ง ๋ฒํผ
INSERT, UPDATE ๋ ๋๋ ์ธ๋ฑ์ค๋ ์ ๋ฐ์ดํธ ํด์ค์ผ ํ๋ค.
์ด ์์ ์ ๋์คํฌ๋ฅผ ๋๋คํ๊ฒ ์ฝ๊ฒ ํ์ฌ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๊ฐ ๋ง๋ค๋ฉด ์ด๋ ๋ง์ ์์์ ์๋ชจํ๊ฒ ๋๋ค.
๊ทธ๋์, ๋์คํฌ์์ ์ฝ์ด์์ ๋์คํฌ์ ์ ๋ฐ์ดํธ ํด์ผํ๋ค๋ฉด ์ฆ์ ๋ฐ์ํ์ง ์๊ณ , ์์ ๊ณต๊ฐ์ ์ ์ฅํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฐ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๋ฐ, ์ด ๋ ์ฌ์ฉํ๋ ์์ ๊ณต๊ฐ์ ์ฒด์ธ์ง ๋ฒํผ๋ผ๊ณ ํ๋ค.
- ํน์ง
- ๊ธฐ๋ณธ์ ์ผ๋ก InnoDB ๋ฒํผ ํ์ ๋ฉ๋ชจ๋ฆฌ 25% ์ ๋๊น์ง ์ฌ์ฉํ๋ค.(์ค์ ์ผ๋ก 50%๊น์ง ๊ฐ๋ฅํ๋ค)
- ์ฝ๊ธฐ ์์ ์ด ๋น๋ฒํ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ ํ์๊ฐ ์๋ค.
- ์ ๋ํฌ ์ธ๋ฑ์ค๋ ์ฒด์ธ์ง ๋ฒํผ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.(์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค์๋ง ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค)
- ์ค๋ณตํ์ธ์ ๋์คํฌ์์ ์ฆ์ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ
4.2.11 ๋ฆฌ๋ ๋ก๊ทธ
- MySQL ์๋ฒ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ ๋ ๋ฐ์ดํฐ ํ์ผ์ ๊ธฐ๋ก๋์ง ๋ชปํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ง ์๊ฒ ํด์ฃผ๋ ์์ ์ฅ์น
- ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ผ๋ ๋ฐ์ดํฐ๋ ์ฆ์ ๋์คํฌ๋ก ๋๊ธฐํ ๋์ง ์์ง๋ง, ๋ฆฌ๋ ๋ก๊ทธ๋ ํญ์ ๋์คํฌ๋ก ๊ธฐ๋ก๋๋ค.
- MySQL 8.0 ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๊ฑฐ๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ ์ฌํ๋ ๊ฒฝ์ฐ ๋ฆฌ๋๋ก๊ทธ๋ฅผ ๋นํ์ฑํ ํด์ ๋ฐ์ดํฐ์ ์ ์ฌ ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
ALTER INSTANCE DISABLE INNODB REDO_LOG; // ๋ฆฌ๋๋ก๊ทธ ๋นํ์ฑํ
LOAD DATA ... // ๋๋ ๋ฐ์ดํฐ ์ ์ฌ
ALTER INSTANCE ENABLE INNODB REDO_LOG; // ๋ฆฌ๋๋ก๊ทธ ํ์ฑํ
- SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled'; ๋ฅผ ํตํด ๋ฆฌ๋๋ก๊ทธ ํ์ฑํ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
4.2.12 ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค
๊ฐ๋
- ์ฌ์ฉ์๊ฐ ์๋์ผ๋ก ์์ฑํ๋ ์ธ๋ฑ์ค๊ฐ ์๋ InnoDB ์์ ์ฌ์ฉ์๊ฐ ์์ฃผ ์์ฒญํ๋ ๋ฐ์ดํฐ์ ๋ํด ์๋์ผ๋ก ์์ฑํ๋ ์ธ๋ฑ์ค
- innodb_adaptive_hash_index ๋ก ํ์ฑํ/๋นํ์ฑํ ํ ์ ์๋ค.
- B-Tree ์ ๊ฒ์์ธ ๋ฃจํธ๋
ธ๋๋ถํฐ ๋ฆฌํ๋
ธ๋๊น์ง ๊ฒ์ ์๊ฐ์ ์ค์ฌ์ฃผ๊ธฐ ์ํด ๋์
๋ ๊ธฐ๋ฅ
- ์ด๋ป๊ฒ? ํด์ ์ธ๋ฑ์ค์ Key๋ 'B-Tree ์ธ๋ฑ์ค์ ๊ณ ์ ๋ฒํธ', Value ๋ 'B-Tree ์ ์ค์ ํค ๊ฐ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์' ์ ์กฐํฉ์ด๋ค.
์ฑ๋ฅ ํฅ์์ ๋์๋๋ ๊ฒฝ์ฐ
- ๋์คํฌ์ ๋ฐ์ดํฐ๊ฐ innoDB ๋ฒํผ ํ ํฌ๊ธฐ์ ๋น์ทํ ๊ฒฝ์ฐ(๋์คํฌ ์ฝ๊ธฐ๊ฐ ๋ง์ง ์์ ๊ฒฝ์ฐ)
- ๋๋ฑ ์กฐ๊ฑด ๊ฒ์( = ๋น๊ต์ IN ์ฐ์ฐ์)์ด ๋ง์ ๊ฒฝ์ฐ
- ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ดํฐ ์ค์์ ์ผ๋ถ ๋ฐ์ดํฐ์๋ง ์ง์ค๋๋ ๊ฒฝ์ฐ
์ฑ๋ฅ ํฅ์์ ๋์๋์ง ์๋ ๊ฒฝ์ฐ
- ๋์คํฌ ์ฝ๊ธฐ๊ฐ ๋ง์ ๊ฒฝ์ฐ
- ํน์ ํจํด์ ์ฟผ๋ฆฌ๊ฐ ๋ง์ ๊ฒฝ์ฐ(join ์ด๋ LIKE ํจํด)
- ๋งค์ฐ ํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ํญ ๋๊ฒ ์ฝ๋ ๊ฒฝ์ฐ
ํน์ง
- ํด์ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ
- ํด์ ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ(๋ฒํผ ํ)๋ด์์ ์ ๊ทผํ๋ ๊ฒ์ ๋ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋์คํฌ์์ ์ฝ์ด์ค๋ ๊ฒฝ์ฐ๊ฐ ๋น๋ฒํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์์๋ ์๋ฌด๋ฐ ๋์์ด ๋์ง ์๋๋ค.
- ํด์ ์ธ๋ฑ์ค ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉ ํ๊ธฐ์ ์ธ๋ฑ์ค ํฌ๊ธฐ๊ฐ ํฐ ๊ฒฝ์ฐ ํด์ ์ธ๋ฑ์ค๋ ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๊ฒ ๋๋ค.
- ํด์ ์ธ๋ฑ์ค์ ์๋ ์ธ๋ฑ์ค๋ฅผ ์ญ์ /๋ณ๊ฒฝ ํ ๊ฒฝ์ฐ, ์๋นํ ๋ง์ CPU ์์์ ์๋ชจํ๋ค.
์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค๊ฐ ๋์์ด ๋๋์ง ํ๋จํ ์ ์๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ํด์ ์ธ๋ฑ์ค ํํธ์จ, ํด์ ์ธ๋ฑ์ค๊ฐ ์ฌ์ฉ์ค์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ, ์๋ฒ์ CPU ์ฌ์ฉ๋์ ์ข ํฉํด์ ํ๋จํด์ผ ํ๋ค.
'์คํฐ๋ > Real MySQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MySQL ์ ๋ฐ์ดํฐ ํ์ ์ ๋ฆฌ (15.1 ~ 15.6) (0) | 2024.10.25 |
---|---|
B-Tree ์ธ๋ฑ์ค ์ ๋ฆฌ (8.1 ~ 8.3.5) (2) | 2024.10.07 |