RDS CPU 100% 점유 쿼리 식별 가이드
1단계: Performance Insights (PI) 활용 (가장 추천)
최신 RDS 인스턴스라면 반드시 활성화되어 있어야 하는 강력한 도구입니다.
확인 방법: RDS 콘솔 → [성능 개선 도우미(Performance Insights)] 메뉴로 이동합니다.
AAS(Average Active Sessions) 분석: 대시보드에서 'CPU'라고 표시된 영역이 높게 나타나는 지점을 확인합니다.
Top SQL 확인: 하단 테이블에서 [SQL] 탭을 클릭하면, 어떤 쿼리가 가장 많은 CPU 자원을 소모하고 있는지(Load by CPU) 순위별로 나열됩니다.
여기서 특정 SQL의 ID를 클릭하면 전체 쿼리문과 실행 계획까지 확인할 수 있습니다.
2단계: Enhanced Monitoring (EM)으로 프로세스 확인
OS 레벨에서 실제로 어떤 스레드가 부하를 주는지 확인해야 할 때 유용합니다.
확인 방법: RDS 콘솔 → 데이터베이스 선택 → [모니터링] 탭 → [확장 모니터링(Enhanced Monitoring)] 선택.
확인 포인트: *
OS 프로세스 목록에서 CPU 사용량이 가장 높은 프로세스(보통mysqld또는postgres)를 찾습니다.만약 애플리케이션의 특정 연결이 너무 많다면, 'Load Average' 수치를 통해 시스템이 얼마나 정체되어 있는지 파악할 수 있습니다.
3단계: 엔진별 기본 쿼리로 직접 조회
PI를 켜두지 않았을 때, 관리자 계정으로 접속하여 즉시 실행할 수 있는 명령어입니다.
MySQL / MariaDB
-- 실행 중인 모든 쿼리와 소요 시간 확인 SHOW FULL PROCESSLIST; -- 특정 시간 이상 실행 중인 쿼리만 골라내기 SELECT * FROM information_schema.processlist WHERE command != 'Sleep' AND time > 10 ORDER BY time DESC;
PostgreSQL
-- 현재 실행 중인 활동 및 CPU 소모 상태 확인 SELECT pid, now() - query_start AS duration, query, state FROM pg_stat_activity WHERE state != 'idle' ORDER BY duration DESC;
원인별 긴급 조치 전략
원인 유형 | 특징 | 긴급 조치 |
Missing Index | 특정 대형 테이블 조회 시 CPU 급증 | 해당 쿼리에 필요한 인덱스 추가 |
Full Table Scan | 인덱스 없이 전체 데이터를 훑는 경우 | 쿼리 리팩토링 및 |
Lock Wait | 특정 업데이트가 다른 쿼리를 막고 있음 | 원인이 되는 Blocking Session을 강제 종료(Kill) |
Sudden Traffic | 단순 요청 증가로 인한 자원 고갈 | 인스턴스 타입 업그레이드(Scale-up) 또는 읽기 복제본 추가 |
댓글
댓글 0개
이 문서에는 댓글을 달 수 없습니다.