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. ํ˜„์žฌ ์ธก์ •์˜ ํ•œ๊ณ„

  1. ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ธก์ •ํ–ˆ๋‹ค. ํ…Œ์ŠคํŠธ DB๊ฐ€ ๋…ธํŠธ๋ถ์˜ Docker์—์„œ ์‹คํ–‰๋˜์–ด ๋””์Šคํฌ ์“ฐ๊ธฐ ์ง€์—ฐ๊ณผ CPU ์„ฑ๋Šฅ์ด ์šด์˜ RDS์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
  2. ์šด์˜ ํ…Œ์ด๋ธ”,์ธ๋ฑ์Šค,๋ฐ์ดํ„ฐ ๊ทœ๋ชจ๊ฐ€ ๋™์ผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. Backend ๊ธฐ๋Šฅ์˜ SQL์€ ๊ตฌํ˜„ ์ „ ๊ฐ€์ •์ด๊ณ  ์ฑ„ํŒ… SQL๋„ ์‹ค์ œ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•œ MongoDB ํ˜ธ์ถœ์„ MySQL ์Šคํ‚ค๋งˆ๋กœ ์˜ฎ๊ธด ๊ฐ€์ •์ด๋‹ค. ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘์•„ ๋ฒ„ํผ ํ’€ ์ ์ค‘๋ฅ  100%๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค. ์‹ค์ œ SQL์˜ ์‹คํ–‰ ํšŸ์ˆ˜์™€ ์šด์˜ ๊ทœ๋ชจ์—์„œ ๋ฐœ์ƒํ•  ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์— ๋Œ€ํ•œ ๋ถ€ํ•˜๋Š” ์ธก์ •์ด ์ถ”ํ›„์— ํ•„์š”ํ•˜๋‹ค.
  3. ์‚ฌ์šฉ์ž ํ–‰๋™์— ๋”ฐ๋ฅธ ๋ถ€ํ•˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋Šฅ๋ณ„ ์š”์ฒญ ๋น„์œจ๊ณผ ์ฑ„ํŒ… ์ „์†ก,์ฝ์Œ์—๋Š” ์ถ”์ •๊ฐ’์ด ํฌํ•จ๋ผ ์žˆ๋‹ค. ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์‹œ๊ฐ„์— ๋” ์ž์ฃผ ์ ‘์†ํ•˜๊ฑฐ๋‚˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์— ์š”์ฒญ์ด ์ง‘์ค‘๋˜๋ฉด ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ˆ˜์—์„œ๋„ DB QPS์™€ ์“ฐ๊ธฐ ๊ฒฝํ•ฉ์ด ๋‹ฌ๋ผ์ง„๋‹ค. ์šด์˜ ๋กœ๊ทธ๋‚˜ ์‹ค์ œ ํ–‰๋™ ์ž๋ฃŒ๋กœ ์š”์ฒญ ๋น„์œจ์„ ๋ณด์ •ํ•ด์•ผ ํ•œ๋‹ค.
  4. ์ฐธ๊ณ ์ž๋ฃŒ

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