- MySQL์ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก๋ถํฐ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ง์ํ๋ค.
- C API, JDBC, ODBC, .NET ํ์ค ๋๋ผ์ด๋ฒ ์ ๊ณตํ์ฌ C/C++, PHP, ์๋ฐ, ํ, ํ์ด์ฌ, ๋ฃจ๋น .NET ๋ฐ ์ฝ๋ณผ๊น์ง ๋ชจ๋ ์ธ์ด๋ก MySQL ์๋ฒ์์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- MySQL์๋ฒ = MySQL ์์ง + ์คํ ๋ฆฌ์ง ์์ง
- MySQL ์์ง = ์ปค๋ฅ์ ํธ๋ค๋ฌ(ํด๋ผ์ด์ธํธ ์ ์) + SQL ํ์ ๋ฐ ์ ์ฒ๋ฆฌ๊ธฐ(์ฟผ๋ฆฌ ์์ฒญ ์ฒ๋ฆฌ) + ์ตํฐ๋ง์ด์ (์ฟผ๋ฆฌ ์ต์ ํ)
- MySQL์ ํ์ค SQL๋ฌธ๋ฒ์ ์ง์ํ๊ธฐ ๋๋ฌธ์, ํ DBMS์ ํธํ๋์ด ์คํ๋ ์ ์๋ค.
- MySQL ์์ง์ ์์ฒญ๋ SQL ๋ถ์ ๋ฐ ์ต์ ํ๋ฑ DBMS์ ๋๋๋ฅผ ๋ด๋น
- ์คํ ๋ฆฌ์ง ์์ง์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๊ฑฐ๋ ์ฝ์ด์ค๋ ๋ถ๋ถ์ ๋ด๋น
- MySQL ์๋ฒ์์ ์์ง์ ํ๋์ง๋ง, ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ๋ฌ๊ฐ๋ฅผ ๋์์ ์ฌ์ฉ ๊ฐ๋ฅ
CREATE TABLE test_table (fd1 INT, fd2 INT) ENGINE=INNODB;
์คํ ๋ฆฌ์ง ์์ง์ ์ง์ ํ๋ฉด, ํด๋น ํ ์ด๋ธ์ ๋ชจ๋ ์์ ์ ์ ์๋ ์คํ ๋ฆฌ์ง ์์ง์ด ์ฒ๋ฆฌํ๋ค.
- ๊ฐ ์คํ ๋ฆฌ์ง ์์ง์ ์ฑ๋ฅ ํฅ์์ ์ํด ํค ์บ์(MyISAM)๋ InnoDB ๋ฒํผ ํ(InnoDB)๊ฐ์ ๊ธฐ๋ฅ์ ๋ด์ฅํ๊ณ ์๋ค.
-
MySQL ์์ง์ ์ฟผ๋ฆฌ ์คํ๊ธฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฑฐ๋ ์ฝ์ด์ผ ํ ๋ ๊ฐ ์คํ ๋ฆฌ์ง ์์ง์ ์์ฒญํ๋ค.
-
์ด๋ฅผ Handler ์์ฒญ์ด๋ผ ํ๋ฉฐ, ์ฌ์ฉ๋๋ API๋ฅผ Handler API๋ผ๊ณ ํ๋ค.
-
์คํ ๋ฆฌ์ง ์์ง ๋ํ ์ด Handler API๋ฅผ ์ฌ์ฉํ์ฌ MySQL ์์ง๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
-
์๋ ์ฟผ๋ฆฌ๋ก ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ ์์ ์ด ์์๋์ง ํ์ธ ๊ฐ๋ฅํ๋ค
mysql> SHOW GLOBAL STATUS LIKE 'Handler%';
+----------------------------+-----------+
| Variable_name | Value |
+----------------------------+-----------+
| Handler_commit | 32304704 |
| Handler_delete | 867 |
| Handler_discover | 0 |
| Handler_external_lock | 60029128 |
| Handler_mrr_init | 0 |
| Handler_prepare | 0 |
| Handler_read_first | 924338 |
| Handler_read_key | 361550629 |
| Handler_read_last | 0 |
| Handler_read_next | 711585244 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 953 |
| Handler_read_rnd_next | 3304411 |
| Handler_rollback | 104 |
| Handler_savepoint | 0 |
| Handler_savepoint_rollback | 0 |
| Handler_update | 746 |
| Handler_write | 1107501 |
+----------------------------+-----------+
18 rows in set (0.11 sec)
- MySQL ์๋ฒ๋ ํ๋ก์ธ์ค ๊ธฐ๋ฐ์ด ์๋๋ผ ์ค๋ ๋ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ฉฐ, ํฌ๊ทธ๋ผ์ด๋(Foreground)์ค๋ ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋(Background)์ค๋ ๋๋ก ํ์ ์ ๊ตฌ๋ถํ ์ ์๋ค.
mysql> SELECT thread_id, name, type, processlist_user, processlist_host
FROM performance_schema.threads ORDER BY type, thread_id;
+-----------+----------------------------------------+------------+------------------+------------------+
| thread_id | name | type | processlist_user | processlist_host |
+-----------+----------------------------------------+------------+------------------+------------------+
| 1 | thread/sql/main | BACKGROUND | NULL | NULL |
| 2 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 3 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 4 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 5 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 6 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 7 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 8 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 9 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 10 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 11 | thread/innodb/io_handler_thread | BACKGROUND | NULL | NULL |
| 12 | thread/innodb/srv_purge_thread | BACKGROUND | NULL | NULL |
| 13 | thread/innodb/srv_monitor_thread | BACKGROUND | NULL | NULL |
| 14 | thread/innodb/srv_master_thread | BACKGROUND | NULL | NULL |
| 15 | thread/innodb/srv_error_monitor_thread | BACKGROUND | NULL | NULL |
| 16 | thread/innodb/srv_lock_timeout_thread | BACKGROUND | NULL | NULL |
| 18 | thread/sql/signal_handler | BACKGROUND | NULL | NULL |
| 19 | thread/innodb/page_cleaner_thread | BACKGROUND | NULL | NULL |
| 126505 | thread/sql/one_connection | FOREGROUND | root | localhost |
+-----------+----------------------------------------+------------+------------------+------------------+
19 rows in set (0.12 sec)
- MySQL ์๋ฒ์์ ์คํ์ค์ธ ์ค๋ ๋๋
performance_schema
๋ฐ์ดํฐ๋ฒ ์ด์ค์threads
ํ ์ด๋ธ์ ํตํด ํ์ธํ ์ ์๋ค. - ๋ฐฑ๊ทธ๋ผ์ด๋์ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ type์ผ๋ก ํ์๋์ด ์์ผ๋ฉฐ, ๊ทธ ์ค ๋ง์ง๋ง
thread/sql/one_connection
์ค๋ ๋๋ง์ด ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ด๋ค. - ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋ ๊ฐ์๋ MySQL ์๋ฒ์ ์ค์ ๋ด์ฉ์ ๋ฐ๋ผ ๊ฐ๋ณ์ ์ผ ์ ์๋ค.
- ๋์ผํ ์ด๋ฆ์ ์ค๋ ๋๊ฐ 2๊ฐ ์ด์์ฉ ๋ณด์ด๋ ๊ฒ๋ MySQL ์๋ฒ ์ค์ ์ ์ํด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์ผ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ์ด๋ค.
์ฐธ๊ณ : ์ฌ๊ธฐ์ ์๊ฐํ๋ ์ค๋ ๋ ๋ชจ๋ธ์ ์ปค๋ฎค๋ํฐ ์๋์ ์์ ์ฌ์ฉ๋๋ ์ ํต์ ์ธ ์ค๋ ๋ ๋ชจ๋ธ์ด๋ค. ์ํฐํ๋ผ์ด์ฆ ์๋์ ๊ณผ Percona MySQL์๋ฒ์์๋ ์ค๋ ๋ ํ(Thread Pool)๋ชจ๋ธ๋ ์ฌ์ฉํ ์ ์๋ค.
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋์ ์ปค๋ฅ์ ์ ๊ด๊ณ์ด๋ค. ์ ํต์ ์ธ ์ค๋ ๋ ๋ชจ๋ธ์ ์ปค๋ฅ์ ๋ณ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ํ๋์ฉ ์์ฑ๋์ง๋ง ์ค๋ ๋ํ์์๋ ํ๋์ ์ค๋ ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ปค๋ฅ์ ์์ฒญ์ ์ ๋ดํ๋ค.
- ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ ์ต์ MySQL ์๋ฒ์ ์ ์๋ ํด๋ผ์ด์ธํธ์ ์๋งํผ ์กด์ฌํ๋ฉฐ, ๊ฐ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ ์ฟผ๋ฆฌ ๋ฌธ์ฅ์ ์ฒ๋ฆฌํ๋ค.
- ์ปค๋ฅ์ ์ ์ข ๋ฃํ๋ฉด ์ปค๋ฅ์ ์ ๋ด๋นํ๋ ์ค๋ ๋๋ ๋ค์ ์ค๋ ๋ ์บ์(Thread cache)๋ก ๋๋์๊ฐ๋ค.
- ์ด๋ฏธ ์ค๋ ๋ ์บ์์ ์ผ์ ๊ฐ์ ์ด์์ ๋๊ธฐ์ค์ธ ์ค๋ ๋๊ฐ ์๋ค๋ฉด, ์ค๋ ๋ ์บ์์ ๋ฃ์ง ์๊ณ ์ค๋ ๋๋ฅผ ์ข ๋ฃ์์ผ ์ผ์ ๊ฐ์์ ์ค๋ ๋๋ง ์ค๋ ๋ ์บ์์ ์กด์ฌํ๊ฒ ํ๋ค.
- ์ด๋ ์ค๋ ๋ ์บ์์ ์ ์งํ ์ ์๋ ์ต๋ ์ค๋ ๋ ๊ฐ์๋
thread_cache_size
์์คํ ๋ณ์๋ก ์ค์ ํ๋ค. - ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ ๋ฐ์ดํฐ๋ฅผ MySQL์ ๋ฐ์ดํฐ ๋ฒํผ๋ ์บ์๋ก๋ถํฐ ๊ฐ์ ธ์ค๋ฉฐ, ๋ฒํผ๋ ์บ์์ ์๋ ๊ฒฝ์ฐ ์ง์ ๋์คํฌ ๋๋ ์ธ๋ฑ์คํ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์์ ์ฒ๋ฆฌํ๋ค.
- MyISAM ํ ์ด๋ธ์ ๋์คํฌ ์ฐ๊ธฐ ์์ ๊น์ง ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ์ง๋ง,
- InnoDB ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๋ฒํผ๋ ์บ์๊น์ง๋ง ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ๊ณ ๋๋จธ์ง ๋ฒํผ๋ก๋ถํฐ ๋์คํฌ๊น์ง ๊ธฐ๋กํ๋ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๊ฐ ์ฒ๋ฆฌํ๋ค.
์ฌ์ฉ์ ์ค๋ ๋ == ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋
MySQL ์๋ฒ์ ์ ์ํ๊ฒ ๋๋ฉด ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํด์ค ์ค๋ ๋๋ฅผ ์์ฑํด ํด๋ผ์ด์ธํธ์๊ฒ ํ ๋นํ๋ค. ์ด ์ค๋ ๋๋ ์๋จ์์ ํด๋ผ์ด์ธํธ์ ํต์ ํ๊ธฐ ๋๋ฌธ์ ํฌ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ผ๊ณ ํ๋ฉฐ, ์ฌ์ฉ์๊ฐ ์์ฒญํ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ค๋ ๋๋ผ๊ณ ๋ ํ๋ค.
MyISAM์ ๊ฒฝ์ฐ ํด๋น ์ฌํญ์ด ์์ง๋ง, InnoDB๋ ์๋์ ๊ฐ์ ์์ ์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ฒ๋ฆฌ๋๋ค.
- ์ธ์ํธ ๋ฒํผ(Insert Buffer)๋ฅผ ๋ณํฉํ๋ ์ค๋ ๋
- ๋ก๊ทธ๋ฅผ ๋์คํฌ๋ก ๊ธฐ๋กํ๋ ์ค๋ ๋
- InnoDB ๋ฒํผ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ๊ธฐ๋กํ๋ ์ค๋ ๋
- ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋ก ์ฝ์ด ์ค๋ ์ค๋ ๋
- ์ ๊ธ์ด๋ ๋ฐ๋๋ฝ์ ๋ชจ๋ํฐ๋งํ๋ ์ค๋ ๋
๊ฐ์ฅ ์ค์ํ๊ฒ์ ์ฐ๊ธฐ ์ฐ๋ ๋(Write thread)์ด๋ค.
- ์ฐ๊ธฐ ์ฐ๋ ๋๋ ๋ก๊ทธ ์ค๋ ๋(Log thread)์ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ๋ด๋ ค์ฐ๋ ์์ ์ ์ฒ๋ฆฌํจ.
- MySQL5.5 ๋ฒ์ ๋ถํฐ ๋ฐ์ดํฐ ์ฐ๊ธฐ ์ค๋ ๋์ ๋ฐ์ดํฐ ์ฝ๊ธฐ ์ค๋ ๋์ ๊ฐ์๋ฅผ 2๊ฐ ์ด์ ์ง์ ํ ์ ์๊ฒ ๋์ผ๋ฉฐ,
innodb_write_io_threads
,innodb_read_io_threads
์์คํ ๋ณ์๋ก ์ค์ ํ ์ ์๋ค.- InnoDB์์๋ ์ฝ๋๊ฑด ์ฃผ๋ก ํด๋ผ์ด์ธํธ ์ค๋ ๋์์ ์ฒ๋ฆฌ๋๊ธฐ๋๋ฌธ์ ์ฝ๊ธฐ ์ฐ๋ ๋๋ฅผ ๋ง์ด ์ค์ ํ ํ์๊ฐ ์์ง๋ง
- ์ฐ๊ธฐ ์ค๋ ๋๋ ์์ฃผ ๋ง์ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ๋์คํฌ๋ 2~4 ์คํ ๋ฆฌ์ง(DAS, SAN)๋ ๋์คํฌ๋ฅผ ์ต์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ค ์ฐ๊ธฐ ์์ ์ ์ง์ฐ(๋ฒํผ๋ง)๋์ด๋ ์ฒ๋ฆฌ๋ ์ ์์ง๋ง, ๋ฐ์ดํฐ์ ์ฝ๊ธฐ ์์ ์ ์ ๋ ์ง์ฐ๋ ์ ์๋ค.
- ๋๋ถ๋ถ ์ฐ๊ธฐ ์์ ์ ๋ฒํผ๋งํด์ ์ผ๊ด ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ํ์ฌ๋์ด ์๋ค = InnoDB
- ํ์ง๋ง MyISAM์ ์ฌ์ฉ์ ์ฐ๋ ๋๊ฐ ์ฐ๊ธฐ ์์ ๊น์ง ํจ๊ป ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋์ด ์๋ค.
- ์ด๋ฌํ ์ด์ ๋ก InnoDB์์๋ INSERT, UPDATE, DELETE ์ฟผ๋ฆฌ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ๋ก ์์ ํ ์ ์ฅ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋๋ค.
- ํ์ง๋ง MyISAM์์ ์ผ๋ฐ์ ์ธ ์ฟผ๋ฆฌ๋ ์ฐ๊ธฐ ๋ฒํผ๋ง์ ์ฌ์ฉํ ์ ์๋ค.
- ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ ์์ญ : ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ MySQL ์๋ฒ๊ฐ ์์๋๋ฉด์ ์์คํ ๋ณ์๋ก ์ค์ ํด ๋ ๋งํผ OS๋ก๋ถํฐ ํ ๋น๋๋ค.
- ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ
์ผ๋ฐ์ ์ผ๋ก ํ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ง ํ ๋น๋๋ค. ํ์์ ์ํด 2๊ฐ ์ด์์ ๋ฐ์ ์ ๋ ์์ง๋ง ํด๋ผ์ด์ธํธ ์ค๋ ๋ ์์ ๋ฌด๊ดํ๋ค. N๊ฐ๋ผ ํ๋๋ผ๋ ๋ชจ๋ ์ค๋ ๋์ ์ํด ๊ณต์ ๋๋ค.
[๋ํ์ ์ธ ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ์์ญ]
- ํ ์ด๋ธ ์บ์
- InnoDB ๋ฒํผํ
- InnoDB ์ด๋ํฐ๋ธ ํด์ ์ธ๋ฑ์ค
- InnoDB ๋ฆฌ๋ ๋ก๊ทธ ๋ฒํผ
์ธ์
๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ผ๊ณ ๋ ํํํ๋ฉฐ, ํด๋ผ์ด์ธํธ ์ค๋ ๋๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค. = ํด๋ผ์ด์ธํธ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ํด๋ผ์ด์ธํธ๊ฐ MySQL ์๋ฒ์ ์ ์ํ๋ฉด ํด๋ผ์ด์ธํธ ์ปค๋ฅ์ ์ผ๋ก๋ถํฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ค๋ ๋๋ฅผ ํ๋์ฉ ํ ๋นํ๊ฒ ๋๋ฉฐ, ํด๋น ์ค๋ ๋๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค.
- ์๋ฒ์์ ์ปค๋ฅ์
์ ์ธ์
์ด๋ผ๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ์
์ธ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ
์ด๋ผ๊ณ ๋ ํํํ๋ค.
๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ ํด๋ผ์ด์ธํธ ์ค๋ ๋๋ณ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น๋๋ฉฐ ์ ๋ ๊ณต์ ๋์ง ์๋๋ค.
- ๊ธ๋ก๋ฒ ๋ฉ๋ชจ๋ฆฌ์์ญ์ ํฌ๊ธฐ๋ ์ฃผ์ํด์ ์ค์ ํด์ผํ์ง๋ง, ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํฌ๊ฒ ์ ๊ฒฝ์ฐ์ง ์๊ณ ์ค์ ํ๋ค.
- ๊ฐ๋ฅ์ฑ์ ํฌ๋ฐํ์ง๋ง ์๋ฒ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ๋ฉ์ถฐ ๋ฒ๋ฆด ์ ๋ ์์ผ๋ฏ๋ก ์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๊ฐ ์ฟผ๋ฆฌ์ ์ฉ๋๋ณ๋ก ํ์ํ ๋๋ง ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ ๋น๋๊ณ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ํ ๋น๋์ง ์๋๋ค.
- ์ปค๋ฅ์ ์ด ์ด๋ ค ์๋ ๋์ ๊ณ์ ํ ๋น๋ ์ํ๋ก ๋จ์์๋ ๊ณต๊ฐ๋ ์๊ณ (์ปค๋ฅ์ ๋ฒํผ๋ ๊ฒฐ๊ณผ ๋ฒํผ)
- ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ์๊ฐ์๋ง ํ ๋นํ๋ค๊ฐ ๋ค์ ํด์ ํ๋ ๊ณต๊ฐ๋ ์๋ค. (์ํธ ๋ฒํผ๋ ์กฐ์ธ ๋ฒํผ)
[๋ํ์ ์ธ ๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ ์์ญ]
- ์ ๋ ฌ ๋ฒํผ(Sort Buffer)
- ์กฐ์ธ ๋ฒํผ
- ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ์บ์
- ๋คํธ์ํฌ ๋ฒํผ
MySQL์ ํ๋ฌ๊ทธ์ธ ๋ชจ๋ธ์ด๋ค.
- ์๋ง์ ์ฌ์ฉ์์ ์๊ตฌ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ํ๋ฌ๊ทธ์ธ์ด ๋ค์ ์๋ค.
- ์ค๋ก๋ฆฌ์ง ์์ง๋ฟ๋ง ์๋๋ผ ๊ฒ์์ด ํ์, ์ฌ์ฉ์ ์ธ์ฆ ๋ฑ ๋ชจ๋ ํ๋ฌ๊ธด์ผ๋ก ๊ตฌํ๋์ด ์ ๊ณต๋๋ค.
MySQL์์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ๊ณผ์ ์ ๋ณด๋ฉด ๋๋ถ๋ถ์ ์์
์ MySQL ์์ง์์ ์ฒ๋ฆฌ๋๊ณ ๋ง์ง๋ง ๋ฐ์ดํฐ ์ฝ๊ธฐ/์ฐ๊ธฐ
์์
๋ง ์คํ ๋ฆฌ์ง ์์ง์ ์ํด ์ฒ๋ฆฌ๋๋ค.
๋ฐ์ดํฐ ์ฝ๊ธฐ/์ฐ๊ธฐ
์์ ์ ๋๋ถ๋ถ 1๊ฑด์ ๋ ์ฝ๋ ๋จ์๋ก ์ฒ๋ฆฌ๋๋ค.- MySQL ์๋ฒ์์ MySQL ์์ง(์ฌ๋)์ ์คํ ๋ฆฌ์ง ์์ง(์๋์ฐจ)์ ์กฐ์ ํ๊ธฐ ์ํด ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ค.
- Handler: ์ด๋ค ๊ธฐ๋ฅ์ ํธ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ด์ ๋์ ๊ฐ์ ์ญํ ์ ํ๋ ๊ฐ์ฒด
- MySQL์๋ฒ์ ์ํ ๋ณ์ ์ค
Handler_
๋ก ์์ํ๋ ๊ฒ์ด ๋ง๋ค.Handler_
๋ก ์์ํ๋ ์ํ๋ณ์: MySQL์์ง์ด ๊ฐ ์คํ ๋ฆฌ์ง ์์ง์๊ฒ ๋ณด๋ธ ๋ช ๋ น์ ํ์
๋ค๋ฅธ ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ์ฉํ๋ ํ
์ด๋ธ์ด๋ผ๋ MySQL์์ง ์ฒ๋ฆฌ๋ด์ฉ์ ๋๋ถ๋ถ ๋์ผํ๋ฉฐ, ๋ฐ์ดํฐ ์ฝ๊ธฐ/์ฐ๊ธฐ
์์ญ์ ์ฒ๋ฆฌ๋ง ์ฐจ์ด๊ฐ ์๋ค.
- ์ค์ง์ ์ธ Group By๋ Order by ๋ฑ ๋ณต์กํ ์ฒ๋ฆฌ๋ ์คํ ๋ฆฌ์ง ์์ง์์ญ์ด ์๋ MySQL ์์ง์ ์ฟผ๋ฆฌ ์คํ๊ธฐ์์ ์ฒ๋ฆฌ๋๋ค.
- ํ๋์ ์ฟผ๋ฆฌ ์์ ์ ์ฌ๋ฌ ํ์ ์์ ์ผ๋ก ๋๋๋๋ฐ, ๊ฐ ํ์ ์์ ์ด MySQL์์ง์์ ์ฒ๋ฆฌ๋๋์ง ์คํ ๋ฆฌ์ง ์์ง์์ ์ฒ๋ฆฌ๋๋์ง ๊ตฌ๋ถํ ์ค ์์์ผํ๋ค.
MySQL์๋ฒ์์ ์ง์๋๋ ์คํ ๋ฆฌ์ง ์์ง ๋ณด๊ธฐ
mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.31 sec)
[Support ์ปฌ๋ผ]
- YES: MySQL ์๋ฒ์ ํด๋น ์คํ ๋ฆฌ์ง ์์ง์ด ํฌํจ๋์ด์๊ณ , ์ฌ์ฉ ๊ฐ๋ฅ์ผ๋ก ํ์ฑํ๋ ์ํ์
- DEFAULT: YES์ ๋์ผํ ์ํ์ด์ง๋ง ํ์ ์คํ ๋ฆฌ์ง ์์ง์์ ์๋ฏธ
- ์ด ์คํ ๋ฆฌ์ง ์์ง์ด ์์ผ๋ฉด MySQL์ด ์์๋์ง ์์ ์ ์์์ ์๋ฏธ
- NO: ํ์ฌ MySQL ์๋ฒ์ ํฌํจ๋์ง ์์์์ ์๋ฏธ
- DISABLED: ํ์ฌ MySQL ์๋ฒ์ ํฌํจ๋์์ง๋ง ํ๋ผ๋ฏธํฐ์ ์ํด ๋นํ์ฑํ๋ ์ํ
NO๋ก ํ์๋ ์คํ ๋ฆฌ์ง์์ง์ ์ฌ์ฉํ๋ ค๋ฉด MySQL ์๋ฒ๋ฅผ ๋ค์ ๋น๋(์ปดํ์ผ)ํด์ผํ๋ค. ํ์ง๋ง ์๋ฒ๋ง ์ค๋น๋์ด์๋ค๋ฉด ํ๋ฌ๊ทธ์ธ ํํ๋ก ๋น๋๋ ์คํ ๋ฆฌ์ง ์์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ํด์ ๋ผ์๋ฃ์ ์ ์๋ค.
ํ๋ก๊ทธ์ธ ํ์ธ ์ฟผ๋ฆฌ
mysql> show plugins;
+----------------------------+----------+--------------------+---------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_BEING_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_CONFIG | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_CACHE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_TABLE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
+----------------------------+----------+--------------------+---------+---------+
42 rows in set (0.56 sec)
- MySQL ์๋ฒ๋ ์คํ ๋ฆฌ์ง ์์ง ๋ฟ ์๋๋ผ ๋ค์ํ ๊ธฐ๋ฅ์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ง์ํ๋ค.
MySQL 8.0 ๋ถํฐ๋ ๊ธฐ์กด ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ์ปดํฌ๋ํธ ์ํคํ ์ฒ๋ฅผ ์ง์ํ๋ค.
ํ๋ฌ๊ทธ์ธ์ ์๋์ ๊ฐ์ ๋จ์ ์ด ์์ผ๋ฉฐ, ์ปดํฌ๋ํธ๋ ํด๋น ๋จ์ ์ ๋ณด์ํ์๋ค.
- ํ๋ฌ๊ทธ์ธ์ ์ค์ง MySQL ์๋ฒ์ ์ธํฐํ์ด์ค ํ ์ ์๊ณ , ํ๋ฌ๊ทธ์ธ๋ผ๋ฆฌ๋ ํต์ ํ ์ ์์
- ํ๋ฌ๊ทธ์ธ์ MySQL ์๋ฒ์ ๋ณ์๋ ํจ์๋ฅผ ์ง์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์์ ํ์ง ์์(์บก์ํ ์๋จ)
- ํ๋ฌ๊ทธ์ธ์ ์ํธ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์์ด์ ์ด๊ธฐํ๊ฐ ์ด๋ ค์
MySQL 5.7๋ฒ์ ๊น์ง๋ ๋น๋ฐ๋ฒํธ ๊ฒ์ฆ ๊ธฐ๋ฅ์ด ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ ๊ณต๋์์ง๋ง, MySQL 8.0์ ์ปดํฌ๋ํธ๋ก ๊ฐ์ ๋์๋ค.
// validate_password ์ค์น
install component 'file://component_validate_password';
// ์ค์น๋ ์ปดํฌ๋ํธ ํ์ธ
select * from sql.componet;
์ปดํฌ๋ํธ ์ฌ์ฉ์ ์ ๊ด๋ จ ๋ฉ๋ด์ผ์ ์ดํด๋ณด์.
์ฟผ๋ฆฌ ์คํ ๊ด์ ์์์ MySQL ๊ตฌ์กฐ
- ์ฌ์ฉ์ ์์ฒญ์ผ๋ก ๋ค์ด์จ ์ฟผ๋ฆฌ๋ฅผ ํ ํฐ(MySQL์ด ์ธ์ํ ์ ์๋ ์ต์ ๋จ์์ ์ดํ๋ ๊ธฐํธ)๋ก ๋ถ๋ฆฌํด ํธ๋ฆฌํํ์ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด๋ด๋ ์์ ์ ํ๋ค.
- ์ด ๊ณผ์ ์์ ์ฟผ๋ฆฌ์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์ฌ์ฉ์์๊ฒ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ค.
- ํ์ ๊ณผ์ ์์ ๋ง๋ค์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฟผ๋ฆฌ์ ๊ตฌ์กฐ์ ๋ฌธ์ ์ ์ ํ์ธํ๋ค.
- ์ด ๊ณผ์ ์์ ๊ฐ ํ ํฐ์ ํ ์ด๋ธ ์ด๋ฆ, ์นผ๋ผ ์ด๋ฆ ๋๋ ๋ด์ฅ ํจ์์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋งคํํด ๊ฐ์ฒด์ ์กด์ฌ ์ฌ๋ถ์ ๊ฐ์ฒด์ ์ ๊ทผ ๊ถํ๋ฑ์ ํ์ธํ๋ค.
- ์ค์ ์กด์ฌํ์ง ์๊ฑฐ๋ ๊ถํ์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด์ ํ ํฐ์ ์ด ๋จ๊ณ์์ ๊ฑธ๋ฌ์ง๋ค.
- ์ฌ์ฉ์ ์์ฒญ์ผ๋ก ๋ค์ด์จ ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์ญํ (DBMS ๋๋)
- ์ด๋ป๊ฒํ๋ฉด ์ตํฐ๋ง์ด์ ๊ฐ ๋ ๋์ ์ ํ์ ํ๋๋ก ์ ๋ํ๋๊ฐ๋ฅผ ์๋๊ฒ์ด ์ค์.
- ์ตํฐ๋ง์ด์ ๊ฐ ๋๋๋ผ๋ฉด ์คํ ์์ง๊ณผ ํธ๋ค๋ฌ๋ ์๊ณผ ๋ฐ์ด๋ค.
- ์ตํฐ๋ง์ด์ = ํ์ฌ ๊ฒฝ์์ง, ์คํ ์์ง = ์ค๊ฐ ๊ด๋ฆฌ์, ํธ๋ค๋ฌ = ์ค๋ฌด์
์ตํฐ๋ง์ด์ ๊ฐ GROUP BY๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ ํ ์ด๋ธ์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด?
- ์คํ ์์ง์ด ํธ๋ค๋ฌ์๊ฒ ์์ ํ ์ด๋ธ์ ๋ง๋ค๋ผ๊ณ ์์ฒญ
- ๋ค์ ์คํ ์์ง์ WHERE ์ ์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ค๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ
- ์ฝ์ด์จ ๋ ์ฝ๋๋ค์ 1๋ฒ์์ ์ค๋นํ ์์ ํ ์ด๋ธ๋ก ์ ์ฅํ๋ผ๊ณ ๋ค์ ํธ๋ค๋ฌ์๊ฒ ์์ฒญ
- ๋ฐ์ดํฐ๊ฐ ์ค๋น๋ ์์ ํ ์ด๋ธ์์ ํ์ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์ค๋ผ๊ณ ํธ๋ค๋ฌ์๊ฒ ๋ค์ ์์ฒญ
- ์ต์ ์ ์ผ๋ก ์คํ ์์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์๋ ๋ค๋ฅธ ๋ชจ๋๋ก ๋๊น
์คํ ์์ง์ ๋ง๋ค์ด์ง ๊ณํ๋๋ก ๊ฐ ํธ๋ค๋ฌ์๊ฒ ์์ฒญํด์ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ํธ๋ค๋ฌ ์์ฒญ์ ์ ๋ ฅ์ผ๋ก ์ฐ๊ฒฐํ๋ ์ญํ ์ ์ํํ๋ค.
- ํธ๋ค๋ฌ๋ MySQL ์๋ฒ ๊ฐ์ฅ ๋ฐ๋จ์์ ์คํ ์์ง์ ์์ฒญ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ์ ์ฅํ๊ณ ์ฝ์ด์ค๋ ์ญํ ์ ๋ด๋นํ๋ค.
- ๊ฒฐ๊ตญ ํธ๋ค๋ฌ๋ ์คํ ๋ฆฌ์ง ์์ง์ ์๋ฏธํ๋ค.
- MySQL ์๋ฒ์์ ๋ณต์ (Replication)์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ๋ด๋นํ๋ค. (16์ฅ์์ ์์ธํ)
- MySQL ์๋ฒ์์ ์ฟผ๋ฆฌ ์บ์(Query Cache)๋ ๋น ๋ฅธ ์๋ต์ ํ์๋ก ํ๋ ์น์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ๋ด๋นํ๋ค.
- ์ฟผ๋ฆฌ ์บ์๋ SQL ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ํ๊ณ , ๋์ผ SQL ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ฉด ์ฆ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
- ํ์ง๋ง ํ
์ด๋ธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ ์ฅ๋ ๊ฒฐ๊ณผ ์ค ๋ณ๊ฒฝ๋ ํ
์ด๋ธ๊ณผ ๊ด๋ จ๋ ๊ฒ๋ค์ ๋ชจ๋ ์ญ์ ํด์ผ ํ๋ค. (Invalidate)
- ์ด๋ ์ฌ๊ฐํ ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ ์ ํ์ ๋ง์ ๋ฒ๊ทธ์ ์์ธ์ด ๋๊ธฐ๋ ํ๋ค.
- ๊ฒฐ๊ตญ 8.0์ผ๋ก ์ฌ๋ผ์ค๋ฉด์ ์ฟผ๋ฆฌ ์บ์๋ ๊ธฐ๋ฅ์์ ์์ ํ ์ ๊ฑฐ๋์๋ค.
- ์ํฐํ๋ผ์ด์ฆ ์๋์ ์ ์ค๋ ๋ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ์ปค๋ฎค๋ํฐ ์๋์ ์ ์ง์ํ์ง ์๋๋ค.
- ๋ฐ๋ผ์ ์ํฐํ๋ผ์ด์ฆ ๋์ Percona Server์์ ์ ๊ณตํ๋ ์ค๋ ๋ ํ ๊ธฐ๋ฅ์ ์ดํด๋ณด์.
์ํฐํ๋ผ์ด์ฆ๋ ์ค๋ ๋ํ๊ธฐ๋ฅ์ด ์๋ฒ์ ๋ด์ฅ๋์ด์์ง๋ง, Percona Server๋ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์๋ํ๋ค.
๋ง์ฝ ์ปค๋ฎค๋ํฐ์์๋ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด, Percona Server์์ ์ค๋ ๋ ํ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ ์ฌ์ฉํ๋ฉด๋๋ค.
์ค๋ ๋ ํ์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ค๋ ๋ ๊ฐ์๋ฅผ ์ค์ฌ์, ๋์์ ์ฒ๋ฆฌ๋๋ ์์ฒญ์ด ๋ง๋คํ๋๋ผ๋ MySQL์๋ฒ์ CPU๊ฐ ์ ํ๋ ๊ฐ์์ ์ค๋ ๋ ์ฒ๋ฆฌ์๋ง ์ง์คํ ์ ์๊ฒ ํด ์๋ฒ์ ์์ ์๋ชจ๋ฅผ ์ค์ด๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค.
- ์ฌ์ค ์ค๋ ๋ํ์ด ๋์ ๋๋ ์ฑ๋ฅํฅ์์ ๋ณด์ฌ์ฃผ์ง ์๋๋ค.
- ๋์์ ์คํ์ค์ธ ์ค๋ ๋๋ค์ CPU๊ฐ ์ต๋ํ ์ ์ฒ๋ฆฌํด๋ผ ์์ค์ผ๋ก ์ค์ฌ์ ๋นจ๋ฆฌ ์ฒ๋ฆฌํ๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
- ๋ฐ๋ผ์ ์ค์ผ์ค๋ง ๊ณผ์ ์ CPU์๊ฐ์ ์ ๋๋ก ํ๋ณดํ์ง ๋ชปํ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ๊ฐ ๋ ๋๋ ค์ง ์ ๋ ์๋ค.
- ๋ฌผ๋ก ์ ํ๋ ์์ ์ค๋ ๋๋ง์ผ๋ก CPU๊ฐ ์ฒ๋ฆฌํ๋ค๋ฉด, CPU์ ํ๋ก์ธ์ ์นํ๋(Processor affinity)๋ ๋์ด๊ณ OS์ ์ฅ์์ ๋ถํ์ํ ์ปจํ ์คํธ ์ค์์น๋ฅผ ์ค์ฌ ์ค๋ฒํค๋๋ฅผ ๋ฎ์ถ ์ ์๋ค.
โ CPU์ ํ๋ก์ธ์ ์นํ๋๊ฐ ๋ญ์ง?
- ๊ธฐ๋ณธ์ ์ผ๋ก CPU ์ฝ์ด์ ๊ฐ์๋งํผ ์ค๋ ๋ ๊ทธ๋ฃน์ ์์ฑํ๋ค. (
thread_pool_size
์์คํ ๋ณ์๋ก ์กฐ์ ๊ฐ๋ฅ)- ์ผ๋ฐ์ ์ผ๋ก CPU ์ฝ์ด์ ๊ฐ์์ ๋ง์ถ๋ ๊ฒ์ด CPU ํ๋ก์ธ์ ์นํ๋๋ฅผ ๋์ด๋๋ฐ ์ข๋ค.
- MySQL ์๋ฒ๊ฐ ์ฒ๋ฆฌํด์ผ ํ ์์ฒญ์ด ์๊ธฐ๋ฉด ์ค๋ ๋ ํ๋ก ์ฒ๋ฆฌ๋ฅผ ์ด๊ดํ๋ค.
- ๋ง์ฝ ์ค๋ ๋ ํ์ด ์ฒ๋ฆฌ์ค์ธ ์์
์ด ์๋ ๊ฒฝ์ฐ
thread_pool_oversubscribe
(๊ธฐ๋ณธ๊ฐ 3)์ ์ค์ ๋ ๊ฐ์๋งํผ ์ถ๊ฐ๋ก ๋ ๋ฐ์๋ค์ฌ ์ฒ๋ฆฌํ๋ค.- ์ด ๊ฐ์ด ๋๋ฌด ํฌ๋ฉด ์ค์ผ์ค๋งํด์ผํ ์ค๋ ๋๊ฐ ๋ง์์ ธ ์ค๋ ๋ ํ์ด ๋นํจ์จ์ ์ผ๋ก ์๋ํ ์ ์๋ค.
- ์ค๋ ๋ ๊ทธ๋ฃน์ ๋ชจ๋ ์ค๋ ๋๊ฐ ์ผ์ ์ฒ๋ฆฌํ๊ณ ์๋ค๋ฉด, ์ค๋ ๋ ํ์ ํด๋น ์ค๋ ๋ ๊ทธ๋ฃน์ ์๋ก์ด ์์
์ค๋ ๋(Worker thread)๋ฅผ ์ถ๊ฐํ ์ง, ์๋๋ฉด ๊ธฐ์กด ์์
์ค๋ ๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ ์ฌ๋ถ๋ฅผ ํ๋จํด์ผํ๋ค.
- ์ค๋ ๋ ํ์ ํ์ด๋จธ ์ค๋ ๋๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ค๋ ๋ ๊ทธ๋ฃน์ ์ํ๋ฅผ ์ฒดํฌํด์
thread_pool_stall_limit
์ ์ ์๋ ๋ฐ๋ฆฌ์ด๋งํผ ์ค๋ ๋๊ฐ ์์ ์ ๋๋ด์ง ๋ชปํ๋ฉด ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํด ๊ทธ๋ฃน์ ์ถ๊ฐํ๋ค. - ์ ์ฒด ์ค๋ ๋ ํ์ ์๋ ์ค๋ ๋์ ๊ฐ์๋
thread_pool_max_threads
๊ฐ์๋ฅผ ๋๊ธธ ์ ์๋ค.
- ์ค๋ ๋ ํ์ ํ์ด๋จธ ์ค๋ ๋๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ค๋ ๋ ๊ทธ๋ฃน์ ์ํ๋ฅผ ์ฒดํฌํด์
์ฆ, ๋ชจ๋ ์ค๋ ๋ ๊ทธ๋ฃน์ ์ค๋ ๋๊ฐ ๊ฐ์ ์์
์ ์ฒ๋ฆฌํ๊ณ ์๋ ์ํ์์ ์๋ก์ด ์์ฒญ์ด ๋ค์ด์ค๋๋ผ๋ ์ค๋ ๋ ํ์ thread_pool_stall_limit
์๊ฐ ๋์ ๊ธฐ๋ค๋ ค์ผ๋ง ์๋ก์ด ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ฐ๋ผ์ ์๋ต ์๊ฐ์ด ์์ฃผ ๋ฏผ๊ฐํ ์๋น์ค๋ผ๋ฉด
thread_pool_stall_limit
๋ฅผ ์ ์ ํ ๋ฎ์ถฐ ์ค์ ํด์ผํ์ง๋ง, 0์ ๊ฐ๊น์ด ๊ฐ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค. โก๏ธ ์ด๋ด๊ฒฝ์ฐ ์ค๋ ๋ ํ์ ์ฌ์ฉํ์ง ์๋๊ฒ ๋์
โ ์ค๋ ๋ ๊ทธ๋ฃน, ์ค๋ ๋ ํ์ ์ฐจ์ด๊ฐ ๋ญ์ง?
- Percona Server ์ค๋ ๋ํ ํ๋ฌ๊ทธ์ธ์ ์ ์์ ํ์ ํ์์ ํ๋ฅผ ์ด์ฉํด ํน์ ํธ๋์ญ์ ์ด๋ ์ฟผ๋ฆฌ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ๋จผ์ ์์๋ ํธ๋์ญ์ ๋ด ์ํ SQL์ ๋นจ๋ฆฌ ์ฒ๋ฆฌํด์ฃผ๋ฉด ํด๋น ํธ๋์ญ์ ์ด ๊ฐ์ง๊ณ ์๋ ์ ๊ธ์ด ๋นจ๋ฆฌ ํด์ ๋๊ณ ์ ๊ธ ๊ฒฝํฉ์ ๋ฎ์ถฐ์ ์ ์ฒด์ ์ธ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
โ ์ ๊ธ ๊ฒฝํฉ์ด ๋ญ์ง?
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์์ ํ ์ด๋ธ ๊ตฌ์กฐ ์ ๋ณด์ ์คํ ์ด๋ ํ๋ก๊ทธ๋จ๋ฑ์ ์ ๋ณด๋ฅผ ๋์ ๋๋ฆฌ or ๋ฉํ ๋ฐ์ดํฐ๋ผ๊ณ ํ๋ค.
- MySQL 5.7๋ฒ์ ๊น์ง ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ FRM ํ์ผ์ ์ ์ฅํ๊ณ ์ผ๋ถ ํ๋ก๊ทธ๋จ๋ํ ํ์ผ๋ก ๊ด๋ฆฌํ๋ค.
- ํ์ง๋ง ํ์ผ ๊ธฐ๋ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ ์์ฑ/๋ณ๊ฒฝ ์ ํธ๋์ญ์ ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ฑ/๋ณ๊ฒฝ ์ ์๋ฒ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ฉด ์ผ๊ด๋์ง ์์ ์ํ๋ก ๋จ๋ ๋ฌธ์ ๊ฐ ์์๋ค.
- ์ด๋ฅผ DB๋ ํ ์ด๋ธ์ด ๊นจ์ก๋ค๋ผ๊ณ ํํํ๋ค.
- MySQL8.0๋ถํฐ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ InnoDB์ ํ ์ด๋ธ๋ก ์ ์ฅํ๋๋ก ๊ฐ์ ํ๋ค.
- MySQL ์๋ฒ๊ฐ ์๋ํ๋๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ ํ
์ด๋ธ์ ๋ฌถ์ด ์์คํ
ํ
์ด๋ธ์ด๋ผ๊ณ ํ๋ค.
- ex) ์ฌ์ฉ์ ์ธ์ฆ๊ณผ ๊ถํ์ ๊ด๋ จ๋ ํ ์ด๋ธ
- ์์คํ
ํ
์ด๋ธ๊ณผ ๋ฉํ๋ฐ์ดํฐ ๋ชจ๋ ๋ชจ์
mysql
DB์ ์ ์ฅํ๊ณ ์๋ค. mysql
DB๋ ํต์งธ๋กmysql.ibd
๋ผ๋ ์ด๋ฆ์ ํ ์ด๋ธ ์คํ์ด์ค์ ์ ์ฅ๋๋ค.- ์ด๋ฅผ ํตํด ์คํค๋ง ๋ณ๊ฒฝ ์์ ์ค MySQL ์๋ฒ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด๋ ์คํค๋ง ๋ณ๊ฒฝ์ ์์ ํ ์ฑ๊ณต ๋๋ ์์ ํ ์คํจ๋ก ์ ๋ฆฌ๋๋ค.
- ๋ฉํ ๋ฐ์ดํฐ๋ฅผ
mysql
DB์ ์ ์ฅํ๋ค๊ณ ํ์ง๋ง, ์ค์ ํ ์ด๋ธ ๋ชฉ๋ก์ ์ดํด๋ณด๋ฉด ๋ณด์ด์ง ์์ ๊ฒ์ด๋ค.- ์ฌ์ฉ์๊ฐ ์์ ํ์ง ๋ชปํ๊ฒ ๋ณด์ฌ์ฃผ์ง ์์ง๋ง ์ค์ ๋ก ์กด์ฌํ๋ค.
- ๋์
information_schema
์์TABLES
ํ ์ด๋ธ์ ์ ๊ณตํด์ค๋ค.- ์ด๋
mysql
DB์tables
๋ผ๋ ์ด๋ฆ์ ํ ์ด๋ธ์ ์ฐธ์กฐํ๊ณ ์๋ ๋ทฐ์ด๋ค.
- ์ด๋
mysql> select * from information_schema.tables limit 10;
+---------------+--------------------+---------------------------------------+-------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME | UPDATE_TIME | CHECK_TIME | TABLE_COLLATION | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT |
+---------------+--------------------+---------------------------------------+-------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------------+
| def | information_schema | CHARACTER_SETS | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 384 | 0 | 16434816 | 0 | 0 | NULL | 2024-04-17 23:53:11 | NULL | NULL | utf8_general_ci | NULL | max_rows=43690 | |
| def | information_schema | COLLATIONS | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 231 | 0 | 16704765 | 0 | 0 | NULL | 2024-04-17 23:53:11 | NULL | NULL | utf8_general_ci | NULL | max_rows=72628 | |
| def | information_schema | COLLATION_CHARACTER_SET_APPLICABILITY | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 195 | 0 | 16357770 | 0 | 0 | NULL | 2024-04-17 23:53:11 | NULL | NULL | utf8_general_ci | NULL | max_rows=86037 | |
| def | information_schema | COLUMNS | SYSTEM VIEW | MyISAM | 10 | Dynamic | NULL | 0 | 0 | 281474976710655 | 1024 | 0 | NULL | 2024-04-17 23:53:11 | 2024-04-17 23:53:11 | NULL | utf8_general_ci | NULL | max_rows=2794 | |
| def | information_schema | COLUMN_PRIVILEGES | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 2565 | 0 | 16757145 | 0 | 0 | NULL | 2024-04-17 23:53:11 | NULL | NULL | utf8_general_ci | NULL | max_rows=6540 | |
| def | information_schema | ENGINES | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 490 | 0 | 16574250 | 0 | 0 | NULL | 2024-04-17 23:53:11 | NULL | NULL | utf8_general_ci | NULL | max_rows=34239 | |
| def | information_schema | EVENTS | SYSTEM VIEW | MyISAM | 10 | Dynamic | NULL | 0 | 0 | 281474976710655 | 1024 | 0 | NULL | 2024-04-17 23:53:11 | 2024-04-17 23:53:11 | NULL | utf8_general_ci | NULL | max_rows=619 | |
| def | information_schema | FILES | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 2659 | 0 | 16743723 | 0 | 0 | NULL | 2024-04-17 23:53:11 | NULL | NULL | utf8_general_ci | NULL | max_rows=6309 | |
| def | information_schema | GLOBAL_STATUS | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 3268 | 0 | 16755036 | 0 | 0 | NULL | 2024-04-17 23:53:11 | NULL | NULL | utf8_general_ci | NULL | max_rows=5133 | |
| def | information_schema | GLOBAL_VARIABLES | SYSTEM VIEW | MEMORY | 10 | Fixed | NULL | 3268 | 0 | 16755036 | 0 | 0 | NULL | 2024-04-17 23:53:11 | NULL | NULL | utf8_general_ci | NULL | max_rows=5133 | |
+---------------+--------------------+---------------------------------------+-------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------------+
10 rows in set (0.07 sec)
mysql> select * from mysql.tables;
ERROR 1146 (42S02): Table 'mysql.tables' doesn't exist
์ฑ ์์๋ ์ ๊ทผ์ด ๊ฑฐ์ ๋จ์ด๋ผ๊ณ ์ถ๋ ฅ๋๋ค๊ณ ํ์ง๋ง ๋๋ ์๋ค๊ณ ๋์จ๋ค.
EROR 3554 (HY000): Access to data dictionary table 'mysql. tables' is rejected.
- InnoDB์ธ MyISAM, CSV ๋ฑ์ ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ์ฉํ๋ ํ ์ด๋ธ๋ค์ SDI(Serialized Dictionary Information)ํ์ผ์ ์ฌ์ฉํ๋ค.
- SDI๋ ๊ธฐ์กด์ *.FRM ํ์ผ๊ณผ ๋์ผํ ์ญํ ์ ํ๋ค.
- SDI๋ ์ด๋ฆ ๊ทธ๋๋ก ์ง๋ ฌํ๋ฅผ ์ํ ํฌ๋งท์ด๋ฏ๋ก, InnoDB ํ ์ด๋ธ ๊ตฌ์กฐ๋ SDI๋ก ๋ณํํ ์ ์๋ค.