MySQL 설정 계산기

브라우저 안에서만 처리됩니다. 입력한 내용과 선택한 파일은 서버로 전송되지 않습니다. 익명 방문 통계만 집계합니다.

이 값은 일반 산식으로 낸 출발점입니다. 실제 부하로 계측하며 조정하세요.

서버 전체가 아니라 DB 에 줄 수 있는 메모리
MySQL 8.4 의 redo 용량 계산에만 쓰입니다

my.cnf 권장값

my.cnf 스니펫
[mysqld]
# 전용 서버 기준 감지된 메모리의 50% (공식 자동 설정 표: RAM 1~4GB 구간)
# 출처: https://dev.mysql.com/doc/refman/8.4/en/innodb-dedicated-server.html#dedicated-server-buffer-pool-size
innodb_buffer_pool_size = 2G

# 8.4 자동설정 산식(코어 기반) 기준 — 논리 코어 수(2) / 2 GB, 최대 16GB
# 출처: https://dev.mysql.com/doc/refman/8.4/en/innodb-dedicated-server.html
innodb_redo_log_capacity = 1G

# 리눅스 — OS 파일시스템 캐시와 InnoDB 버퍼 풀의 이중 버퍼링을 피한다(공식 문서 근거) (재시작 필요)
# 출처: https://dev.mysql.com/doc/refman/8.4/en/innodb-parameters.html#sysvar_innodb_flush_method
innodb_flush_method = O_DIRECT

# SSD/SAN 등 고성능 스토리지 — 공식 기본값(10000) 그대로 채택
# 출처: https://dev.mysql.com/doc/refman/8.4/en/innodb-configuring-io-capacity.html
innodb_io_capacity = 10000

# innodb_io_capacity 의 2배 — 공식 기본값 산식(Default Value: 2 * innodb_io_capacity)
# 출처: https://dev.mysql.com/doc/refman/8.4/en/innodb-parameters.html#sysvar_innodb_io_capacity_max
innodb_io_capacity_max = 20000

# 공식 기본값(151) — RAM/워크로드 연동 산식 없음
# 출처: https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_max_connections
max_connections = 151

# 공식 기본값(16MB) — GROUP BY 등이 많으면 늘리라는 정성적 권고뿐 숫자 산식 없음
# 출처: https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_tmp_table_size
tmp_table_size = 16M

# 공식 기본값(16MB) — tmp_table_size 와 함께 MEMORY 임시 테이블 상한을 결정(숫자 산식 없음)
# 출처: https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_max_heap_table_size
max_heap_table_size = 16M

# 공식 기본값(4000) — Opened_tables 상태값을 보고 늘리라는 정성적 권고뿐 숫자 산식 없음
# 출처: https://dev.mysql.com/doc/refman/8.4/en/server-system-variables.html#sysvar_table_open_cache
table_open_cache = 4000
파라미터권장값근거
innodb_buffer_pool_size2G전용 서버 기준 감지된 메모리의 50% (공식 자동 설정 표: RAM 1~4GB 구간) 출처
innodb_redo_log_capacity1G8.4 자동설정 산식(코어 기반) 기준 — 논리 코어 수(2) / 2 GB, 최대 16GB 출처
innodb_flush_methodO_DIRECT리눅스 — OS 파일시스템 캐시와 InnoDB 버퍼 풀의 이중 버퍼링을 피한다(공식 문서 근거) 출처재시작
innodb_io_capacity10000SSD/SAN 등 고성능 스토리지 — 공식 기본값(10000) 그대로 채택 출처
innodb_io_capacity_max20000innodb_io_capacity 의 2배 — 공식 기본값 산식(Default Value: 2 * innodb_io_capacity) 출처
max_connections151공식 기본값(151) — RAM/워크로드 연동 산식 없음 출처
tmp_table_size16M공식 기본값(16MB) — GROUP BY 등이 많으면 늘리라는 정성적 권고뿐 숫자 산식 없음 출처
max_heap_table_size16M공식 기본값(16MB) — tmp_table_size 와 함께 MEMORY 임시 테이블 상한을 결정(숫자 산식 없음) 출처
table_open_cache4000공식 기본값(4000) — Opened_tables 상태값을 보고 늘리라는 정성적 권고뿐 숫자 산식 없음 출처

사용법

  1. 서버 사양(DB에 줄 메모리·코어·스토리지)과 워크로드를 고릅니다.
  2. 권장값이 즉시 계산됩니다 — 스니펫을 복사해 my.cnf의 [mysqld] 섹션에 붙여넣으세요.
  3. "재시작" 표시가 있는 값은 SET GLOBAL이 아니라 서버 재시작이 필요합니다.

자주 묻는 질문

이 값을 그대로 쓰면 되나요?

출발점으로 쓰세요. 산식은 MySQL 공식 문서의 권장 서술을 따르지만, 실제 쿼리 패턴과 데이터 크기는 서버마다 다릅니다. 적용 후 계측하며 조정하세요.

innodb_buffer_pool_size는 왜 메모리 전부가 아닌가요?

MySQL 공식 문서는 전용 서버 기준 50~75%를 권장합니다. 나머지는 커넥션별 버퍼, 임시 테이블, OS가 씁니다. 여기서는 그 범위 안의 값을 채택하고 근거에 명시합니다.

RDS/Cloud SQL 같은 관리형에도 쓸 수 있나요?

관리형 서비스는 파라미터 그룹으로만 바꿀 수 있고 일부 값은 제공사가 관리합니다. 표의 값을 참고하되 적용은 각 서비스의 파라미터 설정 화면에서 하세요.

느린 쿼리는 설정만으로 해결되나요?

아니요. 개별 쿼리 병목은 실행계획이 답입니다. 실행계획 분석 도구에 EXPLAIN FORMAT=JSON 출력을 붙여넣어 보세요.