1월 27, 2026가이드
MySQL 성능을 최적화하는 방법
MySQL 데이터베이스 성능 최적화에 대한 완전한 가이드: 구성 조정, 쿼리 최적화, 인덱싱 및 모니터링.

MySQL 성능 최적화는 대량의 데이터나 높은 트래픽을 처리하는 애플리케이션에 중요합니다. 이 가이드는 구성 조정부터 쿼리 최적화까지 MySQL 성능을 향상시키는 필수 기술을 다룹니다.
MySQL 구성 최적화
서버 리소스를 기반으로 성능을 최적화하기 위해 MySQL 구성 파일을 편집하세요:
bash
# MySQL 구성 편집 (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# MySQL 구성 편집 (CentOS/RHEL)
sudo nano /etc/my.cnf
# 다음 설정을 추가하거나 수정:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
query_cache_size = 64M
query_cache_type = 1
tmp_table_size = 64M
max_heap_table_size = 64M
# MySQL 재시작
sudo systemctl restart mysql # Ubuntu/Debian
sudo systemctl restart mysqld # CentOS/RHELInnoDB 최적화
InnoDB는 MySQL의 기본 스토리지 엔진입니다. 더 나은 성능을 위해 최적화하세요:
bash
# /etc/mysql/mysql.conf.d/mysqld.cnf 또는 /etc/my.cnf에서
[mysqld]
# InnoDB 버퍼 풀 (사용 가능한 RAM의 70-80% 사용)
innodb_buffer_pool_size = 2G
# InnoDB 로그 파일 크기
innodb_log_file_size = 512M
# InnoDB 플러시 방법 (SSD용)
innodb_flush_method = O_DIRECT
# InnoDB I/O 스레드
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# 트랜잭션 커밋 시 InnoDB 로그 플러시
innodb_flush_log_at_trx_commit = 2쿼리 캐시 구성
쿼리 캐시는 읽기 중심 워크로드의 성능을 향상시킬 수 있습니다 (참고: 쿼리 캐시는 MySQL 8.0에서 더 이상 사용되지 않음):
bash
# MySQL 5.7 및 이전 버전용
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M
# 쿼리 캐시 상태 확인
mysql> SHOW VARIABLES LIKE 'query_cache%';
# 쿼리 캐시 통계 확인
mysql> SHOW STATUS LIKE 'Qcache%';인덱스 최적화
적절한 인덱싱은 쿼리 성능에 중요합니다:
bash
# 인덱스 통계를 업데이트하기 위해 테이블 분석
ANALYZE TABLE table_name;
# 사용되지 않는 인덱스 확인
SELECT * FROM sys.schema_unused_indexes;
# 인덱스 생성
CREATE INDEX idx_column ON table_name(column_name);
# 복합 인덱스 생성
CREATE INDEX idx_multi ON table_name(col1, col2, col3);
# 인덱스 표시
SHOW INDEXES FROM table_name;
# 사용되지 않는 인덱스 삭제
DROP INDEX idx_name ON table_name;쿼리 최적화
더 나은 성능을 위해 SQL 쿼리를 최적화하세요:
- EXPLAIN을 사용하여 쿼리 실행 계획 분석: EXPLAIN SELECT * FROM table WHERE column = 'value'
- SELECT * 피하기 - 필요한 열만 선택
- 결과 집합을 제한하기 위해 LIMIT 사용
- 인덱스된 열과 함께 적절한 WHERE 절 사용
- WHERE 절에서 함수 피하기 (예: WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
- 가능한 경우 하위 쿼리 대신 JOIN 사용
- 적절한 경우 여러 조건에 대해 OR 대신 UNION 사용
MySQL 성능 모니터링
bash
# MySQL 상태 확인
mysql> SHOW STATUS;
# 느린 쿼리 확인
mysql> SHOW VARIABLES LIKE 'slow_query%';
# 느린 쿼리 로그 활성화
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
# 프로세스 목록 확인
mysql> SHOW PROCESSLIST;
# 테이블 상태 확인
mysql> SHOW TABLE STATUS LIKE 'table_name';
# InnoDB 상태 확인
mysql> SHOW ENGINE INNODB STATUS;성능 최적화 팁
- 테이블을 조각 모음하기 위해 정기적으로 OPTIMIZE TABLE 실행
- 느린 쿼리 로그를 모니터링하고 느린 쿼리 최적화
- 연결 오버헤드를 줄이기 위해 연결 풀링 사용
- 더 나은 성능을 위해 날짜 또는 범위별로 큰 테이블 분할
- 읽기 중심 워크로드에 읽기 복제본 사용
- MySQL을 최신 안정 버전으로 업데이트 유지
- 디스크 I/O 모니터링 및 SSD/NVMe 스토리지 사용 고려
- 상세한 쿼리 분석을 위해 EXPLAIN ANALYZE (MySQL 8.0+) 사용