Mysql/MySQL 아키텍처 심층 분석
디스크 IO 최적화 시뮬레이션
DEVLIB
2025. 4. 18. 16:11
728x90
실습 목표
- 디스크 IO(읽기/쓰기 부하)를 감소시키는 최적화 실습
- MySQL의 Buffer Pool, Redo Log, Checkpoint 정책 튜닝 체험
- TPS 향상 + 디스크 IOPS 절감 효과 분석
1. 실습 준비
항목 | 설정 |
MySQL 버전 | 8.0 이상 |
모니터링 | iostat, SHOW STATUS, SHOW ENGINE INNODB STATUS |
부하툴 | sysbench 또는 수제 SQL 스크립트 |
2. 현재 IO 상태 및 성능 Baseline 측정
IO 모니터링 (OS 레벨)
iostat -dx 1
- 디스크당 IOPS, await(latency) 확인
- 중요한 항목: r/s, w/s, await, util
MySQL 상태
SHOW GLOBAL STATUS LIKE 'Innodb_data_reads';
SHOW GLOBAL STATUS LIKE 'Innodb_data_writes';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests';
- Buffer Pool 미스율(Buffer Miss Rate)
- Redo 쓰기량 확인
3. 대량 부하 시나리오 실행 (Before 튜닝)
대량 쓰기/읽기 부하를 발생시켜 디스크 IO 부하를 유발합니다.
예제 부하 SQL
DELIMITER $$
CREATE PROCEDURE heavy_load()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 50000 DO
UPDATE tps_test
SET col2 = FLOOR(RAND()*1000)
WHERE id = FLOOR(RAND()*1000000);
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
실행
CALL heavy_load();
→ TPS, IOPS, Buffer Miss율 기록
4. 디스크 IO 최적화 적용
4.1 Buffer Pool 최적화
문제: Buffer Pool이 너무 작으면 매번 디스크 읽기 발생
조치:
innodb_buffer_pool_size=6G
innodb_buffer_pool_instances=8
- 서버 메모리의 70~80%까지 Buffer Pool 할당
- Instance 분할로 락 경합 최소화
4.2 Redo Log 최적화
문제: Redo Log 파일이 작으면 Checkpoint가 자주 발생 → 디스크 쓰기 부하 증가
조치:
innodb_log_file_size=2G
innodb_log_files_in_group=2
innodb_log_buffer_size=512M
- Redo Log 파일을 키워서 Checkpoint 빈도를 낮춤
4.3 Checkpoint 정책 튜닝
문제: 트랜잭션 커밋마다 Redo 플러시 → 디스크 IO 과다
조치 (타협형 Durability)
innodb_flush_log_at_trx_commit=2
- 매 커밋마다 fsync 대신 1초에 1번만 플러시
- 약간의 데이터 유실 리스크(1초 이내)가 있지만 TPS와 IO는 극적으로 개선
5. 서버 재시작 및 튜닝 적용
- MySQL 재시작 필수 (Redo Log 크기 변경 포함)
6. 최적화 후 부하 재실행 (After 튜닝)
- 다시 CALL heavy_load(); 실행
- iostat, SHOW STATUS로 IO, TPS 비교
7. 결과 비교
항목 | Before | After |
Buffer Pool Size | 512MB | 6GB |
Redo Log Size | 256MB | 2GB |
TPS | 예: 800 TPS | 2200 TPS |
Disk Read (r/s) | 2000 r/s | 400 r/s |
Disk Write (w/s) | 1800 w/s | 900 w/s |
Buffer Pool Miss Rate | 10% | 0.5% |
효과 요약
- TPS 2배 이상 증가
- 디스크 읽기/쓰기 IOPS 50% 이상 감소
- Buffer Pool Hit Rate 개선
전체 실습 플로우 요약
1. 현재 IO 및 TPS 측정 (Baseline)
2. 대량 부하 발생 → 성능 기록
3. Buffer Pool / Redo Log / Checkpoint 튜닝 적용
4. 서버 재시작
5. 동일 부하 재실행 → 성능 기록
6. Before vs After 비교 분석
LIST