Post

mysql ERROR 1040 (HY000) Too many connections

🎬 Intro

μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈ 쀑 λ°œμƒν•œ mysql ERROR 1040 (HY000) Too many connections μ—λŸ¬μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

βœ… max_connections

MySQL μ„œλ²„λŠ” λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆλŠ” μ΅œλŒ€ μ—°κ²° 수λ₯Ό μ„€μ •μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€. 이 μ„€μ • 값은 max_connectionsλΌλŠ” λ§€κ°œλ³€μˆ˜λ‘œ μ œμ–΄λ˜λ©°, 기본적으둜 151둜 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 즉, MySQL μ„œλ²„λŠ” κΈ°λ³Έ μ„€μ •μ—μ„œλŠ” μ΅œλŒ€ 151개의 μ—°κ²°λ§Œ λ™μ‹œμ— ν—ˆμš©ν•©λ‹ˆλ‹€.

βœ… mysql ERROR 1040 (HY000): Too many connections

MySQL의 ERROR 1040 (HY000): Too many connections μ—λŸ¬λŠ” 컀λ„₯μ…˜μ˜ μˆ˜κ°€ max_connections 값을 μ΄ˆκ³Όν–ˆμ„λ•Œ λ°œμƒν•˜λŠ” 였λ₯˜ μž…λ‹ˆλ‹€.

  1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ—μ„œ λ‹€μˆ˜μ˜ μ‚¬μš©μžκ°€ μ ‘μ†ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€μ— μ—°κ²°ν•  λ•Œ
  2. λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ λŒ€λŸ‰μ˜ 쿼리λ₯Ό λ™μ‹œμ— μ²˜λ¦¬ν•  λ•Œ
  3. λ°μ΄ν„°λ² μ΄μŠ€ 연결이 μ œλŒ€λ‘œ μ’…λ£Œλ˜μ§€ μ•Šκ³  계속 μ—΄λ¦° μƒνƒœλ‘œ μœ μ§€λ  λ•Œ(컀λ„₯μ…˜ λˆ„μˆ˜)

주둜 이 3κ°€μ§€ μƒν™©μ—μ„œ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€.

βœ… 문제

ν˜„μž¬ μ‚¬μ΄λ“œν”„λ‘œμ νŠΈλŠ” @CommandLineRunner와 flywayλ₯Ό 톡해 ν”„λ‘œμ νŠΈμ— ν•„μš”ν•œ 초기 데이터λ₯Ό μΈμ„œνŠΈν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λΉŒλ“œ λ‹¨κ³„μ—μ„œ λ‹€μˆ˜μ˜ DB 컀λ„₯μ…˜μ΄ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€.

1
show status like 'Max_used_connections';

img.png

  • RDS(mysql)의 μ΅œλŒ€λ‘œ μ‚¬μš©λœ 컀λ„₯μ…˜μ΄ 263으둜 μ‘°νšŒλ©λ‹ˆλ‹€.
  • ν•˜μ§€λ§Œ mysql의 경우 max_connections이 151이 λ””ν΄νŠΈλ‘œ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    1
    2
    
    # max_connections 쑰회 λͺ…λ Ήμ–΄
    show variables like 'max_connections';
    
  • λ”°λΌμ„œ 컀λ„₯μ…˜μ΄ 151이 μ΄ˆκ³Όν• κ²½μš° mysql ERROR 1040 (HY000) Too many connectionsκ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€.

βœ… 해결방법

max_connectionsλ₯Ό μ μ ˆν•˜κ²Œ μ„€μ •ν•˜λ©΄ λ©λ‹ˆλ‹€.

1
2
# max_connections μ„€μ • λͺ…λ Ήμ–΄
set global max_connections=500;

img_1.png μ„€μ • κ°’ 선택 기쀀은 Prometheus + Grafana와 같은 λͺ¨λ‹ˆν„°λ§ 도ꡬλ₯Ό ν†΅ν•΄μ„œ Max Used Connections을 체크할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μŠ€ν”„λ§ λΆ€νŠΈμ˜ spring.datasource.hikari.maximum-pool-size 보닀 큰 κ°’μœΌλ‘œ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν•΄λ‹Ή μ˜΅μ…˜μ€ μŠ€ν”„λ§ λΆ€νŠΈ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ db에 λ™μ‹œμ— 컀λ„₯μ…˜ν•  수 μžˆλŠ” 값을 μ˜λ―Έν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 주의 ν•  점은 max_connections 값을 높이면 그만큼 λ©”λͺ¨λ¦¬λ₯Ό 더 많이 ν• λ‹Ήν•˜κ²Œ λ©λ‹ˆλ‹€. μ„œλ²„ λ©”λͺ¨λ¦¬κ°€ λΆ€μ‘±ν•΄μ§€λ©΄ swap이 λ°œμƒν•˜κ²Œ λ˜λŠ”λ° μ΄λ•Œ 데이터λ₯Ό ν•˜λ“œ λ””μŠ€ν¬μ— μ €μž₯ν•˜κ²Œ λ©λ‹ˆλ‹€. 일반 적으둜 ν•˜λ“œ λ””μŠ€ν¬λŠ” RAM보닀 훨씬 느리기 λ•Œλ¬Έμ—, 데이터 처리λ₯Ό ν•˜λ“œ λ””μŠ€ν¬μ— λ§‘κΈ°λ©΄ 속도가 크게 λ–¨μ–΄μ§€κ³  κ·Έ κ²°κ³Ό DB의 μ„±λŠ₯도 λŠλ €μ§€κ²Œ λ©λ‹ˆλ‹€. λ”°λΌμ„œ max_connections값을 μ μ ˆν•˜κ²Œ μ‘°μ ˆν•  ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€.

This post is licensed under CC BY 4.0 by the author.