DB

[MySQL] (환경설정5️⃣) my.cnf 실전 튜닝: 운영환경별 추천값 정리

인생아 2025. 7. 15. 13:52
반응형

MySQL 성능을 결정짓는 핵심은 my.cnf 설정이다.
하지만 대부분의 사용자는 기본 설정 그대로 사용하거나, 무작정 따라한 설정을 적용해 병목을 유발하는 경우가 많다.

💻 기본 테스트/개발 서버 설정 (RAM 2GB 이하)

테스트용 서버라면 무리한 설정은 피해야 한다.

[mysqld]
max_connections = 50
innodb_buffer_pool_size = 512M
sort_buffer_size = 512K
read_buffer_size = 512K
query_cache_type = 0
tmp_table_size = 32M
max_allowed_packet = 32M
  • 캐시 기능은 OFF로 두고, 기본적인 버퍼만 확보
  • max_connections는 낮게 설정
반응형

🖥️ 중소형 운영 서버 (RAM 4GB ~ 8GB, 일반 웹서비스)

대부분의 개인/중소 웹서비스 환경에서 사용되는 스펙

[mysqld]
max_connections = 150
innodb_buffer_pool_size = 3G
innodb_log_file_size = 256M
sort_buffer_size = 1M
read_buffer_size = 1M
join_buffer_size = 1M
tmp_table_size = 128M
max_allowed_packet = 64M
query_cache_type = 0
  • 버퍼풀 메모리를 가장 많이 할당
  • 정렬 버퍼와 조인 버퍼를 기본 수준으로 확대
  • 쿼리 캐시는 MySQL 5.x 사용 시에도 비활성화 추천

🧠 대용량 트래픽 운영 서버 (RAM 16GB 이상, OLTP)

트랜잭션 중심 서비스, 커머스, 금융 서비스 등에서 필요한 설정

[mysqld]
max_connections = 300
innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 12
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
tmp_table_size = 256M
max_allowed_packet = 128M
sort_buffer_size = 2M
read_buffer_size = 2M
join_buffer_size = 2M
  • RAM의 70~80%를 버퍼풀에 할당
  • I/O 병목 방지를 위한 O_DIRECT 설정
  • 인스턴스 분할로 멀티스레드 최적화
  • flush 설정은 데이터 안정성 확보

📊 분석/보고서 중심 서버 (OLAP, BI 등)

읽기 비중이 높고, 복잡한 SELECT 쿼리가 많은 환경

[mysqld]
max_connections = 100
innodb_buffer_pool_size = 10G
sort_buffer_size = 4M
read_buffer_size = 4M
join_buffer_size = 4M
tmp_table_size = 512M
max_heap_table_size = 512M
query_cache_type = 0
  • 정렬/조인/읽기 버퍼에 충분한 메모리 배분
  • OLTP보다 동시 접속 수가 적으므로 max_connections는 낮춰도 무방
  • 쿼리 캐시는 제거하고, 대신 인덱싱과 쿼리 튜닝을 활용
반응형

🛠️ 운영환경 설정 시 참고 기준

항목 추천 기준
innodb_buffer_pool_size RAM의 60~80%
sort_buffer_size 1~4MB (쿼리 복잡도 따라 조정)
join_buffer_size 1~4MB (다중 테이블 JOIN 대비)
tmp_table_size 64MB 이상
max_connections 예상 동시 접속 수 + 여유값
query_cache_type 대부분 OFF (0)
innodb_flush_method O_DIRECT 또는 fsync()
max_allowed_packet 최소 64MB 이상

📈 실무 팁

  • 트래픽 변화에 따라 주기적으로 조정 필요
  • SHOW STATUS, Performance Schema로 리소스 사용량 정기 확인
  • 설정 변경 전 반드시 기존 설정 백업
  • 재시작 없는 동적 변경은 SET GLOBAL 사용 가능하지만, 재시작 후 초기화됨

✅ 정리

  • 운영환경별로 최적 설정은 완전히 다르며, 하드웨어에 맞춰 조정해야 한다.
  • 대부분의 설정은 버퍼 메모리 조정이 핵심이며, 너무 보수적으로 잡으면 성능 손해가 발생한다.
  • 쿼리 캐시는 과감하게 꺼두고, 캐시 대신 인덱스 튜닝Buffer Pool 활용이 정답이다.

🔗 공식 문서 참고
MySQL 8.0 Reference Manual – Server Option and Variable Reference

반응형