4.1 MySQL ์์ง ์ํคํ ์ณ
MySQL ์์ง ์ํคํ ์ณ
MySQL ์๋ฒ
MySQL ์๋ฒ๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ์ด๋ฃจ์ด์ ธ์๋ค. ์ด ๋์ ํฉ์ณ MySQL ๋๋ MySQL ์๋ฒ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- MySQL ์์ง
- ์คํ ๋ฆฌ์ง ์์ง
MySQL ์์ง
- ์ปค๋ฅ์
ํธ๋ค๋ฌ
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ์ ์ ์์ ์ฒ๋ฆฌ
- SQL ์ธํฐํ์ด์ค, SQL ํ์, SQL ์ตํฐ๋ง์ด์ , ์บ์ & ๋ฒํผ
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ์ ์ฟผ๋ฆฌ ์์ฒญ์ ์ฒ๋ฆฌ (SQL ๋ฌธ์ฅ์ ๋ถ์ํ๊ฑฐ๋ ์ต์ ํํ๋ ์ค์ํ ์ญํ ์ ํ๋ค)
์คํ ๋ฆฌ์ง ์์ง
- ์ฌ๋ฌ ์คํ ๋ฆฌ์ง ์์ง์ด ์กด์ฌ (๋ํ์ ์ธ ์: InnoDB, MyISAM, Memory..)
์คํ ๋ฆฌ์ง ์์ง์ ์ค์ ๋์คํฌ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ฑฐ๋ ์ ์ฅํ๋ ์ญํ ์ ์ ๋ดํ๋ค.
mysql> CREATE TABLE test (fd1 INT, fd2 INT) ENGINE=INNODB;
์ ์ฝ๋๋ test ํ ์ด๋ธ์ InnoDB ์์ง์ ์ฌ์ฉํ๋๋ก ์ค์ ํ ๊ฒ์ด๋ค.
ํธ๋ค๋ฌ API
MySQL ์์ง์ ์ฟผ๋ฆฌ ์คํ๊ธฐ์์ ๋ฐ์ดํฐ๋ฅผ IOํ ๋ ๊ฐ ์คํ ๋ฆฌ์ง ์์ง์ IO ์์ฒญ์ ํ๊ฒ ๋๋๋ฐ ์ด๋ ํธ๋ค๋ฌ API๋ฅผ ํตํด ๊ฐ MySQL ์์ง๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
MySQL ์ค๋ ๋ ๊ตฌ์กฐ
MySQL ์๋ฒ๋ ํ๋ก์ธ์ค ๊ธฐ๋ฐ์ด ์๋, ์ค๋ ๋ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ค. ํฌ๊ฒ ๋ ๊ฐ์ง ์ค๋ ๋๋ก ๋๋๋ค.
ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋
๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋
29 thread/sql/one_connection
์ค๋ ๋๋ ์ค์ ์ฌ์ฉ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ด๋ค.
ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋(= ํด๋ผ์ด์ธํธ ์ค๋ ๋)
ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ ์ต์ํ MySQL ์๋ฒ์ ์ ์๋ ํด๋ผ์ด์ธํธ ์๋งํผ ์กด์ฌํ๋ค.
๋ค์์ ๋ผ์ดํ์ฌ์ดํด ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๋ฉด ์ค๋ ๋ ์บ์์ ์๋์ง ํ์ธ
- ์๋ค๋ฉด ์๋ก์ด ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋ ์์ฑ
- ์ฌ์ฉ์๊ฐ ์์
์ ๋ง์น๊ณ ์ปค๋ฅ์
์ข
๋ฃ ์
์ค๋ ๋ ์บ์
์ ์ ์ฅ- ์ด๋ ๋ง์ฝ, ์ค๋ ๋ ์บ์์ *์ผ์ ๊ฐ์ ์ด์์ ์ค๋ ๋๊ฐ ์กด์ฌํ๋ฉด ์ ์ฅํ์ง ์๊ณ ๋ฒ๋ฆผ
- *์ ์งํ ์ ์๋ ์ต๋ ๊ฐ์๋
thread_cache_size
์์คํ ๋ณ์๋ก ์ค์
- *์ ์งํ ์ ์๋ ์ต๋ ๊ฐ์๋
- ์ด๋ ๋ง์ฝ, ์ค๋ ๋ ์บ์์ *์ผ์ ๊ฐ์ ์ด์์ ์ค๋ ๋๊ฐ ์กด์ฌํ๋ฉด ์ ์ฅํ์ง ์๊ณ ๋ฒ๋ฆผ
InnoDB ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๋ฒํผ๋ ์บ์๊น์ง๋ง ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ์ฒ๋ฆฌํ๊ณ , ๋ฒํผ๋ก๋ถํฐ ๋์คํฌ๊น์ง ์ ์ฅํ๋ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋
InnoDB๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ์์ ์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ฒ๋ฆฌ๋๋ค.
- ์ธ์ํธ ๋ฒํผ(Insert Buffer)๋ฅผ ๋ณํฉํ๋ ์ค๋ ๋
- ๋ก๊ทธ๋ฅผ ๋์คํฌ๋ก ๊ธฐ๋กํ๋ ์ค๋ ๋
- InnoDB ๋ฒํผ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ๊ธฐ๋กํ๋ ์ค๋ ๋
- ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋ก ์ฝ์ด์ค๋ ์ค๋ ๋
- ์ ๊ธ์ด๋ ๋ฐ๋๋ฝ์ ๋ชจ๋ํฐ๋งํ๋ ์ค๋ ๋
MySQL 5.5 ๋ถํฐ
๋ฐ์ดํฐ ์ฝ๊ธฐ ์ค๋ ๋(innodb_read_io_threads)
๋ฐ์ดํฐ ์ฐ๊ธฐ ์ค๋ ๋(innodb_write_io_threads)
๋ฅผ 2๊ฐ ์ด์ ์ง์ ํ ์ ์๊ฒ ๋์๋ค.
์ฝ๊ธฐ ์ค๋ ๋๋ ์ฃผ๋ก ํด๋ผ์ด์ธํธ ์ค๋ ๋์์ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๋ง์ด ํ์์์ง๋ง, ์ฐ๊ธฐ ์ค๋ ๋๋ ์์ฃผ ๋ง์ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ๊ฒ ์ค์ ํ๋๊ฒ ์ข๋ค.
InnoDB๋ ์ฐ๊ธฐ ์ง์ฐ(๋ฒํผ๋ง)์ ์ง์ํ๊ธฐ ๋๋ฌธ์ INSERT, UPDATE, DELETE ์ฟผ๋ฆฌ๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์ด๋ ์ค์ ๋์คํฌ์ ๋ฐ์๋๊ธฐ ๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ์ฌ์ฉ ๊ตฌ์กฐ
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋๋ค.
- ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- MySQL ์๋ฒ๊ฐ ์ด์์ฒด์ ๋ก๋ถํฐ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ
- ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- = ํด๋ผ์ด์ธํธ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- = ์ธ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ
๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ
๋ํ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ ์ด๋ธ ์บ์
- InnoDB ๋ฒํผ ํ
- InnoDB ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค
- InnoDB ๋ฆฌ๋ ๋ก๊ทธ ๋ฒํผ
๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ (= ํด๋ผ์ด์ธํธ ๋ฉ๋ชจ๋ฆฌ ์์ญ)
ํด๋ผ์ด์ธํธ๊ฐ MySQL ์๋ฒ์ ์ ์ํ๋ฉด, ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น์์ผ์ค๋ค.
๋ํ์ ์ธ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ์ ๋ ฌ ๋ฒํผ(Sort buffer)
- ์กฐ์ธ ๋ฒํผ
- ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ์บ์
- ๋คํธ์ํฌ ๋ฒํผ
๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ์ ์ค์ํ ํน์ง ์ค ํ๋๋, ๊ฐ ์ฟผ๋ฆฌ์ ์ฉ๋๋ณ๋ก ํ์ํ ๋๋ง ๊ณต๊ฐ์ด ํ ๋น๋๊ณ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ MySQL์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น์กฐ์ฐจ๋ ํ์ง ์์ ์๋ ์๋ค.
- ์ปค๋ฅ์
์ด ์ด๋ ค์๋ ๋์ ๊ณ์ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ
- ์) ์ปค๋ฅ์ ๋ฒํผ, ๊ฒฐ๊ณผ ๋ฒํผ
- ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ์๊ฐ ํ ๋น, ์ฒ๋ฆฌ ํ ํ ๋น ํด์
- ์) ์ํธ ๋ฒํผ, ์กฐ์ธ ๋ฒํผ
ํ๋ฌ๊ทธ์ธ ์คํ ๋ฆฌ์ง ์์ง ๋ชจ๋ธ
MySQL์ ๋
ํนํ ๊ตฌ์กฐ ์ค ๋ํ์ ์ธ ํ๋ฌ๊ทธ์ธ ๋ชจ๋ธ์ด๋ค. ์คํ ๋ฆฌ์ง ์์ง๋ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ฌ์ฉํ๋๋ฐ, ์ฌ์ฉ์์ ์ธ์ฆ์ ์ํ Native Authentication
, Caching SHA-2 Authentication
๋ ๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ตฌํ๋์ด ์ ๊ณต๋๋ค.
๋ง์ฝ ์ ๋ฌธ ๊ฒ์ ์์ง์ ์ํ ๊ฒ์์ด ํ์(์ธ๋ฑ์ฑํ ํค์๋๋ฅผ ๋ถ๋ฆฌํด๋ด๋ ์์ )๋ฅผ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๊ฐ๋ฐํด์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์์ ๋ง์ ์คํ ๋ฆฌ์ง ์์ง์ ๊ฐ๋ฐํ์ฌ ํ๋ฌ๊ทธ์ธ์ผ๋ก ๋ถ์ฌ์ ์ฌ์ฉํ ์๋ ์๋ค.
- ์คํ ๋ฆฌ์ง ์์ง์ ์ค์ ๋์คํฌ์ ์ ์ฅ, ์ฝ๊ธฐ ๊ธฐ๋ฅ๋ง ์ํํ๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์๋ค.
MySQL ์์ง๊ณผ ์คํ ๋ฆฌ์ง ์์ง์ ๊ฒฝ๊ณ
SQL ํ์ <-> SQL ์ตํฐ๋ง์ด์ <-> SQL ์คํ๊ธฐ <-> ๋ฐ์ดํฐ ์ฝ๊ธฐ/์ฐ๊ธฐ <-> ์ค์ ๋์คํฌ
|___________________________________| |___________|
MySQL ์์ง ์ฒ๋ฆฌ ์์ญ ์คํ ๋ฆฌ์ง ์์ง ์ฒ๋ฆฌ ์์ญ
MySQL ์์ง๊ณผ ์คํ ๋ฆฌ์ง ์์ง์ ์ฒ๋ฆฌ ์์ญ์ ๋ํด์ ๋ช ํํ๊ฒ ์๊ณ ์์ด์ผ ํ๋ค.
๋จผ์ ์ฌ์ฉ์๋ก๋ถํฐ ์ฟผ๋ฆฌ ์์ฒญ์ด ๋ค์ด์ค๋ฉด, SQL ํ์, ์ตํฐ๋ง์ด์ , ์คํ๊ธฐ๋ฅผ ๊ฑฐ์น๊ฒ ๋๋๋ฐ ์ด๋ ๋ฐ๋ก MySQL ์์ง์ ์ฒ๋ฆฌ ์์ญ์ด๋ค. MySQL ์์ง์ ์คํ ๋ฆฌ์ง ์์ง์๊ฒ ํธ๋ค๋ฌ API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ๋๋ ์กฐํ ์์ฒญ์ ์์ํ๋ค.
์๋ฅผ ๋ค์ด, ์ค์ง์ ์ธ GROUP BY๋ ORDER BY๋ฑ ๋ณต์กํ ์ฒ๋ฆฌ๋ MySQL ์์ง์ ์ฒ๋ฆฌ ์์ญ์ธ ์ฟผ๋ฆฌ ์คํ๊ธฐ
์์ ์ฒ๋ฆฌ๋๋ค.
์ปดํฌ๋ํธ
MySQL 8.0๋ถํฐ๋ ๊ธฐ์กด์ ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ๋ฅผ ๋์ฒดํ๊ธฐ ์ํ ์ปดํฌ๋ํธ ์ํคํ ์ฒ๊ฐ ์ง์๋๋ค.
์ปดํฌ๋ํธ๋ ํ๋ฌ๊ทธ์ธ์ ์ด๋ค ๋จ์ ์ ๋ณด์ํ๊ธธ๋ ์๊ฐ๋ ๊ฒ์ผ๊น?
- ํ๋ฌ๊ทธ์ธ์ ์ค์ง MySQL ์๋ฒ์ ์ธํฐํ์ด์คํ ์ ์๊ณ , ํ๋ฌ๊ทธ์ธ๋ผ๋ฆฌ๋ ํต์ ํ ์ ์์๋ค.
- ํ๋ฌ๊ทธ์ธ์ MySQL ์๋ฒ์ ๋ณ์๋ ํจ์๋ฅผ ์ง์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์์ ํ์ง ์๋ค. (์บก์ํ ์๋จ)
- ํ๋ฌ๊ทธ์ธ์ ์ํธ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์์ด์ ์ด๊ธฐํ๊ฐ ์ด๋ ต๋ค.
MySQL 5.7๊น์ง๋ ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ ๊ธฐ๋ฅ์ด ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ ๊ณต๋์ง๋ง MySQL 8.0 ๋ถํฐ๋ ์ปดํฌ๋ํธ๋ก ๊ฐ์ ๋์๋ค.
mysql> INSTALL COMPONENT 'file://component_validate_password'; mysql> SELECT * FROM mysql.component;
์ปดํฌ๋ํธ๋ฅผ ์ค์นํ๋ฉด์ ์๋ก์ด ์์คํ ๋ณ์๋ฅผ ์ค์ ํด์ผ ํ ์๋ ์์ผ๋ ๋งค๋ด์ผ์ ์ฐธ์กฐํ์.
์ฟผ๋ฆฌ ์คํ ๊ตฌ์กฐ
์ฟผ๋ฆฌ ํ์
์ ์ฒ๋ฆฌ๊ธฐ
์ตํฐ๋ง์ด์
์คํ ์์ง (์ฟผ๋ฆฌ ์คํ๊ธฐ)
- ์คํ ์์ง์ด ํธ๋ค๋ฌ์๊ฒ ์์ ํ ์ด๋ธ์ ๋ง๋ค๋ผ๊ณ ์์ฒญ
- where ์ ์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ค๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ
- ์ฝ์ด์จ ๋ ์ฝ๋๋ค์ 1๋ฒ์์ ์ค๋นํ ์์ ํ ์ด๋ธ์ ์ ์ฅํ๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ
- ๋ฐ์ดํฐ๊ฐ ์ค๋น๋ ์์ ํ ์ด๋ธ์์ ํ์ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ
- ์ต์ข ์ ์ผ๋ก ์คํ ์์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์๋ ๋ค๋ฅธ ๋ชจ๋๋ก ๋๊น
ํธ๋ค๋ฌ (์คํ ๋ฆฌ์ง ์์ง)
InnoDB ํ ์ด๋ธ์ ์กฐ์ํ๋ ๊ฒฝ์ฐ → ํธ๋ค๋ฌ๋ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ด ๋๋ค.
์ฟผ๋ฆฌ ์บ์
ํ์ง๋ง ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ์บ์๋ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ชจ๋ ์บ์๋ฅผ ์ญ์ ํด์ผํ๋ฏ๋ก ์ด๋ ์ฌ๊ฐํ ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ๋ค.
๊ฒฐ๊ตญ MySQL 8.0์ผ๋ก ์ฌ๋ผ์ค๋ฉด์ ์ฟผ๋ฆฌ ์บ์๋ ์์ ํ๊ฒ ์ ๊ฑฐ๋์๋ค.