사례 연구- 악성 SQL 수행으로 일시적 성능 저하 발생 (by kwlee55)[2013.01.08]
현상
13시 25분에 업무 1팀이 담당하는 몇 개의 어플리케이션의 성능이 약 5분전부터 저하되고 있다는 연락을 받았다.
AWR 스냅샷이 한 시간 주기로 수행되므로 수동으로 AWR스냅샷을 생성하고 분석하려는 와중에 성능 저하 현상이 종료되었다.
25분 구간의 AWR DB보고서의 Top 5 Timed Events
latch: cache buffers lru chain 대기 이벤트가 문제를 유발하였으리라는 짐작이 가지만 대기 이벤트가 차지하는 비중이 낮으며 성능 저하가 발생한 시간에 해당 이벤트가 발생하였는지에 대한 확신을 가질 수 없다.
latch: cache buffers chains 대기 이벤트 발생 시간을 알아보기 위해 Activity Over Time 단위 보고서의 시간 분석 간격을 1 초로 설정하여 성능 저하 현상이 발견된 시간대인 13:20- 13: 28의 ASH 보고서를생성하였다.
ASH 보고서 : Top User Events
버퍼 캐시 관련 래치 이벤트가 주요 발생 대기 이벤트이며 다른 경합 관련 이벤트가 없음을 확인할 수 있다.
Activity Over Time 단위 보고서
13시 21분 9초부터 latch: cache buffers lru chain 대기 이벤트가 발생하고 있다.
성능 저하 시점과 성능 저하 현상이 없어진 시점이 latch: cache buffers lru chain 대기 이벤트 발생 시작 시점과 종료 시점이 거의 일치한다.
대략 13:21- 13:26 사이에 버퍼 캐시 관련 래치 경합으로 성능 저하가 발생하였음을 예상할 수있다.
Top SQL Statements 단위 보고서
버퍼 캐시 관련 래치 경합을 유발시킨 SQL 확인
SQL ID가 5nkxmmjOqu5g0과 8vt3rd6tnp6n2인 SQL에서 버퍼 캐시 관련 렛치 경합이 발생하고 있으며,경합이 발생하고 있는 SQL이 사용하는 테이블이 COMM_CUST_INFO와 SCV_INV_TF임을 확인할 수있다
Top DB Objects 단위 보고서
래치 경합이 발생하고 있은 오브젝트를 파악
latch : cache buffers lru chain 대기 이벤트는 보통의 경우 대 량 1/0로 인해 발생한다. COMM_CUST_INFO와 SCV_INV_TF 두 테이블이 모두 포함되어 있으나, COMM_CUST_INFO 테이블이 제일 상위에 있으며 전체 테이블 스캔시 발생하는 이벤트인 ddb file scattered read 이벤트가 같이 발생한 것으로 보아 이 테이블이 렛치 경합을 유발시킨 테이블일 가능성이 높다.
AWRDB 보고서의 SQL ordered by Gets 단위 보고서
SQL 수행 시 발생하는 버퍼 캐시 1/0를 확인
SQL ID가 8vt3rd6tnp6n2인 SQL이 1회 수행당 473290.2회의 1/0를 발생시키면서 스냅삿 구간 버퍼 캐시 1/0의 78%를 차지하며 과도한 버퍼 캐시 1/0를 발생시키고 있다.
문제 구간에 SQL ID가 8vt3rd6tnp6n2 수행 여부 확인
13:20:00-13:21:00 구간과 13:26:30-13:28:00 구간의 ASH 보고서를 생성한 뒤, Top SQL Statements 단위 보고서에 기록된 SQL을 확인하면 파악할 수 있다.
확인 결과 SQL ID:8vt3rd6tnp6n2는 13:21 :00- 13:26:30 구간에서만 수행되었다.