카테고리 없음
Buffer Pool Size 변경 후 TPS 변화 시뮬레이션 스크립트
DEVLIB
2025. 4. 18. 16:08
728x90
실습 목표
- innodb_buffer_pool_size를 조정하여
- TPS (Transactions Per Second) 성능 변화를 직접 체험
- 메모리 설정이 실제 서버 성능에 미치는 영향을 이해
1. 기본 준비
항목 | 설정 |
MySQL 버전 | 8.0 이상 권장 |
부하 툴 | sysbench 사용 추천 or 직접 SQL 스크립트 사용 가능 |
테스트 테이블 | 데이터가 100만건 이상 존재하는 테이블 |
테스트용 테이블 예시 (없으면 생성)
CREATE TABLE tps_test (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
col1 VARCHAR(255),
col2 INT,
col3 DATETIME
) ENGINE=InnoDB;
-- 데이터 대량 삽입 (100만건 정도)
INSERT INTO tps_test (col1, col2, col3)
SELECT REPEAT('A', 100), FLOOR(RAND()*1000), NOW()
FROM information_schema.columns a, information_schema.columns b LIMIT 1000000;
2. 시뮬레이션 스크립트 설계
Step 1: 현재 Buffer Pool Size 확인
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
(예: 128MB면 너무 작음. 기본은 512MB~1GB 이상 권장)
Step 2: 부하 테스트용 SQL 스크립트
-- TPS 측정을 위한 간단한 트랜잭션
DELIMITER $$
CREATE PROCEDURE simple_load_test()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 10000 DO
INSERT INTO tps_test (col1, col2, col3)
VALUES (REPEAT('B',100), FLOOR(RAND()*1000), NOW());
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
실행:
CALL simple_load_test();
(한번 수행하면 약 10,000건 Insert → TPS 측정)
Step 3: TPS 측정 쿼리
수동으로 시간 측정
mysql -u root -p -e "CALL simple_load_test();" > /dev/null
- time 명령어를 함께 써서 걸린 시간 측정
- TPS 계산: 10000건 / (걸린 초 수)
또는
SHOW GLOBAL STATUS LIKE 'Com_commit';
- 부하 전후의 커밋 수 차이를 시간으로 나누어 TPS 계산
3. Buffer Pool 크기 변경
변경 예시 (my.cnf 수정)
[mysqld]
innodb_buffer_pool_size=2G
(기존 512MB → 2GB로 변경)
변경 후 서버 재시작 필수
4. 부하 재실행 및 성능 비교
다시 실행
mysql -u root -p -e "CALL simple_load_test();" > /dev/null
다시 걸린 시간 측정 → TPS 재계산
5. 결과 기록 및 비교
변경사항 | TPS (Before) | TPS (After) |
Buffer Pool Size | 예: 512MB | 2GB |
측정 TPS | 예: 500 TPS | 1200 TPS |
예상 결과
- Buffer Pool이 커지면 디스크 읽기(IOPS) 감소
- Page Miss 감소 → TPS 상승
- CPU Idle 비율 소폭 증가할 수 있음
전체 시나리오 요약
1. 기본 Buffer Pool 상태 확인
2. 대량 트랜잭션 부하 스크립트 실행 → TPS 측정 (Before)
3. Buffer Pool 크기 확대
4. 서버 재시작
5. 동일 부하 스크립트 실행 → TPS 측정 (After)
6. Before/After 비교 및 분석
추가
- Buffer Pool을 너무 과하게 키워도 효과가 줄어드는 지점 찾기 (Diminishing Returns 실험)
- 동시에 Redo Log 크기도 조정하면 더 극적인 효과 관찰
- TPS만이 아니라 Page Miss Rate, Buffer Pool Hit Rate도 함께 체크
Buffer Pool Hit Rate 확인
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
공식:
Buffer Pool Hit Rate = 1 - (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests)
LIST