์ธ์คํด์ค์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ฉ๋๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ (OOM) ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ํํ ๋ฌธ์ ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ ์ํ๋ก ์คํ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค๋ ์ฑ๋ฅ ๋ฌธ์ , ์ค๋จ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ค์ดํ์์ ์ผ์ผํค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ผ๋ถ MySQL ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, ๋ชจ๋ ์ฟผ๋ฆฌ ์ํฌ๋ก๋๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ๊ณต์ ํ๊ณ ํญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ฉฐ MySQL ํ๋ก์ธ์ค๊ฐ ์ค์ง๋ ๋๋ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋ฉ๋๋ค. ์ผ๋ถ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์ธ์ ๊ธฐ๋ฐ์ด์ด์ ์ธ์ ์ด ๋ซํ๋ ์ฆ์ ํด๋น ์ธ์ ์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ ์์คํ ์ผ๋ก ๋ค์ ํด์ ๋ฉ๋๋ค.
MySQL์ฉ Cloud SQL ์ธ์คํด์ค์์ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ฐ์ํ ๋๋ง๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ ๋๋ ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๊ณ ํด์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. MySQL ๋ฉ๋ชจ๋ฆฌ ์๋น๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ์ฃผ์ ๋ถ๋ถ์ผ๋ก ๋๋ฉ๋๋ค.
- ์ค๋ ๋ ๋ฐ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์๋น
- ๋ฒํผ ๋ฉ๋ชจ๋ฆฌ ์๋น
- ์บ์ ๋ฉ๋ชจ๋ฆฌ ์๋น
์ค๋ ๋ ๋ฐ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์๋น
๊ฐ ์ฌ์ฉ์ ์ธ์ ์ ์ธ์ ์์ ์ฌ์ฉํ๋ ์คํ ์ค์ธ ์ฟผ๋ฆฌ, ๋ฒํผ, ์บ์์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๋ฉฐ MySQL์ ์ธ์ ๋งค๊ฐ๋ณ์๋ก ์ ์ด๋ฉ๋๋ค. ์ฃผ์ ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
thread_stacknet_buffer_lengthread_buffer_sizeread_rnd_buffer_sizesort_buffer_sizejoin_buffer_sizemax_heap_table_sizetmp_table_size
ํน์ ์์ ์ ์คํ ์ค์ธ ์ฟผ๋ฆฌ๊ฐ N๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ ์ฟผ๋ฆฌ๋ ์ธ์ ์ค์ ์ด๋ฌํ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฒํผ ๋ฉ๋ชจ๋ฆฌ ์๋น
์ด ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ถ์ ๋ชจ๋ ์ฟผ๋ฆฌ์ ๊ณตํต์ ์ด๋ฉฐ innodb_buffer_pool_size, innodb_log_buffer_size, key_buffer_size์ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ์ ์ด๋ฉ๋๋ค.
innodb_buffer_pool_size ํ๋๊ทธ๋ก ๊ตฌ์ฑ๋๋ InnoDB ๋ฒํผ ํ์ MySQL์ฉ Cloud SQL ์ธ์คํด์ค์์ ์๋นํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ฉฐ ์ฑ๋ฅ ํฅ์์ ์ํ ์บ์ ์ญํ ์ ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ (OOM) ์ด๋ฒคํธ์ ์ํ์ ์ค์ด๋ ค๋ฉด ๊ด๋ฆฌํ ๋ฒํผ ํ์ ์ฌ์ฉ ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
์บ์ ๋ฉ๋ชจ๋ฆฌ ์๋น
์บ์ ๋ฉ๋ชจ๋ฆฌ์๋ ๋์ผํ ํ์ ์ฟผ๋ฆฌ์ ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ํด ์ฟผ๋ฆฌ ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ ์บ์๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ํ ํธ๋์ญ์
์ด ์คํ๋๋ ๋์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๋ํ ๋ณ๊ฒฝ์ฌํญ์ ๋ณด์กดํ๊ธฐ ์ํ 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 ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๊ถ์ฅ์ฌํญ
๋ค์ ์น์ ์์๋ ์ต์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ํ ๋ช ๊ฐ์ง ๊ถ์ฅ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
๊ด๋ฆฌํ ๋ฒํผ ํ ์ฌ์ฉ ์ค์
๊ด๋ฆฌํ ๋ฒํผ ํ์ ์ฌ์ฉ ์ค์ ํ๋ฉด ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ ๋ InnoDB ๋ฒํผ ํ (๋๋ innodb_buffer_pool_size)์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋์ ์ค์ผ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก์ธ์ค์์ ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ๋ณด๋ฉ๋๋ค.
์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ผ๋ฉด ์ธ์คํด์ค์์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ (OOM) ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. OOM ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์ธ์คํด์ค์์ ๊ด๋ฆฌํ ๋ฒํผ ํ์ ์ฌ์ฉ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด 10๋ถ ์ด์ ๋ฎ์ ๊ฐ์ผ๋ก ์์ ํ๋๋ฉด ๊ด๋ฆฌ ๋ฒํผ ํ์ innodb_buffer_pool_size ๊ฐ์ ์๋ ๊ฐ์ผ๋ก ์ ์ง์ ์ผ๋ก ๋๋ฆฝ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์์ ํ๋ ํ innodb_buffer_pool_size ํ๋๊ทธ ๊ฐ์ ์ ํํ ๊ฐ์ผ๋ก ๋๋ฆด ์๋ ์์ต๋๋ค.
์๊ฒฉ ๊ธฐ์ค
๊ณต์ ์ฝ์ด ์ธ์คํด์ค, MySQL 5.6 ๋๋ MySQL 5.7์์๋ ๊ด๋ฆฌํ ๋ฒํผ ํ์ ์ฌ์ฉ ์ค์ ํ ์ ์์ต๋๋ค.
๊ธฐ๋ฅ ์ฌ์ฉ ์ค์
์ธ์คํด์ค์ ๊ด๋ฆฌํ ๋ฒํผ ํ์ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด innodb_cloudsql_managed_buffer_pool ํ๋๊ทธ๋ฅผ on๋ก ์ค์ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋๊ทธ ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋๊ทธ ์ค์ ์ ์ฐธ๊ณ ํ์ธ์.
innodb_cloudsql_managed_buffer_pool ํ๋๊ทธ์ ๊ฐ์ ๋ณ๊ฒฝํด๋ Cloud SQL ์ธ์คํด์ค๋ฅผ ๋ค์ ์์ํ ํ์๊ฐ ์์ต๋๋ค.
๊ด๋ฆฌํ ๋ฒํผ ํ์ ์ฌ์ฉ ์ค์ ํ๊ณ ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋์ด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ณธ ์๊ณ๊ฐ ๋น์จ์ ์ด๊ณผํ๋ฉด Cloud SQL์์ innodb_buffer_pool_size์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์์ํฉ๋๋ค.
์ด ๊ธฐ๋ณธ ์๊ณ๊ฐ ๋น์จ์ ์ธ์คํด์ค์ RAM ์ฉ๋์ ๋ฐ๋ผ 90% ~97% ๋ก ๋ฌ๋ผ์ง๋๋ค. ๊ธฐ์ค์ ์์ ํ๋ ค๋ฉด innodb_cloudsql_managed_buffer_pool_threshold_pct ํ๋๊ทธ๋ฅผ ๋ค๋ฅธ ๋ฐฑ๋ถ์จ ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ์ค์ ์ 97%๋ก ์กฐ์ ํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
gcloud sql instances patch INSTANCE_NAME \
--database-flags=EXISTING_FLAGS,innodb_cloudsql_managed_buffer_pool=on,\
innodb_cloudsql_managed_buffer_pool_threshold_pct=97
innodb_cloudsql_managed_buffer_pool_threshold_pct ํ๋๊ทธ๋ฅผ 50~99 ์ฌ์ด์ ์ ์ ๊ฐ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์๊ณ๊ฐ์ ๋ณ๊ฒฝํด๋ Cloud SQL ์ธ์คํด์ค๋ฅผ ๋ค์ ์์ํ ํ์๊ฐ ์์ต๋๋ค.
๊ด๋ฆฌ ๋ฒํผ ํ์ ์ด์ ๊ฐ์ ํ 10๋ถ ์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์์ ํ๋๋ฉด innodb_buffer_pool_size ํ๋๊ทธ๋ฅผ ๋๋ฆฝ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด 70% ์ดํ๋ก ์ ์ง๋์ด์ผ ์ฆ๊ฐ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ๊ธฐ์ค์ ์์ ํ๋ ค๋ฉด innodb_cloudsql_managed_buffer_pool_tuneup_pct ํ๋๊ทธ๋ฅผ ๋ค๋ฅธ ๋ฐฑ๋ถ์จ ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฆ๊ฐ ๊ธฐ์ค์ 80%๋ก ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
gcloud sql instances patch INSTANCE_NAME \
--database-flags=EXISTING_FLAGS,innodb_cloudsql_managed_buffer_pool=on,\
innodb_cloudsql_managed_buffer_pool_tuneup_pct=80
์กฐ์ ๋ก์ง
๊ด๋ฆฌํ ๋ฒํผ ํ์ innodb_buffer_pool_size๋ฅผ ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋ ๊ณ ์ ์ต์ ํฌ๊ธฐ๋ก ์ถ์ํ์ง ์์ต๋๋ค. ๋์ ๊ตฌ์ฑ๋ ์๊ณ๊ฐ ๋น์จ(innodb_cloudsql_managed_buffer_pool_threshold_pct) ์๋๋ก ์ด ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋จ์ด์ง ๋๊น์ง ๋ฐ๋ณต์ ์ผ๋ก ๋์ ์ผ๋ก ํฌ๊ธฐ๋ฅผ ์ค์
๋๋ค. innodb_buffer_pool_size ํ๋๊ทธ ๊ฐ์ ์กฐ์ ํ์ฌ ๋ฒํผ ํ์ ์ถ์ํ๊ณ InnoDB์ ๋ด์ฅ ๋ฒํผ ํ ํฌ๊ธฐ ์กฐ์ ๊ธฐ๋ฅ์ ํ์ฉํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ฐ์ํด๋ ์ฑ๋ฅ์ ์ฌ๊ฐํ ์ํฅ์ ๋ฏธ์น๋ ํฌ๊ธฐ๋ก innodb_buffer_pool_size๊ฐ ์ถ์๋์ง ์๋๋ก ์ด ๊ธฐ๋ฅ์ ๋ด๋ถ ์์ ํํ์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ์ ๋ฒํผ ํ์ ํ ๋นํด์ผ ํ๋ ์ด ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ์ ๋น์จ์ ๋ํ๋
๋๋ค.
| MySQL ์ปจํ ์ด๋ ํฌ๊ธฐ | ์ต์ ๋ฒํผ ํ ํฌ๊ธฐ |
|---|---|
| 1025~2048MB | 35% |
| 2049~6528MB | 30% |
| 6529~11315MB | 40% |
| 11316~22630MB | 45% |
| ๊ธฐํ ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ) | 50% |
innodb_buffer_pool_size๊ฐ ๊ฐ์ํ๋ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. ๋ค์ ํ์๋ ๊ฐ ์ปจํ
์ด๋ ํฌ๊ธฐ์ ๊ฐ์ ๋น์จ์ด ๋์ ์์ต๋๋ค.
| MySQL ์ปจํ ์ด๋ ํฌ๊ธฐ | ๊ฐ์์จ |
|---|---|
| 1025~2048MB | 15% |
| 2049~6528MB | 11% |
| 6529~11315MB | 8% |
| 11316~22630MB | 6% |
| ๊ธฐํ ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ) | 5% |
์๋ก์ด ๊ฐ์๋ ๊ฐ์ ๊ณ์ฐํ ํ ๊ด๋ฆฌ ๋ฒํผ ํ์ innodb_buffer_pool_size์ innodb_buffer_pool_instances ๋ฐ innodb_buffer_pool_chunk_size ๊ฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐฐ์๋ก ๋ฐ์ฌ๋ฆผํฉ๋๋ค.
๊ด๋ฆฌํ ๋ฒํผ ํ์์ innodb_buffer_pool_size ๊ฐ์ ์กฐ์ ํ๋ฉด ๋ณ๊ฒฝ์ฌํญ์ด Google Cloud ์ฝ์์ ๋ฐ์๋์ง ์์ต๋๋ค. ๊ด๋ฆฌ ๋ฒํผ ํ์ด ์ฌ์ฉ ์ค์ ๋ ๊ฒฝ์ฐ innodb_buffer_pool_size์ ํ์ฌ ๊ฐ์ ๋ณด๋ ค๋ฉด MySQL ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_size';
์ ํ์ฌํญ
๋ฒํผ ํ ํฌ๊ธฐ๋ฅผ ์ค์ฌ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ OOM์ ๋ฐฉ์งํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ผ๋ถ ์ํฌ๋ก๋๊ฐ ์ง์ ๋ถ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๊ฑฐ๋ ๊ฐ์๊ธฐ ์ฆ๊ฐํ ์ ์๊ณ , ์ผ๋ถ Cloud SQL ์ธ์คํด์ค๊ฐ ํ๋ก๋น์ ๋ ๋ถ์กฑ์ผ ์ ์์ผ๋ฉฐ, ๋ฒํผ ํ์ด ์๋ฐ์ ๋์ง ์์์ ์ ์์ต๋๋ค. Cloud SQL์ ๋ฉ๋ชจ๋ฆฌ ์ํฌ๋ก๋์ ๊ฐ์์ค๋ฌ์ด ๋ณํ๋ฅผ ์์ฉํ ๋งํผ ๋น ๋ฅด๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ์ง ๋ชปํ ์ ์์ต๋๋ค. ๋ํ Cloud SQL์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ํ๋๊ทธ์ ์๋ชป ๊ตฌ์ฑ๋ ๊ฐ์ ์์ฉํ ์ ์์ต๋๋ค.
๋ชจ๋ํฐ๋ง
MySQL ์ค๋ฅ ๋ก๊ทธ์์ ๊ด๋ฆฌํ ๋ฒํผ ํ์ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค. Cloud Logging ๋ก๊ทธ ํ์๊ธฐ์์ mysql.err ๋ก๊ทธ๋ฅผ ํํฐ๋งํ์ฌ Managed Buffer Pool Plugin: ๋๋ Tuner Plugin: ์ ๋์ฌ๊ฐ ์๋ ํญ๋ชฉ์ ์ฐพ์ ์ต์ ์กฐ์ ์ด๋ฒคํธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๊ด๋ฆฌํ ๋ฒํผ ํ์ด ์ฒ์ ์์๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
[Note] [MY-000000] [Server] Managed Buffer Pool Plugin: MySQL Instance memory limit: 29533, Current MySQL memory usage: 2663641088, Max Allowed MySQL memory usage: 30732730368 ...
๋ค์ ๋ก๊ทธ๋ innodb_buffer_pool_size์ ์๋ ๊ฐ์์ ์๋ฅผ ๋ณด์ฌ์ค๋๋ค.
[Note] [MY-000000] [Server] Managed Buffer Pool Plugin: Decreasing InnoDB Buffer Pool Size.
[Note] [MY-000000] [Server] Managed Buffer Pool Plugin: Updated innodb_buffer_pool_size=805306368 bytes.
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ด๋ฆฌํ ๋ฒํผ ํ ์กฐ์ ์ด๋ฒคํธ๋ฅผ ์ถ์ ํ๋๋ก ๋ก๊ทธ ๊ธฐ๋ฐ ์ธก์ ํญ๋ชฉ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
Cloud Monitoring ์ธก์ ํญ๋ชฉ ํ์๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์๋ณ
Cloud Monitoring ์ธก์ ํญ๋ชฉ ํ์๊ธฐ์ database/memory/components.usage ์ธก์ ํญ๋ชฉ์ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ฒํ ํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก database/memory/components.cache ๋ฐ database/memory/components.free๋ฅผ ๊ฒฐํฉํ ๋ฉ๋ชจ๋ฆฌ๊ฐ 10% ๋ฏธ๋ง์ด๋ฉด OOM ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์ํ์ด ๋์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๊ณ OOM ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด database/memory/components.usage์์ ์ธก์ ํญ๋ชฉ ๊ธฐ์ค์ ์กฐ๊ฑด์ด ์๋ ์๋ฆผ ์ ์ฑ
์ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์ ํ๋ ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ์ ๊ถ์ฅ ์๋ฆผ ๊ธฐ์ค์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
| ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ | ๊ถ์ฅ ์๋ฆผ ๊ธฐ์ค |
|---|---|
| 16GB ์ดํ | 90% |
| 16GBย ์ด๊ณผ | 95% |
๋ฉ๋ชจ๋ฆฌ ์๋น ๊ณ์ฐ
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 0MySQL์
SHOW variables๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์นด์ดํฐ ๊ฐ์ ํ์ธํฉ๋๋ค. ์์ ํ ์ด๋ธ ์, ์ค๋ ๋ ์, ํ ์ด๋ธ ์บ์ ์, ๋ํฐ ํ์ด์ง, ์ด๋ฆฐ ํ ์ด๋ธ, ๋ฒํผ ํ ์ฌ์ฉ๋๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.mysql> SHOW variables like 'VARIABLE_NAME'
๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
๋ค์ํ ๊ตฌ์ฑ์์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ถ์ํ ํ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ ํ ํ๋๊ทธ๋ฅผ ์ค์ ํฉ๋๋ค. MySQL์ฉ Cloud SQL ์ธ์คํด์ค์ ํ๋๊ทธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด Google Cloud ์ฝ์ ๋๋ gcloud CLI๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. Google Cloud ์ฝ์์ ์ฌ์ฉํ์ฌ ํ๋๊ทธ ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ํ๋๊ทธ ์น์ ์ ์์ ํ๊ณ ํ๋๊ทธ๋ฅผ ์ ํํ ๋ค์ ์ ๊ฐ์ ์ ๋ ฅํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฌ์ ํ ๋๊ณ ์คํ ์ค์ธ ์ฟผ๋ฆฌ์ ํ๋๊ทธ ๊ฐ์ด ์ต์ ํ๋์ด ์๋ค๊ณ ์๊ฐ๋๋ฉด ์ธ์คํด์ค ํฌ๊ธฐ๋ฅผ ๋๋ ค OOM์ ๋ฐฉ์งํ์ธ์.