DB Load Test Review.md - 100-hours-a-week/KTB4-17th-wiki GitHub Wiki
MySQL DB์ ์ธ์คํด์ค ์ฐ์ - cpu,ram์ฐ์
1. ๋ชฉ์ ๊ณผ ํ ์คํธ ๋ฒ์
์ฒ์์ ๊ณ ๋ คํ๋ ํ์ฅ ๋ฐฉ์์ ์ฐ๊ธฐ DB์ ์ฝ๊ธฐ DB๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ฝ๊ธฐ DB๋ฅผ ํ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์งํํ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์ ํ ์คํธ๋ฅผ ํตํด์ DB์ ์ธ์คํด์ค๋ฅผ ์ฐ์ ํ๋ ค๋ ๋์ค DB์ ์๊ฐ๋ณด๋ค ํฐ CPU์ RAM์ด ํ์ํ์ง ์์ 1๋์ RDB๋ฅผ ๊ฐ์ ํ๊ณ ๋ค์ ๋ถํํ ์คํธ๋ฅผ ์งํํ๋ ค๊ณ ํ๋ค. (CPU 1๋ ๋ฏธ๋ง์ผ๋ก ๊ณ์ฐ๋จ)
ํ๋กํ ์กฐํ, ์ข์์, ๋งค์นญ, ์ฑํ ๋ถํ๋ฅผ ๋ฐํ์ผ๋ก CPU์ RAM์ ๊ณ์ฐํ๋ค. . Backend 2๋์ ์ฑํ ์๋ฒ 2๋๊ฐ ๊ฐ์ DB๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ค. AI ์๋ฒ 2๋๋ ๋ณ๋ DB๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ DB์ฐ์ ์์ ์ ์ธํ๋ค.
| ์ค์ | ๊ฐ |
|---|---|
| ํ ์คํธ DB | ๋ก์ปฌ Docker MySQL Server |
| DB ๋ฆฌ์์ค | 2 vCPU / ๋ฉ๋ชจ๋ฆฌ ํ๋ 4GiB |
max_connections |
151 (๋ ํผ๋ฐ์ค ์๋ฃ ์ถ์ฒ์ ํฌํจ) |
| ์ฑ ์ฐ๊ฒฐ ์ํ | Backend 2๋ + ์ฑํ 2๋, ํ์คํฌ๋น ํ ์ต๋ 10๊ฐ์ฉ (๋ ํผ๋ฐ์ค ์๋ฃ ์ถ์ฒ์ ํฌํจ) |
| ํ ์คํธ ๋ฐ์ดํฐ | ์ฌ์ฉ์ 126,000๋ช , ์ ์ฒด DB ๋ฐ์ดํฐ 182MiB |
2. ๋ถํ ๋ชฉํ์ ๊ฐ์
๋ค ๊ฐ์ง Backend ๊ธฐ๋ฅ์ ๋ํด ์ค๊ณํ ํผํฌ ๋ถํ๋ ์ฝ๊ธฐ 1476 QPS, ์ฐ๊ธฐ 643 QPS, ํฉ๊ณ 2120 QPS๋ค. ์ฑํ ๋ถํ๋ ๋ณ๋๋ก ๋ํ๋ค. ์์ฒญ๋น SQL ์๋ ๊ตฌํ ํ ๋ฐ๋ ์ ์๋ค.
| ๊ธฐ๋ฅ | ํผํฌ ๋ชฉํ ์์ฒญ/์ด | ์์ฒญ๋น SELECT | ์์ฒญ๋น ์ฐ๊ธฐ SQL | ํผํฌ ์ฝ๊ธฐ QPS | ํผํฌ ์ฐ๊ธฐ QPS |
|---|---|---|---|---|---|
| ํ๋กํ ๋ชฉ๋ก ์กฐํ | 210 | 2 | 0 | 420 | 0 |
| ํ๋กํ ์์ธ ์กฐํ | 420 | 1 | 0 | 420 | 0 |
| ์ข์์ ๋ฑ๋ก | 630 | 1 | 1 | 630 | 630 |
| ๋งค์นญ ์๋ฝ | 6.8 | 1 | 2 | 6.8 | 13.6 |
| ํฉ๊ณ | 1,266.8 | 1,476.8 | 643.6 |
์ฑํ ์ ์ก 68์์ฒญ/์ด, ์ฝ์ 68์์ฒญ/์ด, ๋งค์นญ ์๋ฝ 6.8์์ฒญ/์ด, ๋ฐฉ ์ ์ฅ๊ณผ ์ด๋ ฅ ์กฐํ ๊ฐ 35์์ฒญ/์ด๋ก ๊ฐ์ ํ๋ค.
| ์๋๋ฆฌ์ค ๊ณํ DB ์ฝ๊ธฐ QPS ๊ณํ DB ์ฐ๊ธฐ QPS | ||
|---|---|---|
| ๋นํผํฌ 7,000๋ช | 123.2 | 55.3 |
| ํผํฌ 126,000๋ช | 2,218.5 | 995.2 |
3. ์ธก์ ๊ฒฐ๊ณผ
ํ ์คํธ ๊ฒฐ๊ณผ ์์ฒญ ์ค๋ฅ๊ฐ 0๊ฑด์ด๊ณ ๊ธฐ๋ฅ๋ณ ๋ฌ์ฑ ์์ฒญ๋ฅ ๋ ๋์ฒด๋ก ๋ชฉํ์ ๊ทผ์ ํ๋ค.
| ์งํ | ๋นํผํฌ 7,000๋ช | ํผํฌ 126,000๋ช |
|---|---|---|
| ๊ณํ DB ์ฝ๊ธฐ / ์ฐ๊ธฐ QPS | 123.2 / 55.3 | 2,218.5 / 995.2 |
| ์ค์ธก DB ์ฝ๊ธฐ / ์ฐ๊ธฐ QPS | 121.9 / 54.6 | 2,214.6 / 982.2 |
| DB CPU ํ๊ท / ์ต๋ | 0.13 / 0.21 vCPU | 0.57 / 1.55 vCPU |
| DB ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ต๋ | 1.18GiB | 1.16GiB |
| DB ์ฐ๊ฒฐ ์ ์ต๋ | 42 | 42 |
| ๋ฒํผ ํ ์ ์ค๋ฅ | 100% | 100% |
4. CPU ์ฌ์ ํด์
๋ชฉํ ์ฌ์ฉ๋ฅ 75%๋ก ๊ฐ์ ํ๋ค.
ํ์ vCPU= ์ธก์ ๋ ์ต๋ vCPU ์ฌ์ฉ๋ รท 0.75
| ๋จ๊ณ | ์ค์ DB CPU ์ต๋ 75% | ๋ชฉํ๋ก ํ์ฐํ ํ์ vCPU |
|---|---|---|
| ๋นํผํฌ | 0.21 | 0.28 |
| ํผํฌ | 1.55 | 2.07 |
2 CPU ๊ธฐ์ค ์๊ฐ ์ต๋ ์ฌ์ฉ๋ฅ ์ 77.5%๋ก ๋ชฉํ ์ฌ์ฉ๋ฅ 70%๋ฅผ ์ผ์์ ์ผ๋ก ์ด๊ณผํ์ง๋ง ํ๊ท ์ฌ์ฉ๋ฅ ์ 28.5%์๊ธฐ ๋๋ฌธ์ 2 CPU๋ฅผ ์ ํํ๋ค.
5. RAM ์ฌ์ ํด์
| ํญ๋ชฉ | ๋นํผํฌ | ํผํฌ |
|---|---|---|
| DB ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ต๋ | 1.18GiB | 1.16GiB |
| ๋ฒํผ ํ ์ค์ | 1GiB | 1GiB |
| ๋ฒํผ ํ ์ ์ค๋ฅ | 100% | 100% |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ ๋ฅผ ๋ณด์์ ์ผ๋ก ํ๋ณดํ๊ธฐ ์ํด ์ฌ์ฉ๋ฅ 50%๋ฅผ ์์ฒด ๊ธฐ์ค์ผ๋ก ์ค์ ํ๋ค. ๋ก์ปฌ ํ ์คํธ์์ ์ธก์ ํ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ 1.18GiB์ ์ ์ฉํ๋ฉด ํ์ ์ฉ๋์ 2.36GiB์ด๋ฏ๋ก 4GiB ์ธ์คํด์ค๋ฅผ ํ๋ณด๋ก ์ ์ ํ์ต๋๋ค.
6. ํ์ฌ ์ธก์ ์ ํ๊ณ
- ๋ก์ปฌ ํ๊ฒฝ์์ ์ธก์ ํ๋ค. ํ ์คํธ DB๊ฐ ๋ ธํธ๋ถ์ Docker์์ ์คํ๋์ด ๋์คํฌ ์ฐ๊ธฐ ์ง์ฐ๊ณผ CPU ์ฑ๋ฅ์ด ์ด์ RDS์ ๋ค๋ฅผ ์ ์๋ค.
- ์ด์ ํ ์ด๋ธ,์ธ๋ฑ์ค,๋ฐ์ดํฐ ๊ท๋ชจ๊ฐ ๋์ผํ์ง ๋ชปํ๋ค. Backend ๊ธฐ๋ฅ์ SQL์ ๊ตฌํ ์ ๊ฐ์ ์ด๊ณ ์ฑํ SQL๋ ์ค์ ๋ถํํ ์คํธ์์ ์ฌ์ฉํ MongoDB ํธ์ถ์ MySQL ์คํค๋ง๋ก ์ฎ๊ธด ๊ฐ์ ์ด๋ค. ํ ์คํธ ๋ฐ์ดํฐ๊ฐ ์์ ๋ฒํผ ํ ์ ์ค๋ฅ 100%๋ก ๋ํ๋ฌ๋ค. ์ค์ SQL์ ์คํ ํ์์ ์ด์ ๊ท๋ชจ์์ ๋ฐ์ํ ์ฝ๊ธฐ์ ์ฐ๊ธฐ์ ๋ํ ๋ถํ๋ ์ธก์ ์ด ์ถํ์ ํ์ํ๋ค.
- ์ฌ์ฉ์ ํ๋์ ๋ฐ๋ฅธ ๋ถํ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค. ๊ธฐ๋ฅ๋ณ ์์ฒญ ๋น์จ๊ณผ ์ฑํ ์ ์ก,์ฝ์์๋ ์ถ์ ๊ฐ์ด ํฌํจ๋ผ ์๋ค. ์ค์ ์ฌ์ฉ์๊ฐ ํน์ ์๊ฐ์ ๋ ์์ฃผ ์ ์ํ๊ฑฐ๋ ์ผ๋ถ ๊ธฐ๋ฅ์ ์์ฒญ์ด ์ง์ค๋๋ฉด ๊ฐ์ ์ฌ์ฉ์ ์์์๋ DB QPS์ ์ฐ๊ธฐ ๊ฒฝํฉ์ด ๋ฌ๋ผ์ง๋ค. ์ด์ ๋ก๊ทธ๋ ์ค์ ํ๋ ์๋ฃ๋ก ์์ฒญ ๋น์จ์ ๋ณด์ ํด์ผ ํ๋ค.
- ์ฐธ๊ณ ์๋ฃ
CPU ๊ณต์ :https://neo4j.com/developer/kb/capacity-planning-example/
์์ ์ ์ธ ๋ชฉํ ์ฌ์ฉ๋ฅ aws๊ณต์ : https://docs.aws.amazon.com/ko_kr/wellarchitected/latest/reliability-pillar/rel_adapt_to_changes_proactive_adapt_auto.html
service demand ํ ์คํธ ๊ฒฐ๊ณผ : https://docs.aws.amazon.com/ko_kr/whitepapers/latest/optimizing-mysql-on-ec2-using-amazon-ebs/mysql-benchmark-observations-and-considerations.html
memory๊ณต์ ๋ช ์ :
https://www.packtpub.com/en-us/learning/how-to-tutorials/getting-started-innodb
mysql ๊ธฐ์ค innodb_buffer_pool = 50~75%๊ถ์ฅ : https://dev.mysql.com/doc/refman/8.0/en/memory-use.html
ํ ์คํธ ์ปค๋ฅ์ ํ=10 ๊ทผ๊ฑฐ์๋ฃ: https://github.com/brettwooldridge/HikariCP