DB

[MySQL] (환경설정6️⃣) 자주 실수하는 my.cnf 설정 오류 사례

인생아 2025. 7. 15. 14:56
반응형

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 재시작 실패 발생 가능
→ 기존 로그 파일 삭제 필요

해결 방법

  1. MySQL 종료
  2. 기존 ib_logfile0, ib_logfile1 삭제
  3. MySQL 재시작

❌ 7. 설정 후 재시작 안 함

문제

my.cnf 수정했지만 적용 안 된 경우 많음

sudo systemctl restart mysql
  • 반영 확인은 SHOW VARIABLES LIKE '변수명';으로 확인

✅ 정리

  • my.cnf 설정은 작지만 치명적인 실수가 많다.
  • 메모리 기반 설정은 항상 동시 접속 수 기준으로 계산할 것
  • 디스크 스왑, 캐시 병목, 임시 테이블 전환 등을 정기적으로 모니터링해야 한다.
  • 설정 변경 전후에는 반드시 변수값 비교 및 상태 확인을 수행해야 한다.

🔗 공식 문서 참고
MySQL 8.0 Reference Manual – Server Configuration Defaults

 

반응형