์ธ์คํด์ค์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ฉ๋๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ(OOM) ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ํํ ๋ฌธ์ ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ ์ํ๋ก ์คํ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๋ ์ฑ๋ฅ ๋ฌธ์ , ์ค๋จ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ค์ดํ์์ ์ผ์ผํค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ผ๋ถ MySQL ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, ๋ชจ๋ ์ฟผ๋ฆฌ ์ํฌ๋ก๋๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ๊ณต์ ํ๊ณ ํญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ฉฐ MySQL ํ๋ก์ธ์ค๊ฐ ์ค์ง๋ ๋๋ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋ฉ๋๋ค. ์ผ๋ถ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์ธ์ ๊ธฐ๋ฐ์ด์ด์ ์ธ์ ์ด ๋ซํ๋ ์ฆ์ ํด๋น ์ธ์ ์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ ์์คํ ์ผ๋ก ๋ค์ ํด์ ๋ฉ๋๋ค.
MySQL์ฉ Cloud SQL ์ธ์คํด์ค์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ฐ์ํ ๋๋ง๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ ๋๋ ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๊ณ ํด์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. MySQL ๋ฉ๋ชจ๋ฆฌ ์๋น๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ์ฃผ์ ๋ถ๋ถ์ผ๋ก ๋๋ฉ๋๋ค.
- ์ค๋ ๋ ๋ฐ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์๋น
- ๋ฒํผ ๋ฉ๋ชจ๋ฆฌ ์๋น
- ์บ์ ๋ฉ๋ชจ๋ฆฌ ์๋น
์ค๋ ๋ ๋ฐ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์๋น
๊ฐ ์ฌ์ฉ์ ์ธ์ ์ ์ธ์ ์์ ์ฌ์ฉํ๋ ์คํ ์ค์ธ ์ฟผ๋ฆฌ, ๋ฒํผ, ์บ์์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๋ฉฐ MySQL์ ์ธ์ ๋งค๊ฐ๋ณ์๋ก ์ ์ด๋ฉ๋๋ค. ์ฃผ์ ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
thread_stack
net_buffer_length
read_buffer_size
read_rnd_buffer_size
sort_buffer_size
join_buffer_size
max_heap_table_size
tmp_table_size
ํน์ ์์ ์ ์คํ ์ค์ธ ์ฟผ๋ฆฌ๊ฐ N๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ ์ฟผ๋ฆฌ๋ ์ธ์ ์ค์ ์ด๋ฌํ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฒํผ ๋ฉ๋ชจ๋ฆฌ ์๋น
์ด ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ถ์ ๋ชจ๋ ์ฟผ๋ฆฌ์ ๊ณตํต์ ์ด๋ฉฐ Innodb_buffer_pool_size
, Innodb_log_buffer_size
, key_buffer_size
์ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ์ ์ด๋ฉ๋๋ค.
์บ์ ๋ฉ๋ชจ๋ฆฌ ์๋น
์บ์ ๋ฉ๋ชจ๋ฆฌ์๋ ๋์ผํ ํ์ ์ฟผ๋ฆฌ์ ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ํด ์ฟผ๋ฆฌ ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ ์บ์๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ํ ํธ๋์ญ์
์ด ์คํ๋๋ ๋์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๋ํ ๋ณ๊ฒฝ์ฌํญ์ ๋ณด์กดํ๊ธฐ ์ํ binlog
์บ์๊ฐ ํฌํจ๋๋ฉฐ binlog_cache_size
๋ก ์ ์ด๋ฉ๋๋ค.
๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ์๋น
๋ฉ๋ชจ๋ฆฌ๋ ์กฐ์ธ ๋ฐ ์ ๋ ฌ ์์
์์๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ฟผ๋ฆฌ์์ ์กฐ์ธ ๋๋ ์ ๋ ฌ ์์
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์ฟผ๋ฆฌ๊ฐ join_buffer_size
๋ฐ sort_buffer_size
๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด์ ๋ณ๊ฐ๋ก ์ฑ๋ฅ ์คํค๋ง๋ฅผ ์ฌ์ฉ ์ค์ ํด๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋น๋ฉ๋๋ค. ์ฑ๋ฅ ์คํค๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํ์ธํ๋ ค๋ฉด ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
SELECT *
FROM
performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/performance_schema/%';
MySQL์๋ ์ฑ๋ฅ ์คํค๋ง๋ฅผ ํตํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๋๋ก ์ค์ ํ ์ ์๋ ๋ค์ํ ๊ณ์ธก์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ MySQL ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
๋๋ ๋ฐ์ดํฐ ์ฝ์
์ ์ํ MyISAM ๊ด๋ จ ๋งค๊ฐ๋ณ์๋ bulk_insert_buffer_size
์
๋๋ค.
MySQL์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐฉ์์ ๋ํ ์์ธํ ๋ด์ฉ์ MySQL ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๊ถ์ฅ์ฌํญ
๋ค์ ์น์ ์์๋ ์ต์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ํ ๋ช ๊ฐ์ง ๊ถ์ฅ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
์ธก์ ํญ๋ชฉ ํ์๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์๋ณ
์ธก์ ํญ๋ชฉ ํ์๊ธฐ์ database/memory/components.usage
์ธก์ ํญ๋ชฉ์ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ฒํ ํ ์ ์์ต๋๋ค.
database/memory/components.cache
๋ฐ database/memory/components.free
๋ฅผ ๊ฒฐํฉํ ๋ฉ๋ชจ๋ฆฌ๊ฐ 5% ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ OOM ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์ํ์ด ๋์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๊ณ OOM ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด database/memory/components.usage
์์ ์ธก์ ํญ๋ชฉ ๊ธฐ์ค์ ์กฐ๊ฑด์ด 95% ์ด์์ธ ์๋ฆผ ์ ์ฑ
์ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์ ํ๋ ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ์ ๊ถ์ฅ ์๋ฆผ ๊ธฐ์ค์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ | ๊ถ์ฅ ์๋ฆผ ๊ธฐ์ค |
---|---|
์ต๋ 100GB | 95% |
100GB~200GB | 96% |
200GB~300GB | 97% |
300GB ์ด๊ณผ | 98% |
๋ฉ๋ชจ๋ฆฌ ์๋น ๊ณ์ฐ
MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ณ์ฐํ์ฌ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํฉํ ์ธ์คํด์ค ์ ํ์ ์ ํํฉ๋๋ค. ๋ค์ ์์์ ์ฌ์ฉํฉ๋๋ค.
์ต๋ MySQL ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ = innodb_buffer_pool_size
+ innodb_additional_mem_pool_size
+ innodb_log_buffer_size
+ tmp_table_size
+ key_buffer_size
+ ((read_buffer_size
+ read_rnd_buffer_size
+ sort_buffer_size
+ join_buffer_size
) x max_connections
)
์์์ ์ฌ์ฉ๋ ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
innodb_buffer_pool_size
: InnoDB์์ ํ ์ด๋ธ ๋ฐ ์์ธ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ ๋ฒํผ ํ์ ํฌ๊ธฐ(๋ฐ์ดํธ)์ ๋๋ค.innodb_additional_mem_pool_size
: InnoDB์์ ๋ฐ์ดํฐ ๋์ ๋๋ฆฌ ์ ๋ณด์ ๊ธฐํ ๋ด๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ํ ํฌ๊ธฐ(๋ฐ์ดํธ)์ ๋๋ค.innodb_log_buffer_size
: InnoDB๊ฐ ๋์คํฌ์ ๋ก๊ทธ ํ์ผ์ ์ฐ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฒํผ์ ํฌ๊ธฐ(๋ฐ์ดํธ)์ ๋๋ค.tmp_table_size
: MEMORY ์คํ ๋ฆฌ์ง ์์ง ๋ฐ MySQL 8.0.28๋ถํฐ TempTable ์คํ ๋ฆฌ์ง ์์ง์์ ์์ฑ๋ ๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ ์์ ํ ์ด๋ธ์ ์ต๋ ํฌ๊ธฐ์ ๋๋ค.Key_buffer_size
: ์์ธ ๋ธ๋ก์ ์ฌ์ฉ๋๋ ๋ฒํผ์ ํฌ๊ธฐ์ ๋๋ค. MyISAM ํ ์ด๋ธ์ ์์ธ ๋ธ๋ก์ ๋ฒํผ๋ง๋๋ฉฐ ๋ชจ๋ ์ค๋ ๋์์ ๊ณต์ ๋ฉ๋๋ค.Read_buffer_size
: MyISAM ํ ์ด๋ธ์ ์์ฐจ์ ์ค์บ์ ์ํํ๋ ๊ฐ ์ค๋ ๋์์ ์ค์บํ๋ ํ ์ด๋ธ๋ง๋ค ์ด ํฌ๊ธฐ์ ๋ฒํผ(๋ฐ์ดํธ)๋ฅผ ํ ๋นํฉ๋๋ค.Read_rnd_buffer_size
: ์ด ๋ณ์๋ MyISAM ํ ์ด๋ธ์์ ์ฝ๊ธฐ, ๋ชจ๋ ์คํ ๋ฆฌ์ง ์์ง, ๋ค์ค ๋ฒ์ ์ฝ๊ธฐ ์ต์ ํ์ ์ฌ์ฉ๋ฉ๋๋ค.Sort_buffer_size
: ์ ๋ ฌ์ ์ํํด์ผ ํ๋ ๊ฐ ์ธ์ ์์ ์ด ํฌ๊ธฐ์ ๋ฒํผ๋ฅผ ํ ๋นํฉ๋๋ค. sort_buffer_size๋ ์คํ ๋ฆฌ์ง ์์ง์ ๊ตญํ๋์ง ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ต์ ํ๋ฅผ ์ํด ์ ์ฉ๋ฉ๋๋ค.Join_buffer_size
: ์ผ๋ฐ ์์ธ ์ค์บ, ๋ฒ์ ์์ธ ์ค์บ, ์์ธ์ ์ฌ์ฉํ์ง ์์ ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ ์ํํ๋ ์กฐ์ธ์ ์ฌ์ฉ๋๋ ๋ฒํผ์ ์ต์ ํฌ๊ธฐ์ ๋๋ค.Max_connections
: ํ์ฉ๋๋ ์ต๋ ๋์ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์์ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์๋น๋์ด ๋ง์ ๋ฌธ์ ํด๊ฒฐ
SHOW PROCESSLIST
๋ฅผ ์คํํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๊ณ ์๋ ์งํ ์ค์ธ ์ฟผ๋ฆฌ๋ฅผ ํ์ธํฉ๋๋ค. ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ค๋ ๋์ ์คํ ์ค์ธ SQL ๋ฌธ์ ํ์ํ๊ณ ์ต์ ํ๋ฅผ ์๋ํฉ๋๋ค. ์ํ ๋ฐ ๊ธฐ๊ฐ ์ด์ ์ฃผ์ํฉ๋๋ค.mysql> SHOW [FULL] PROCESSLIST;
BUFFER POOL AND MEMORY
์น์ ์SHOW ENGINE INNODB STATUS
์์ ํ์ฌ ๋ฒํผ ํ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํ์ธํฉ๋๋ค. ๋ฒํผ ํ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.mysql> SHOW ENGINE INNODB STATUS \G ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 398063986; in additional pool allocated 0 Dictionary memory allocated 12056 Buffer pool size 89129 Free buffers 45671 Database pages 1367 Old database pages 0 Modified db pages 0
MySQL์
SHOW variables
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์นด์ดํฐ ๊ฐ์ ํ์ธํฉ๋๋ค. ์์ ํ ์ด๋ธ ์, ์ค๋ ๋ ์, ํ ์ด๋ธ ์บ์ ์, ๋ํฐ ํ์ด์ง, ์ด๋ฆฐ ํ ์ด๋ธ, ๋ฒํผ ํ ์ฌ์ฉ๋๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.mysql> SHOW variables like 'VARIABLE_NAME'
๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
๋ค์ํ ๊ตฌ์ฑ์์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ถ์ํ ํ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ ํ ํ๋๊ทธ๋ฅผ ์ค์ ํฉ๋๋ค. MySQL์ฉ Cloud SQL ์ธ์คํด์ค์ ํ๋๊ทธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด Google Cloud ์ฝ์ ๋๋ gcloud CLI๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. Google Cloud ์ฝ์์ ์ฌ์ฉํ์ฌ ํ๋๊ทธ ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ํ๋๊ทธ ์น์ ์ ์์ ํ๊ณ ํ๋๊ทธ๋ฅผ ์ ํํ ๋ค์ ์ ๊ฐ์ ์ ๋ ฅํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฌ์ ํ ๋๊ณ ์คํ ์ค์ธ ์ฟผ๋ฆฌ์ ํ๋๊ทธ ๊ฐ์ด ์ต์ ํ๋์ด ์๋ค๊ณ ์๊ฐ๋๋ฉด ์ธ์คํด์ค ํฌ๊ธฐ๋ฅผ ๋๋ ค OOM์ ๋ฐฉ์งํ์ธ์.