- Mysql Engine, Storage Engine์ผ๋ก ๊ตฌ๋ถ๋๋ค.
- ์ค๋ ๋ฉ๊ตฌ์กฐ๋ foreground, background thread๋ก ๊ตฌ๋ถ๋๋ค.
- foreground thread
- ์ปค๋ฅ์ ์ฐ๊ฒฐ๋ก ํ์ฉ๋๊ฑฐ๋ thread cache์์ญ์ผ๋ก ๋ค์ ๋์๊ฐ๋ ๊ฒฝ์ฐ์ด๋ค.
- ๋ฐ๋ผ์ ์ต์ ํด๋ผ์ด์ธํธ ์๋งํผ ์กด์ฌํ๋ค.
- background thread(InnoDB)
- Insert Buffer๋ณํจ
- ๋ก๊ทธ๋ฅผ ๋์คํฌ๋ก ๊ธฐ๋ก
- InnoDB ๋ฒํผ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ๊ธฐ๋ก
- ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋ก ์ฝ์
- lock or deadlock์ ๋ชจ๋ํฐ๋ง
- foreground thread
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ์ฌ์ฉ ๊ตฌ์กฐ
- ๊ธ๋ก๋ฒ ์์ญ, ์ธ์
์์ญ
- ๊ธ๋ก๋ฒ ์์ญ
- ํ ์ด๋ธ ์บ์
- InnoDB ๋ฒํผ ํ
- InnoDB ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค
- InnoDB redo ๋ก๊ทธ ๋ฒํผ
- ์ธ์
(๋ก์ปฌ) ์์ญ
- ์ ๋ ฌ ๋ฒํผ
- ์กฐ์ธ ๋ฒํผ
- ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ์บ์
- ๋คํธ์ํฌ ๋ฒํผ
- ๊ธ๋ก๋ฒ ์์ญ
- ๊ธ๋ก๋ฒ ์์ญ, ์ธ์
์์ญ
- ํ๋ฌ๊ทธ์ธ ๋ชจ๋ธ
- InnoDB
- validate password
- query_rewrite ๋ฑ๋ฑ ํ์ฉ ๊ฐ๋ฅ
- (SQL Parser <-> SQL Optimizer <-> SQL Executor) | MYSQL Engine <-> (Data read/write) | Storage Engine <-> Disk
- Handler: Mysql Engine์ด Storage Engine์ ๋ณด๋ด๋ ๊ฒ์ ์๋ฏธํจ
- ์ปดํฌ๋ํธ: ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ๋ฅผ ๋์ฒดํ๊ธฐ ์ํ 8.0 ๋ถํฐ ์ ๊ณต๋๋ ๊ธฐ๋ฅ
- ์ฟผ๋ฆฌ ์คํ ๊ตฌ์กฐ
- ์ฟผ๋ฆฌ ํ์: ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ MYSQL์ด ์ธ์ํ ์ ์๋ Token์ผ๋ก ๋ถ๋ฆฌํด ํธ๋ฆฌ ๊ตฌ์กฐํ ํจ
- ์ ์ฒ๋ฆฌ๊ธฐ: ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํ๊ณ ๊ถํ, ๊ฐ์ฒด์ ์กด์ฌ ์ฌ๋ถ ๊ฐ์ ๊ฒ์ ํ์ธ
- ์ตํฐ๋ง์ด์ : ์ ๋ ดํ ๋น์ฉ์ผ๋ก ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง๋ฅผ ์ ํํ๋ ์ญํ
- ์คํ ์์ง: ๋ง๋ค์ด์ง ๊ณํ์ ๊ฐ ํธ๋ค๋ฌ์๊ฒ ์์ฒญํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ํ ๋ค๋ฅธ ํธ๋ค๋ฌ์๊ฒ ์์ฒญํ๋ ์ญํ
- ํธ๋ค๋ฌ(Storage Engine): Disk๋ก ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ฝ์ด์ค๋ ์ญํ
- ์ฟผ๋ฆฌ ์บ์: SQL์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ํ๊ณ ๋์ผ ์ฟผ๋ฆฌ์ด๋ฉด ์ฆ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ. 8.0๋ถํฐ๋ ์ ๊ฑฐ๋จ
- ์ค๋ ๋ ํ: Community edition์ thread pool์ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก, Percona Server์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ดํด๋ณธ๋ค.
- ์ฒ๋ฆฌํ๋ ์ค๋ ๋ ๊ฐ์๋ฅผ ์ค์ฌ์ ํน์ ์ค๋ ๋๋ค์ ์ง์คํ๋๋ก ํ๊ธฐ ์ํจ
- ํ๋ก์ธ์ ์นํ๋(Processor affinity)๋ฅผ ๋์ด๊ณ , Context switch๋ฅผ ์ค์ธ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก CPU ์ฝ์ด ๊ฐ์๋งํผ ์ค๋ ๋๋ฅผ ๋ง๋ ๋ค. thread_pool_size๋ฅผ ํตํด ์กฐ์ ์ด ๊ฐ๋ฅํ๋ค.
- ์ค๋ ๋๊ฐ ๋ชจ๋ ์ฒ๋ฆฌ ์ค์ด๋ฉด worker thread์ถ๊ฐ or ๋๊ธฐ ๋ก ์ ํ ๊ฐ๋ฅํ๋ค.
- Record๊ธฐ๋ฐ์ lock์ ์ ๊ณตํ๋ค.
- PK๊ธฐ์ค์ผ๋ก clustering๋๋ค.
- ์์๋๋ก disk์ ์ ์ฅ๋๋ค๋ ๋ป
- Secondary index๋ PK๊ฐ์ ์ฐธ์กฐํ๋ ๋ฐฉ์
- MyISAM์ PK์ secondary index์ ๋์ผํ๋ค.
- Foreign key์ง์
- ๋ถ๋ชจ ํ ์ด๋ธ, ์์ ํ ์ด๋ธ ๋ชจ๋ ์ธ๋ฑ์ค๊ฐ ํ์ํ๋ค.
- ๋ณ๊ฒฝ ์์๋ ๋ถ๋ชจ ํ ์ด๋ธ์ด๋ ์์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง S-lock์ ํ๋ค.
- Dead lock์ด ๋ฐ์ํ ํ๋ฅ ์ด ๋๋ค.
- ๋ค๋ฅธ ํ์ฌ๋ค์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง?
- MVCC
- Record๋ ๋ฒจ์ ํธ๋์ญ์ ์ ์ง์ํ๋ DBMS๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ
- ์ ๊ธ์ ์ฌ์ฉํ์ง ์๋ ์ผ๊ด๋ ์ฝ๊ธฐ
- Undo ๋ก๊ทธ๋ฅผ ํ์ฉ
- READ_COMMITTED, REPETABLE_READ, SERIALIZABLE์ธ ๊ฒฝ์ฐ InnoDB๋ฒํผ ํ์ด๋ undoํ์ ์๋ ๋ฐ์ดํฐ์ ๋์ผํ ๊ฒ์ ๋ฐํํ๋ค.
- COMMIT -> ์๊ตฌ์ ๋ฐ์ดํฐ๋ก ์ฒ๋ฆฌ
- ๋กค๋ฐฑ -> Undo ์์ญ ๋ฐ์ดํฐ ๋ณต๊ตฌ -> ์ธ๋ ์์ญ ์ด๊ธฐํ
- Non-Locking Consistent Read
- Serializable์ด ์๋ ๊ฒฝ์ฐ Insert์ ์ฐ๊ฒฐ๋์ง ์์ Select๋ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ ๋๊ธฐ๋ฅผ ๋ฐ์์ํค์ง ์๋๋ค.
- ์ด๋ฅผ ์ ๊ธ ์๋ ์ผ๊ด๋ ์ฝ๊ธฐ๋ผ๊ณ ํ๋ค. ์ธ๋ ๋ก๊ทธ๋ฅผ ํ์ฉ
- ๊ทธ๋์ ์ค๋ ์ผ๋์ผ๋ฉด ํ์คํ ๋ฆฌ ๋ก๊ทธ ๋๋ฌธ์ ๋์ด ๋ฐ์ํ๋ค. ๋กค๋ฐฑํ์คํ ๋ฆฌ length
- ์๋ ๋ฐ๋๋ฝ ๊ฐ์ง
- ์ฃผ๊ธฐ์ ์ผ๋ก Wait-for list๋ฅผ ํตํด deadlock์ ๊ฐ์งํ๋ค.
- ์ ๊ธ ๋๊ธฐ ์ค์ธ graph๋ฅผ ๊ฐ์งํ๋ค.
- ์ธ๋ ๋ก๊ทธ๊ฐ ๋ ์ ์ผ๋ฉด ๋กค๋ฐฑ์ ๋์์ด ๋๋ค.
- ์๋ํ๋ ์ฅ์ ๋ณต๊ตฌ
- Mysql ์๋ฒ๊ฐ ์์๋ ๋, ์๋ฃ๋์ง ๋ชปํ ํธ๋์ญ์ ์ด๋ ๋์คํฌ์ ์ผ๋ถ(Partial write)๊ธฐ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ณต๊ตฌ ์์ ์งํ๋จ
- ๋ณต๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ์ข ๋ฃ๋๋ค.
- InnoDB ๋ฒํผ ํ
- ๋๋ค ์์ธ์ค๋ฅผ ์ต์ํํ๊ธฐ ์ํด, ๋ชจ์์ ์ฒ๋ฆฌํ๊ธฐ ์ํจ
- 5.7 ๋ถํฐ ๋์ ์ค์ ๊ฐ๋ฅ