DevLog ๐ถ
[Real MySQL 8.0] MySQL ์์ง๊ณผ ์คํ ๋ฆฌ์ง ์์ง, ์ฟผ๋ฆฌ ์คํ ์ฒ๋ฆฌ ์์ ๋ณธ๋ฌธ
[Real MySQL 8.0] MySQL ์์ง๊ณผ ์คํ ๋ฆฌ์ง ์์ง, ์ฟผ๋ฆฌ ์คํ ์ฒ๋ฆฌ ์์
dolmeng2 2023. 6. 11. 00:30๐ฑ MySQL ์ ์ฒด ๊ตฌ์กฐ
MySQL ์๋ฒ๋ ํฌ๊ฒ MySQL ์์ง๊ณผ ์คํ ๋ฆฌ์ง ์์ง์ผ๋ก ๋๋ ์ ์๋ค.
MySQL ์์ง์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ์ํ๊ณ , ์ฟผ๋ฆฌ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ปค๋ฅ์
ํธ๋ค๋ฌ์ SQL ํ์, ์ต์ง๋ง์ด์ ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ฟผ๋ฆฌ ๊ด๋ จ ์ฒ๋ฆฌ๋ ์ด๊ณณ์์ ํ๊ธฐ ๋๋ฌธ์, ๊ฑฐ์ '๋๋'์ ๊ฐ์ ์ญํ ์ ํ๋ฉด ๋๋ค๊ณ ์๊ฐํ์.
์คํ ๋ฆฌ์ง ์์ง์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋์คํฌ์ ์ ์ฅํ๊ฑฐ๋, ํน์ ๋์คํฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์์
์ ํ๋ฉฐ ํ๋์ MySQL ์๋ฒ๋ ์ฌ๋ฌ ๊ฐ์ ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ์ฉํ ์ ์๋ค.
MySQL ์์ง๊ณผ ์คํ ๋ฆฌ์ง ์์ง์ ์๋ก 'ํธ๋ค๋ฌ API'๋ผ๋ ๊ฒ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, ์ด๋ ์ ๋์ ๋ฐ์ดํฐ ์์
์ด ์ผ์ด๋ฌ๋์ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ๋๋ค.
show global status like 'handler%';
์๋ ๊ฒ ๋ค์ํ ํธ๋ค๋ฌ API๋ค์ ํ์ธํ ์ ์๋ค.
๐ฑ MySQL Thread
MySQL ์๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ ๋ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, Foreground / background ์ค๋ ๋๋ก ๋๋์ด์ ธ ์๋ค.
์๋์ ๊ฐ์ด ์
๋ ฅํ๋ฉด ํ์ฌ ์คํ ์ค์ธ ์ค๋ ๋ ๋ชฉ๋ก์ ํ์ธํ ์ ์๋ค.
select thread_id, name, type, processlist_user, processlist_host
from performance_schema.threads order by type, thread_id;
์์ฒญ ๋ง๊ธฐ๋ ํ๋ฐ, ํ์ฌ ๋๋ 38๊ฐ์ ์ค๋ ๋๊ฐ ์คํ ์ค์ธ ๊ฒ์ ๋ณผ ์ ์์๋ค.
์ฌ๊ธฐ์ 4, 5ํ์ ๋ณด๋ฉด ๋์ผํ ์ค๋ ๋ ์ด๋ฆ์ ๊ฐ์ง ๊ฒ์ ๋ณผ ์ ์๋๋ฐ, ์ด๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์ผํ ์์
์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ๋ ๋์จ๋ค.
ํนํ ๋ง์ง๋ง 3๊ฐ๋ foreground๋ก ๋์ํ๊ณ ์์ผ๋ฉฐ, ์ด ์ค์์ thread/sql/one_connection์ด ์ค์ ๋ก ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ foreground ์ค๋ ๋์ด๋ค.
๐ฌ Foreground Thread
foreground thread์ ๊ฒฝ์ฐ ์ต์ MySQL์ ์ ์๋ ํด๋ผ์ด์ธํธ ์๋งํผ ์กด์ฌํ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ํํ๋ค.
๋ฐ์ดํฐ๋ฅผ MySQL์ ๋ฐ์ดํฐ ๋ฒํผ๋ ์บ์๋ก๋ถํฐ ๊ฐ์ ธ์ค๊ณ , ์์ผ๋ฉด ์ง์ ๋์คํฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ธ๋ฑ์ค ํ์ผ๋ก๋ถํฐ ํ์ผ์ ์ฝ์ด์จ๋ค. ์ด๋, MyISAM ๊ฐ์ ์คํ ๋ฆฌ์ง ์์ง์ ๋์คํฌ ์ฐ๊ธฐ ์์
๊น์ง foreground๊ฐ ํ์ง๋ง, InnoDB์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๋ฒํผ / ์บ์๊น์ง๋ง ๊ด๋ฆฌํ๊ณ ๋์คํฌ ์ฐ๊ธฐ๋ background๊ฐ ์ฒ๋ฆฌํ๋ค.
์คํ ํ ์ปค๋ฅ์
์ข
๋ฃ ์ ํด๋น ์ค๋ ๋๋ ์ค๋ ๋ ์บ์๋ก ๋์๊ฐ๋๋ฐ, ๋ง์ฝ ์ค๋ ๋ ์บ์์ ์ด๋ฏธ ์ผ์ ๊ฐ์ ์ด์์ ๋๊ธฐ ์ค์ธ ์ค๋ ๋๊ฐ ์์ผ๋ฉด ์ค๋ ๋ ์บ์์ ๋ฃ์ง ์๊ณ ์ค๋ ๋ ์์ฒด๋ฅผ ์ข
๋ฃ์์ผ์ ์ค๋ ๋ ์บ์์ ์กด์ฌํ๋ ์ค๋ ๋ ์๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ๋ ํ๋ค.
๋ณดํต, ํด๋น ์ค๋ ๋ ์๋ thread_cache_size๋ผ๋ ์์คํ
๋ณ์๋ก ์ปจํธ๋กค์ด ๊ฐ๋ฅํ๋ค.
๐ฌ Background Thread
InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ๊ฒฝ์ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ์ ๋ง ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ์ธ์ํธ ๋ฒํผ (insert buffer) ๋ณํฉ
- โญ๏ธ ๋์คํฌ์ ๋ก๊ทธ ๊ธฐ๋ก (Log Thread)
- โญ๏ธ ๋ฒํผ ํ (buffer pool)์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ๊ธฐ๋ก (Write Thread)
- ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋ก ์ฝ์ด์ค๊ธฐ
- ์ ๊ธ, ๋ฐ๋๋ฝ ๋ชจ๋ํฐ๋ง
์ฌ๊ธฐ์ ์ค์ํ log / write thread์ ๊ฒฝ์ฐ innodb_write_io_threads, innodb_read_io_threads ์์คํ
๋ณ์๋ก ์ค๋ ๋ ๊ฐ์๋ฅผ ์ ์ดํ ์ ์๋ค. ์ฐ๊ธฐ ์ค๋ ๋์ ๊ฒฝ์ฐ 2~4๊ฐ, ๋ณ๋์ ์คํ ๋ฆฌ์ง ์ฌ์ฉ ์ ๋์คํฌ๋ฅผ ์ต์ ์ผ๋ก ์ฌ์ฉํ ๋งํผ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
์ถ๊ฐ๋ก, ๋ฐ์ดํฐ ์ฐ๊ธฐ ์์
์ ์ง์ฐ์ด ๊ฐ๋ฅํ์ง๋ง ์ฝ๊ธฐ ์์
์ ์ง์ฐ ์ฒ๋ฆฌ๊ฐ ์ ๋๊ธฐ ๋๋ฌธ์ ๋ณดํต DBMS์์ ์ฐ๊ธฐ ์์
์ ๋ฒํผ๋ง์ ํตํด ์ผ๊ด ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค. ๋๋ถ์ CUD ์ฟผ๋ฆฌ ์์ฑ ์ ๋์คํฌ์ ๋ฐ์๋ ๋๊น์ง ์์ ํ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๋ค. (InnoDB) ํ์ง๋ง, MyISAM์์๋ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ์ฐ๊ธฐ ์์
๊น์ง ํ๋ค ๋ณด๋๊น ์ฐ๊ธฐ ๋ฒํผ๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
๐ฑ MySQL Memory Allocation
MySQL์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ฒ ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ์ธ์
๋ฉ๋ชจ๋ฆฌ ์์ญ (=๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ)์ผ๋ก ๊ตฌ๋ถ๋๋ค.
๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฒฝ์ฐ MySQL ์๋ฒ๊ฐ ์์๋๋ฉด์ OS๋ก๋ถํฐ ํ ๋น๋๋ฉฐ, OS๋ง๋ค ์กฐ๊ธ์ฉ ์ ์ฑ
์ด ๋ค๋ฅด๋ค. ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋จ ํ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ง ํ ๋น๋ฐ์ผ๋ฉฐ, ๋ชจ๋ ์ค๋ ๋์๊ฒ ๊ณต์ ๋๋ค.
๋ฐ๋ฉด, ์ธ์
๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฒฝ์ฐ ์ค๋ ๋๋น ํ๋์ฉ ์์ฑ๋๋ฉฐ, ๊ณต์ ๋์ง ์๊ณ ์ฌ์ฉ๋๋ค.
์ฟผ๋ฆฌ์ ์ฉ๋๋ณ๋ก ๊ณต๊ฐ์ด ํ ๋น๋๊ณ , ํ์ํ์ง ์์ผ๋ฉด ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์ฒด๊ฐ ์์ฑ๋์ง ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ (์ ๋ ฌ์ด๋ ์กฐ์ธ ๋ฒํผ ๊ฐ์ ๊ฒฝ์ฐ) ์ฃผ์ํด์ผ ํ๋ค.
๐ฌ MySQL์์์ ์ฟผ๋ฆฌ ์คํ ๊ณผ์
โญ๏ธ SqL ํ์ -> SQL ์ตํฐ๋ง์ด์ -> SQL ์คํ๊ธฐ -> ๋ฐ์ดํฐ์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ -> ๋์คํฌ
MySQL์์๋ MySQL ์์ง์ ์ํด SQL ์คํ๊ธฐ๊น์ง ์คํ๋๊ณ , ๋ง์ง๋ง์ผ๋ก ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๋ ์์
์ ์คํ ๋ฆฌ์ง ์์ง์ด ์ฒ๋ฆฌํ๋ค. ์ด๋ค ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ์ฉํ๋ MySQL ์์ง์ด ์คํํ๋ ๋ถ๋ถ์ ๋๋ถ๋ถ ๋น์ทํ๋ฉฐ, ์ด๋ค ์์ผ๋ก ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋์ง๊ฐ ์คํ ๋ฆฌ์ง ์์ง๋ณ๋ก ๊ฐ๋ฆฐ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ด๋, ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์์
์ ๋๋ถ๋ถ 1๊ฑด์ ๋ ์ฝ๋ ๋จ์๋ก ์ฒ๋ฆฌ๋๋ค.
์ด๋, MySQL ์์ง์ ์คํ ๋ฆฌ์ง ์์ง์ ์กฐ์ ํ๊ธฐ ์ํด 'ํธ๋ค๋ฌ'๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ค. (์ถํ ๋ค์ ๋ค๋ฃฐ ์์ ์ด๋ค.)
SHOW ENGINES;
์ด๊ฑฐ๋ MySQL ์๋ฒ์์ ์ง์ํ๋ ์คํ ๋ฆฌ์ง ์์ง์ ๋ชฉ๋ก์ด๋ค. ์ฌ๊ธฐ์ support ์ปฌ๋ผ์๋ 4๊ฐ์ง์ ์ต์ ์ด ์๋๋ฐ, ๋ค์๊ณผ ๊ฐ๋ค.
- YES: MySQL ์๋ฒ์ ํฌํจ๋์ด ์๊ณ , ์ฌ์ฉ ๊ฐ๋ฅ์ผ๋ก ํ์ฑํ
- DEFAULT: YES์ ๋์ผํ๋ฐ ํ์ ์คํ ๋ฆฌ์ง ์์ง์
- NO: MySQL ์๋ฒ์ ํฌํจ X, ์ฌ์ฉ ์ ์ฌ๋น๋ ์งํํด์ผ ํจ
- DISABLED: MySQL ์๋ฒ์ ํฌํจ์ ๋์ด ์๋๋ฐ ๋นํ์ฑํ
๋ํ, MySQL ์๋ฒ์๋ ์ฌ๋ฌ ํ๋ฌ๊ทธ์ธ๋ ์๊ธฐ ๋๋ฌธ์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด show plugins์ผ๋ก ํ์ธํ๋ฉด ๋๋ค!
์ฐธ๊ณ ๋ก, MySQL 8.0๋ถํฐ๋ ์ปดํฌ๋ํธ ์ํคํ
์ฒ๋ผ๋ ๊ฒ์ ์ง์ํ๋๋ฐ, ์ด๋ ํ๋ฌ๊ทธ์ธ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๊ตฌํ๋์๋ค.
- ํ๋ฌ๊ทธ์ธ์ ์ค์ง MySQL ์๋ฒ์ ์ธํฐํ์ด์ค๊ฐ ๊ฐ๋ฅํ๊ณ , ํ๋ฌ๊ทธ์ธ๋ผ๋ฆฌ๋ ํต์ ์ด ๋ถ๊ฐ๋ฅํจ
- MySQL ์๋ฒ์ ๋ณ์๋ ํจ์๋ฅผ ์ง์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์์ ํ์ง ์์
- ์ํธ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์์ด์ ์ด๊ธฐํ๊ฐ ์ด๋ ค์
์ค์น๋ ์ปดํฌ๋ํธ๋ ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ก ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
select * from mysql.component;
๐ฑ MySQL Query Execution
MySQL์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ตฌ์กฐ์ด๋ค. ์ฐจ๋ก๋ก ๋ฐ๋ผ๊ฐ๋ณด์.
๐ฌ ์ฟผ๋ฆฌ ํ์ (SQL Parser)
์ฌ์ฉ์ ์์ฒญ์ผ๋ก ๋ค์ด์จ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ Token์ผ๋ก ๋ถ๋ฆฌํ์ฌ ํธ๋ฆฌ ํํ์ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด๋ด๋ ์์
์ ์๋ฏธํ๋ค.
์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ์ค๋ฅ๋ ์ด ๋จ๊ณ์์ ๋ฐ์ํ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ฌ์ฉ์์๊ฒ ๋๊ฐ๊ฒ ๋๋ค.
๐ฌ ์ ์ฒ๋ฆฌ๊ธฐ
ํ์๋ฅผ ํตํด ๋์จ ํธ๋ฆฌ๋ฅผ ๋ฐํ์ผ๋ก ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํ๋ค.
ํ
์ด๋ธ ์ด๋ฆ์ด๋ ์ปฌ๋ผ ์ด๋ฆ, ๋ด์ฅ ํจ์ ์กด์ฌ ์ฌ๋ถ, ๊ฐ์ฒด์ ์ ๊ทผ ๊ถํ ๋ฑ์ ์ฌ๊ธฐ์์ ํ์ธํ๋ค.
๐ฌ ์ตํฐ๋ง์ด์
์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ๊ฐ์ฅ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ต์ ํ๋ฅผ ์งํํ๋ค. ๋งค์ฐ ์ค์ํ ๊ณผ์ ์ด๋ค.
๐ฌ ์คํ ์์ง
ํธ๋ค๋ฌ์๊ฒ ์์ฒญํด์ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์๋ ๋ ๋ค๋ฅธ ํธ๋ค๋ฌ์ ์์ฒญ์ ๋ํ ์
๋ ฅ์ผ๋ก ์ฐ๊ฒฐํ๋ ์ญํ ์ ์ํํ๋ค.
ํธ๋ค๋ฌ๋ ์ค์ ๋ก ์ผ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ์ํํ๊ณ , ์คํ ์์ง์ด ์ตํฐ๋ง์ด์ ์ ์คํ๊ธฐ ์ฌ์ด์์ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค.
ex) group by ์ฒ๋ฆฌ ๊ณผ์
์คํ ์์ง์ด ํธ๋ค๋ฌ์๊ฒ ์์ ํ ์ด๋ธ ์์ฑ ์์ฒญ
-> ์คํ ์์ง์ where์ ์ ๋ํ ๋ ์ฝ๋๋ฅผ ์ฝ์ผ๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ
-> ์ฝ์ด์จ ํ ์ด๋ธ์ ์์ ํ ์ด๋ธ์๊ฒ ์ ์ฅํ๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ
-> ์์ฑ๋ ์์ํ ์ด๋ธ์ ๋ํด ํ์ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ
-> ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์คํ ์์ง์ด ์ฌ์ฉ์๋ ๋ค๋ฅธ ํธ๋ค๋ฌ์๊ฒ ๋๊ธด๋ค.
๐ฌ ํธ๋ค๋ฌ (=์คํ ๋ฆฌ์ง ์์ง)
์คํ ์์ง์ ์์ฒญ์ ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ์ ์ฅํ๊ฑฐ๋ ๋์คํฌ๋ก๋ถํฐ ์ฝ์ด์ค๋ ์ญํ ์ ์งํํ๋ค.
์ด๋ค ์คํ ๋ฆฌ์ง ์์ง์ ๊ฐ์ง ํ
์ด๋ธ์ ์ฒ๋ฆฌํ๋์ง์ ๋ฐ๋ผ์ InnoDB ์์ง์ ์ฌ์ฉํ ์ง, MyISAM ์์ง์ ์ฌ์ฉํ ์ง (ํน์ ๊ทธ์ธ) ์ฑํํ๊ฒ ๋๋ค.
๐ฌ ์ฟผ๋ฆฌ ์บ์
๊ทธ๋ฆผ์๋ ์์ง๋ง, MySQL์ ์ฟผ๋ฆฌ ์บ์๋ SQL ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ํ๊ณ ๋์ผํ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด ํ
์ด๋ธ์ ์ฝ๋ ๋์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ๋ฐํํ๋ ์ญํ ์ ํ๋ค.
ํ์ง๋ง, ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์บ์๋ ํจ๊ป ๊ฐฑ์ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ๋ ํ
์ด๋ธ์ ๊ด๋ จ๋ ๋ด์ฉ์ ์ ๋ถ ์ญ์ ํ์ด์ผ ํ๋ค. ์ ๋ถ ์ญ์ ํ๋ค ๋ณด๋ ์ฑ๋ฅ์์๋ ์น๋ช
์ ์ธ ๋ฌธ์ ๊ฐ ์๊ฒจ, 8.0๋ถํฐ๋ ์ฟผ๋ฆฌ ์บ์ ๊ธฐ๋ฅ ์์ฒด๊ฐ ์ ๊ฑฐ๋์๋ค.
๐ฌ ์ค๋ ๋ ํ
MySQL ์ํฐํ๋ผ์ด์ฆ ๋ฒ์ ์์๋ ์ค๋ ๋ ํ ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ์ฌ๊ธฐ์๋ Percona Server์์ ์ ๊ณตํ๋ ์ค๋ ๋ ํ ๊ธฐ๋ฅ์ ์ดํด๋ณด์.
์ค๋ ๋ ํ์ ๊ฒฝ์ฐ ๋์์ ์คํ ์ค์ธ ์ค๋ ๋๋ฅผ CPU๊ฐ ์ต๋ํ ์ ์ฒ๋ฆฌํ ์ ์๋ ์์ค๊น์ง ์ค์ฌ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋๋ก ๋ง๋๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์, CPU ์๊ฐ์ ์ ํ๋ณดํ์ง ๋ชปํ๋ค๋ฉด ์คํ๋ ค ์ฟผ๋ฆฌ ์ฒ๋ฆฌ๊ฐ ๋๋ ค์ง ์๋ ์๋ค.
๐ก thread_pool_size
Percona Server์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก CPU ์ฝ์ด ์๋งํผ ์ค๋ ๋ ๊ทธ๋ฃน์ ์์ฑํ๋ฉฐ, thread_pool_size ์์คํ
๋ณ์๋ฅผ ์์ ํ์ฌ ์กฐ์ ์ด ๊ฐ๋ฅํ๋ค.
๐ก thread_pool_oversubscribe
๋ง์ฝ, ์ด๋ฏธ ์ค๋ ๋ ํ์ด ์ฒ๋ฆฌํ๋ ์์
์ด ์์ผ๋ฉด thread_pool_oversubscribe ๋ณ์๋ฅผ ํตํด ์ผ๋ง๋ ๋ ์ถ๊ฐ๋ก ์ฒ๋ฆฌํ ์ง ๋ฐ์๋ค์ผ ์ ์๋ค. (๋ฌผ๋ก , ๋ฌด์์ ๋๋ ค๋ ์ข์ง ์๋ค. ๊ทธ๋งํผ ์ค์ผ์ค๋งํด์ผ ํ๋ ์ค๋ ๋ ์๊ฐ ๋ง์์ง๋ค.) ๊ธฐ๋ณธ๊ฐ์ 3์ด๋ค.
๐ก thread_pool_stall_limit
์ค๋ ๋ ๊ทธ๋ฃน ๋ด์ ๋ชจ๋ ์ค๋ ๋๊ฐ ์ผ์ ์ฒ๋ฆฌํ๊ณ ์๋ค๋ฉด ํด๋น ์ค๋ ๋ ๊ทธ๋ฃน์ ์๋ก์ด Worker Thread๋ฅผ ์ถ๊ฐํ ์ง, ์๋๋ฉด ๊ธฐ์กด ์์
์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด์ง ํ๋จํด์ผ ํ๋ค. ์ค๋ ๋ ํ ๋ด์ ํ์ด๋จธ ์ค๋ ๋๋ ์ค๋ ๋ ๊ทธ๋ฃน์ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฒดํฌํ์ฌ thread_pool_stall_limit ๋ณ์์ ์ ์๋ ์ด๋งํผ ์์
์ค๋ ๋๊ฐ ์ฒ๋ฆฌ ์ค์ธ ์์
์ด ๋๋์ง ์์์ ๋ ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํด์ ์ถ๊ฐํ๋๋ก ๋ง๋ ๋ค. ๋น์ฐํ๊ฒ๋ ์ด ์๋ ํ ๋น ๊ฐ๋ฅํ ์ ์ฒด ์ค๋ ๋ ์ (thread_pool_max_threads)๋ฅผ ๋์ ์ ์๋ค.
- ๊ทธ๋ ๋ค๋ฉด, thread_pool_stall_limit์ 0์ผ๋ก ์์ฑํด์ ๋ฐ๋ก ์ค๋ ๋๋ฅผ ์์ฑํ๋๋ก ๋ง๋๋ ๊ฒ ์ข์ง ์์๊น?
์ด๊ฒ์ ์๋๋ค. ์ค๋ ๋ ํ์ ์ฌ์ฉํ๋ ์๋ฏธ ์์ฒด๊ฐ ์์ด์ง๋ ๊ฒ๊ณผ ๋์ผํ๋ค. (๊ณ์ ์๋กญ๊ฒ ๋ง๋๋ ํ์ด ์๋ฏธ๊ฐ ์์ด์ง)
๐ก ์ ์์ / ํ์์ ํ
Percona Server์์๋ ์ ์์ / ํ์์ ํ๋ฅผ ํตํด์ ํน์ ํธ๋์ญ์
์ด๋ ์ฟผ๋ฆฌ๋ฅผ ์ฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ๋ง๋๋ ๊ธฐ๋ฅ๋ ์๋ค. (thread_pool_high_prio_tickets)
์ด๋ ๋์์ ์คํ๋๋ ์ฟผ๋ฆฌ์ ์๋ฅผ ์ ํํ๋ฉฐ, ์ด๋ ค ์๋ ํธ๋์ญ์
์ ์๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
์๋ก์ด ์ปค๋ฅ์
์ด ์์ฑ๋ ๋๋ง๋ค '์ฐ์ ์์ ํฐ์ผ' ๊ฐ์ ๊ฒ์ ํ ๋นํ์ฌ ์ ์์ ํ์ ๋ค์ด๊ฐ ์ ์๋๋ก ๋ง๋ค๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฏธ ์์๋ ์ปค๋ฅ์
์ ๊ฒฝ์ฐ ์ ์์ ํ์ ๋ค์ด๊ฐ๊ฒ ๋๋ค. ๋ง์ฝ ๋ชจ๋ ์ปค๋ฅ์
์ ๋ํด ์ด๋ฐ ์ค์ผ์ค๋ง์ ์ฌ์ฉํ๊ณ ์ถ์ง ์๋ค๋ฉด, ๋ณ์ ๊ฐ์ 0์ผ๋ก ํ ๋นํ๊ณ , ๊ฐ์ด ํด์๋ก ๊ฐ๊ฐ์ ํธ๋์ญ์
์ ์ ์์ ํ์ ๋ค์ด๊ฐ ๊ธฐํ๋ฅผ ๋ ๋ง์ด ์ป๊ฒ ๋๋ค.
๋ฐ๋๋ก, ๋ชจ๋ ์ํฌ ์ค๋ ๋ ์๊ฐ oversubscribe๊น์ง ๋๋ฌํ๊ฒ ๋๋ค๋ฉด ์ฐ์ ์์๊ฐ ๋ฎ์ ์ปค๋ฅ์
์ ์ ํํ์ฌ์ ๋ฐฉ์งํ ์ ์๋ค. ์ด๋ฏธ ์์๋ ํธ๋์ญ์
์ ์ฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ํด๋น ํธ๋์ญ์
์ด ์ฒ๋ฆฌ๋ ๋๊น์ง ์๋ก์ด ํธ๋์ญ์
์ ์์ํ์ง ์์์ ์ค๋ ๋ ๊ทธ๋ฃน์ด ๊ณผ๋คํ๊ฒ ์ฌ์ฉ๋๋ ๊ฒ์ ์ ํํ๋ ๊ฒ์ด๋ค.
๐ฌ ํธ๋์ญ์ ์ง์ ๋ฉํ๋ฐ์ดํฐ
DB ์๋ฒ์์ ํ
์ด๋ธ์ ๊ตฌ์กฐ ์ ๋ณด์ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ ๋ฑ์ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ ๋์
๋๋ฆฌ or ๋ฉํ๋ฐ์ดํฐ๋ผ๊ณ ํ๋ค.
MySQL 5.7๊น์ง๋ FRM ํ์ผ์ ํ
์ด๋ธ์ ๊ตฌ์กฐ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ผ๋, ์ด๋ MySQL ์๋ฒ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข
๋ฃ๋๊ฑฐ๋ ์์ฑ, ๋ณ๊ฒฝ ์ ํธ๋์ญ์
์ ์ง์ํ์ง ์์์ ์ผ๊ด์ฑ์ด ์์ฃผ ๊นจ์ง๋ ํ์์ด ๋ฐ์ํ์๋ค.
๊ทธ๋์ 8.0๋ถํฐ๋ ๋ชจ๋ InnoDB ํ
์ด๋ธ์ ์ ์ฅ๋๋ฉฐ, '์์คํ
ํ
์ด๋ธ' ๊ฐ์ ํํ๋ก ๊ด๋ฆฌ๋๋ค.
show databases;
์ค์ ๋ก, show databases๋ฅผ ์
๋ ฅํ์ ๋ ๋์ค๋ 'mysql'์ด๋ผ๋ DB์ ์ ์ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
(mysql.ibd๋ผ๋ ํ
์ด๋ธ์คํ์ด์ค์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ํด๋น ํ์ผ์ ๋ํด ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค!)
์ฌ๊ธฐ์ ์๋ฌธ์ธ ์ ์, use tables๋ฅผ ํตํด ํ์ธํด๋ ์ค์ ํ
์ด๋ธ์ ๊ตฌ์กฐ๊ฐ ์ ์ฅ๋ ํ
์ด๋ธ์ ๋ณผ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ด๋ ์ฌ์ฉ์๊ฐ ์ง์ ์์๋ก ์์ ํ ๊น๋ด ์กฐํ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๊ฒ์ด๋ฉฐ, ์ด ๋์ ์ information_schema DB๋ฅผ ํตํด์ ํ์ธํ๋๋ก ๋ง๋ค์๋ค.
select * from information_schema.tables;
์ค์ ๋ก ์ด๋ ๊ฒ ๋ด๊ฐ ์์ฑํ๋ ํ
์ด๋ธ์ ์ ๋ณด๋ฅผ ์กฐํํ ์ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
select * from mysql.tables;
๋ฐ๋ฉด์, mysql DB๋ฅผ ํตํด์ ํ
์ด๋ธ ๋ชฉ๋ก์ ํ์ธํ๋ ค๊ณ ๋ณด๋ฉด ์์ ๊ฐ์ด ๊ถํ์ด ์๋ค๋ ๋ฌธ๊ตฌ๊ฐ ๋ฌ๋ค!
๊ทธ๋ ๋ค๋ฉด, ์ด๋ ๊ฒ innoDB ํ
์ด๋ธ๋ก ๊ด๋ฆฌ๋๋ฉด ์ด๋ค ๊ฒ์ด ์ข์๊น?
๋ฐ๋ก, '์์์ฑ'์ ๋ง์กฑํ ์ ์๋ค๋ ์ ์ด๋ค.
ํ
์ด๋ธ๋ก ๊ด๋ฆฌ๋๋ค๋ ๊ฒ์ ์ค์ ์ ๋ณด๊ฐ ํ
์ด๋ธ์ ์ปค๋ฐ๋๊ฑฐ๋, ํน์ ๋กค๋ฐฑ (Atomicity)๋๋ ๊ฒ์ ๋ณด์ฅํ ์๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ฒ๋ผ ํ์ผ๋ก ๊ด๋ฆฌํ์ ๋์ ๋ค๋ฅด๊ฒ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๊นจ์ง๋ ์ผ์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ด๋ค.
ํ์ง๋ง, innoDB๊ฐ ์๋ ๋ค๋ฅธ ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ์ฉํ๋ ํ
์ด๋ธ์ ๊ฒฝ์ฐ, ์ฌ์ ํ ๋ฉํ ์ ๋ณด๋ฅผ SDI ํ์ผ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ ์ํด์ผ ํ๋ค.
๋ค์ ํฌ์คํ
๋ถํฐ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ๋ํด์ ์์๋ณด๋๋ก ํ์.