지식라이브러리 : 전문가 칼럼
전문가칼럼 보기

 

제목 튜닝방법론(문제 SQL 분석)
분류 Etc 조회수 93
작성일자 2012.07.18 출처 월간마이크로소프트웨어
첨부파일 작성자 dbguide

튜닝방법론(문제 SQL 분석)



데이터베이스를 운영하다 보면 성능 저하를 발생시키는 SQL이 발생하게 된다. 이와 같은 현상에서 가장 처음에 수행해야 하는 부분은 문제 SQL의 수집일 것이다. 이와 같이 문제 SQL을 수집 한 후에는 해당 SQL을 어떻게 분석하고 최적화하느냐에 따라 해 당 시스템은 성능이 향상될 수 있다. 이번 시간에는 문제 SQL을 수집한 후에 해당 문제 SQL을 어떻게 분석해서 수행하는지에 대 해 확인해 보자.

권순용의 DB 이야기



문제 SQL 분류


문제 SQL을 수집했다면 해당 SQL을 분석하는 것이 필요하 다. 문제 SQL을 분석하는 것은 여러 가지 요소를 확인하게 될 것이다. 그 중에 첫 번째는 다음과 같은 항목이다.

- Online SQL : Online SQL은 업무 중에 실시간으로 수행되는 SQL을 의미한다. 그렇기 때문에 Buffer Gets는 많지 않을 가능성이 높고 수행 횟수는 매우 클 가능성이 높다.

- Batch SQL : Batch SQL은 업무 중에 실시간이 아닌 어떤 주기적으로 수행하는 SQL을 의미하며 일반적으로 대용량 데이터를 처리하게 되므 로 Buffer Gets는 높으며 수행횟수는 높지 않을 것이다.

Online SQL인지 아니면 Batch SQL인지를 수집한 SQL에서 어떻게 판단해야 할 것인가? SQL 분석에 있어서 가장 중요한 부 분은 이 둘을 구분하는 것이며, 이는 가장 먼저 해야 할 일일 것 이다. 두 가지 종류의 SQL을 분류하는 수단의 하나는 수행횟수 다. 시간당 수행횟수가 많은 SQL은 Online SQL이 될 가능성이 높을 것이다. 물론 Batch SQL의 경우도 그런 경우가 발생할 수 도 있지만 수행횟수가 많은 SQL은 시스템 전반적인 성능에 문 제를 발생시킬 수 있게 된다.

이와 같이 SQL에 대해 분류됐다면 우선적으로는 Online SQL을 분석하는 것이 필요하다. 추후로 중요한 것은 자주 수행 되는 중요 Batch SQL이 될 것이다. 물론 시간이 많다면 모든 SQL을 분석하는 것도 바람직하다. 하지만 항상 시간이 부족하 기 때문에 우선순위를 정하는 것이 매우 중요하다.

문제 SQL 분석


문제 SQL을 분류했다면 이제는 본격적으로 분석을 수행해야 할 것이다. 그렇다면 어떤 것을 가지고 SQL을 분석할 것인가? 이에 대해 다음과 같은 항목을 분석해야 할 것이다.

- 인덱스 사용 유무
- 사용하는 조인 방식
- 테이블 액세스 방식
- SQL 작성 방식
- 데이터의 흐름

이와 같은 부분을 정확히 분석해야만 해당 SQL에 대한 정확 한 분석이 이뤄지고 성능을 향상시킬 수 있게 된다. <리스트 1>의 예제를 확인해 보자.



<리스트 1>은 목록 쿼리의 형식을 가지고 있는 SQL로, 해당 SQL은 <리스트 2>와 같이 실행 계획이 생성된다.





해당 SQL을 분석해보면 어떤 부분이 문제인지 확인할 수 있 겠는가? 앞서 언급한 항목을 하나하나 확인해 보자.

- 인덱스 사용 유무 : 현재 RANK_TOTAL 테이블을 액세스함에 있어서 인덱스를 이용하고 있으며 인덱스는 QUERY+ST_DATE로 구성돼 있 는 인덱스를 이용하고 있다.
- 사용하는 조인 방식 : 현재 조인은 발생하지 않고 있다.
- 테이블 액세스 방식 : 인덱스 액세스 후 테이블을 액세스하는 전형적인 방식이다.
- SQL 작성 방식 : SQL 작성은 현재 단계에서는 중복 테이블 액세스 등 이 없다.
- 데이터의 흐름 : 계속 감소하는 형식의 데이터 흐름이다.

그렇다면 해당 SQL은 분석 항목 확인에서 그렇게 큰 문제가 발생하지 않는 것처럼 보인다. 하지만 가장 큰 문제는 테이블 액 세스 방식에 있다. 물론 데이터 액세스에는 이상이 없지만 해당 SQL은 Online SQL이며 자주 수행되는 SQL이기 때문에 어떻 게 해서라도 더 최적화해야 하기 때문이다. 해당 SQL의 성능 데 이터는 <리스트 3>과 같다.





해당 SQL은 문제가 없다면 1초 미만으로 결과가 추출될 것이 다. 하지만 해당 SQL은 문제가 존재해 31초 정도의 수행시간이 소요됐다. 우선적으로 이는 앞서 언급한 인덱스 액세스 후 테이 블을 액세스하는 테이블 액세스 방식에 문제가 존재한다.

해당 SQL에 대한 분석은 이와 같으며 해당 SQL에 대한 최적 화는 다음 시간에 살펴본다.






출처 : 월간마이크로소프트웨어6월호

제공 : DB포탈사이트 DBguide.net

+ Recent posts