현상
: 9월 3일 오전 9시에 업무 개시 후, 9시 20분경부터 CPU 사용량의 증가로 CPU경합이 발생하여 전체 서비스의 성능이 낮게 나오기 시작했다.
Top 5 Timed Events 보고서
- 9시 30분, 9시 40분 2회 수동으로 AWR DB보고서 생성
- 버퍼 캐시 해시 버킷의 동시성을 관리하는 cache buffer chains 래치에서 경합이 발생하고 있으며, 전체 대기 이벤트의 35.4%를 차지하고 있다.
- 래치 경합이 과도하게 발생하면 스핀과 슬립이 반복 수행되면서 CPU 경합이 발생한 것으로 판단된다.
문제 SQL 확인
- 5개의 SQL에서 latch : cache buffer chains 대기 이벤트가 발생하고 있으면, 48pk95mdp52m4 SQL에서 집중적으로 발생하고 있다.
AWR DB 보고서의 Segments by Logical Reads 단위 보고서 : 버퍼 캐시 I/O가 발생하는 세그먼트 확인
- EQR_HST_PK 인텍스에서 버퍼 캐시 1/0가 집중적으로 발생함을 알 수 있다.
- 앞단계에서 확인한 버퍼 캐시 관련 래치를 발생시키는 5개의 SQL을 확인하여 2개의 SQL문에서 EQR_HST_PK 인덱스를 사용함을 확인하였다.
- 나머지 3개 SQL은 EQR_HST_PK 인덱스 블록이 사용하는 해시 버킷과 동일한 해시 버킷을 사용한것으로 판단된다.
정상 구간, 문제 구간의 AWR DB 보고서 비교
- I/O, 업무, 부하 측면에서 원인을 파악한다.
항목 | 항목 | 측정방법 |
---|
I/O측면 | 소수 블록에 I/O집중(핫블럭) | SQL추적 파일 생성 |
| I/O대량 발생 | AWR DB 보고서 비교 |
업무측면 | 신규업무 | AWR DB 보고서 비교 |
| 기존업무 | |
부하측면 | 평상시 부하 | AWR DB 보고서 비교 |
| 과부하 | |
SQL ordered by Gets 단위보고서 확인
- 48pk95mdp52m4 SQL
- I/O측면 : 1회 수행시 발생하는 평균 버퍼 캐시 I/O 횟수가 문제 발생 구간에서는 42774회로 정상 구간에 비해 140배 증가, 전체 버퍼 캐시 I/O에서 차지하는 비율도 43.08%로 대부분의 버퍼 캐시 I/O를 발생 시키고 있다.
- 업무 측면 : 동일한 ID가 검색되므로 기존 업무
- 부하 측면 : 문제 구간의 초당 SQL수행 횟수는 8.25회, 정상 구간의 초당 SQL수행 횟수는 10.69회보다 발생 부하가 적다. ( 경합으로 인한 성능 저하로 초당 처리량이 감소한 것으로 과부하 발생은 아님 )
- dqpOf5bj69t68 SQL
- 기존 업무에 포함되는 SQL이며, I/O 측면과 부하 측면에서 정상 구간과 문제 구간 차이가 적으므로 문제 원인 SQL이 아니다.
문제 SQL 실행 계획 변화 확인
- 스냅구간을 9월 2일 09:00 ~ 09:40 설정하고 AWR SQL 보고서를 생성한다.
- Snap ID 50595부터 SQL실행계획이 변경되어 문제된 것으로 확인되었다.
결론
- 통계 정보의 변경으로 실행 계획인 변경되었음을 확인하였다.