
백엔드
MySQL online alter부터 CPU 100% 장애까지
두줄요약
운영 중인 MySQL 대용량 테이블에 online alter를 적용한 과정과, 이후 CPU 100% 장애를 해결한 경험을 공유했습니다. Percona Toolkit과 캐시 구조 개선으로 서비스를 정상화했습니다.
문제 상황
- 신규 기능인 패키지 매출 랭킹 구현을 위해 구매 시점 정보와 인덱스 추가가 필요했지만, 운영 중인 대용량 MySQL 테이블 특성상 일반 ALTER TABLE과 점검 시간 적용이 어려운 상황
- online alter 도입 과정에서 MySQL inplace algorithm은 간헐적 Duplicate entry 오류로 폐기
해결 방법
- Percona Toolkit의 pt-online-schema-change로 staging, production 복제본, staging, production 순으로 단계적 검증 후 적용
- chunk-size 조정으로 CPU 사용량을 확인하며 250으로 결정하고, 트리거·복사·스왑 방식의 online schema change 수행
성능/운영 포인트
- 배포 후 쿼리 최적화 미흡과 서버별·게임데이터별 캐시 분산으로 Database CPU가 100%까지 상승
- 쿼리 조건 단순화와 스케줄러 서버 기반 단일 캐시 구조로 변경해 DB 쿼리 실행 횟수와 부하를 감소
