반응형
MySQL 설정 파일인 my.cnf는 서비스의 심장이다.
하지만 실무에서 잘못된 설정 때문에 다음과 같은 문제가 자주 발생한다.
- 느린 쿼리 속도
- 시스템 메모리 고갈
- 불필요한 캐시 경합
- 디스크 스왑 과부하
- 서비스 무응답
이번 글에서는 실제 운영환경에서 자주 발견되는 설정 실수 사례와 그에 대한 해결책을 정리한다.

❌ 1. innodb_buffer_pool_size 설정 미비
문제
기본값은 터무니없이 작음 (128MB 수준)
→ 대부분의 InnoDB 데이터를 디스크에서 읽게 됨
→ I/O 병목 발생
잘못된 예
innodb_buffer_pool_size = 256M
개선 예
innodb_buffer_pool_size = 60~80% of RAM
- 메모리 8GB면 최소 5~6GB 할당 권장
반응형
❌ 2. sort_buffer_size, join_buffer_size 과도한 설정
문제
이 설정들은 연결당 할당되기 때문에 무조건 크게 잡으면 RAM이 과잉 사용됨
→ 동시 연결 수 많을수록 위험
잘못된 예
sort_buffer_size = 8M
join_buffer_size = 8M
100개 연결이면 → 1.6GB 소모
개선 예
sort_buffer_size = 1M
join_buffer_size = 1M
- 정렬 많은 쿼리만 세션 단위로 조정
❌ 3. query_cache_type 사용 중
문제
MySQL 5.x 환경이라도 쓰기 많은 환경에서는 비추천
→ 캐시 무효화로 오히려 성능 저하
→ MySQL 8.0에서는 아예 제거됨
잘못된 예
query_cache_type = 1
query_cache_size = 64M
개선 예
query_cache_type = 0
- 대신 인덱싱, 버퍼 풀을 적극 활용할 것
❌ 4. max_connections 과도하게 설정
문제
연결 수를 높게 설정하면 갑작스런 폭주로 서버 메모리 과부하
→ 전체 다운 가능
잘못된 예
max_connections = 1000
개선 예
max_connections = 200
- 동시 접속 수 통계 기반으로 적절히 조정
- 커넥션 풀이나 프록시 사용 고려
반응형
❌ 5. tmp_table_size, max_heap_table_size 부족
문제
임시 테이블이 디스크로 넘어가면서 속도 저하
→ EXPLAIN에서 Using temporary 확인 가능
잘못된 예
tmp_table_size = 16M
max_heap_table_size = 16M
개선 예
tmp_table_size = 128M
max_heap_table_size = 128M
- 대규모 정렬이나 GROUP BY에 효과적
❌ 6. innodb_log_file_size 변경 시 주의 부족
문제
이 값은 그냥 변경하면 MySQL 재시작 실패 발생 가능
→ 기존 로그 파일 삭제 필요
해결 방법
- MySQL 종료
- 기존 ib_logfile0, ib_logfile1 삭제
- MySQL 재시작
❌ 7. 설정 후 재시작 안 함
문제
my.cnf 수정했지만 적용 안 된 경우 많음
sudo systemctl restart mysql
- 반영 확인은 SHOW VARIABLES LIKE '변수명';으로 확인
✅ 정리
- my.cnf 설정은 작지만 치명적인 실수가 많다.
- 메모리 기반 설정은 항상 동시 접속 수 기준으로 계산할 것
- 디스크 스왑, 캐시 병목, 임시 테이블 전환 등을 정기적으로 모니터링해야 한다.
- 설정 변경 전후에는 반드시 변수값 비교 및 상태 확인을 수행해야 한다.
🔗 공식 문서 참고
MySQL 8.0 Reference Manual – Server Configuration Defaults
반응형
'DB' 카테고리의 다른 글
| [MySQL] (트랜잭션 격리수준4️⃣) 격리 수준별 현상 실습: Dirty ~ Phantom Read (0) | 2025.07.16 |
|---|---|
| [MySQL] (트랜잭션 격리수준3️⃣) REPEATABLE READ vs SERIALIZABLE 차이 완전분석 (0) | 2025.07.16 |
| [MySQL] (트랜잭션 격리수준2️⃣) READ UNCOMMITTED vs READ COMMITTED (0) | 2025.07.15 |
| [MySQL] (트랜잭션 격리수준1️⃣) 격리 수준이란? 4단계 개념 정복 (0) | 2025.07.15 |
| [MySQL] (환경설정5️⃣) my.cnf 실전 튜닝: 운영환경별 추천값 정리 (0) | 2025.07.15 |
| [MySQL] (환경설정4️⃣) query_cache는 아직 유효한가? 설정 전략 분석 (0) | 2025.07.15 |
| [MySQL] (환경설정3️⃣) 정렬 성능 향상: sort_buffer_size 설정법 (1) | 2025.07.14 |
| [MySQL] (환경설정2️⃣) InnoDB Buffer Pool 최적화 전략 (2) | 2025.07.14 |