현상

: 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실행계획이 변경되어 문제된 것으로 확인되었다.

결론

  • 통계 정보의 변경으로 실행 계획인 변경되었음을 확인하였다.