728x90
Redo / Undo 튜닝 시나리오 실습
이 실습은 TPS 향상, 트랜잭션 안정성 확보, 디스크 IO 절감을 목표로 설계합니다.
1. 실습 환경 준비
항목 | 설정값 |
MySQL 버전 | 8.0 이상 권장 |
테스트 테이블 | 대량 Insert/Update/Select용 |
트랜잭션 부하 도구 | sysbench 추천 or 간단한 스크립트 제작 |
예시: 테스트용 테이블 생성
CREATE TABLE t1 (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
c1 VARCHAR(255),
c2 INT,
c3 DATETIME
) ENGINE=InnoDB;
2. 기본 Redo/Undo 설정 확인
먼저 현재 설정을 확인합니다:
SHOW VARIABLES LIKE 'innodb_log_file_size';
SHOW VARIABLES LIKE 'innodb_log_buffer_size';
SHOW VARIABLES LIKE 'innodb_undo_log_truncate';
SHOW VARIABLES LIKE 'innodb_undo_tablespaces';
→ 이 값들을 기록해둡니다.
3. 성능 부하 테스트 - Before
변경 없이 대량 트랜잭션을 수행하고, 기본 성능을 측정합니다.
부하 스크립트 (Insert 예시)
START TRANSACTION;
INSERT INTO t1 (c1, c2, c3) VALUES
(REPEAT('A', 100), FLOOR(RAND()*1000), NOW()),
(REPEAT('B', 100), FLOOR(RAND()*1000), NOW()),
(REPEAT('C', 100), FLOOR(RAND()*1000), NOW());
COMMIT;
10000번 반복 스크립트로 TPS(Time per Second) 측정합니다.
측정 항목
- 트랜잭션 수
- TPS (Transaction per Second)
- Redo Buffer 사용량
- Undo History List 길이
SHOW ENGINE INNODB STATUS\G
SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY COUNT_STAR DESC LIMIT 5;
4. 튜닝 적용
4.1 Redo Log 튜닝
항목 | 튜닝 내용 |
innodb_log_file_size | 256MB → 1GB로 증가 |
innodb_log_buffer_size | 16MB → 128MB로 증가 |
[mysqld]
innodb_log_file_size=1G
innodb_log_buffer_size=128M
반드시 서버 재시작 필요 (Redo Log 파일 사이즈 변경 시)
4.2 Undo Log 튜닝
항목 | 튜닝 내용 |
innodb_undo_log_truncate | ON (자동 압축) |
innodb_undo_tablespaces | 2개 이상 설정 |
[mysqld]
innodb_undo_log_truncate=ON
innodb_undo_tablespaces=2
- Undo Tablespace도 새로 생성하거나 설정 후 재시작 필요할 수 있음
5. 성능 부하 테스트 - After
튜닝 적용 후 다시 동일한 부하 테스트를 수행합니다.
비교 측정 항목
- 트랜잭션 수
- TPS
- Redo Buffer Flushing 빈도
- Undo History List 길이 감소 여부
- CPU Usage / IO Wait 비율
6. 예상 기대 효과
항목 | 기대 효과 |
Redo Log 크기 증가 | Checkpoint 간격 증가 → 디스크 IO 감소 |
Redo Buffer 크기 증가 | 트랜잭션 커밋시 플러시 부하 감소 |
Undo 자동 축소 | 장기 트랜잭션으로 인한 메모리 누수 방지 |
Undo Tablespace 분리 | Undo 정리 효율성 향상 |
실습 요약 단계
단계 | 내용 |
1단계 | 현재 설정 백업 |
2단계 | 부하 테스트(Before) 및 성능 측정 |
3단계 | Redo/Undo 설정 변경 및 서버 재시작 |
4단계 | 부하 테스트(After) 및 결과 비교 |
5단계 | TPS, IO 부하, Undo 히스토리 개선 여부 분석 |
실전 체크리스트
- Redo/Undo 설정 변경 전 모든 설정값 백업했는가?
- 부하 테스트는 동일 조건으로 진행했는가?
- 서버 재시작으로 설정 반영이 확실히 되었는가?
- 부하 후 SHOW ENGINE INNODB STATUS 로 상태 점검했는가?
- 튜닝 효과를 수치로 비교했는가?
LIST
'Mysql > MySQL 아키텍처 심층 분석' 카테고리의 다른 글
디스크 IO 최적화 시뮬레이션 (1) | 2025.04.18 |
---|---|
InnoDB 메타데이터 확인 및 튜닝 기본 실습 (0) | 2025.04.18 |
Redo, Undo, Doublewrite Buffer 이해 (0) | 2025.04.18 |
InnoDB Undo/Redo 내부 구조 (0) | 2025.04.18 |
InnoDB Storage Engine 상세 (0) | 2025.04.18 |