본문 바로가기
IT정보

오라클 실행 계획

by 디노프랭키 2023. 5. 1.
728x90

오라클 실행 계획에 대해 알아보도록 하겠습니다. 오라클 쿼리를 실행하면 처리 과정이 어떻게 진행이 되는지 실행 계획이란 게 무엇을 뜻하는지 개념도 살펴보겠습니다.

오라클 실행 계획

오라클 쿼리 처리 과정

오라클 쿼리 처리 과정은 파싱, 최적화, 실행, 반환의 단계를 거쳐 처리가 됩니다. 파싱은 사용자가 실행한 SQL쿼리문을 데이터베이스가 알 수 있게 해석할 수 있는 언어로 변환을 합니다. 변환을 진행하면서 SQL쿼리문에 구문오류가 있는지 쿼리실행에 문제가 없는지 체크를 하며 실행 계획을 세웁니다. 최적화는 오라클 옵티마이저라고도 지칭하는데 실행 계획을 수립하는 절차입니다. SQL쿼리를 실행하면 같은 SQL쿼리문이라도 옵티마이저의 실행 계획에 따라 속도 차이가 발생할 수도 있습니다. 옵티마이저는 실행할 SQL쿼리를 가지고 다양한 실행 계획을 시뮬레이션해 최적의 실행 계획을 수립합니다. 실행은 옵티마이저로 최적화된 쿼리를 가지고 데이터베이스에서 데이터를 검색합니다. 실행할 때 인덱스나 필요한 오브젝트들을 활용해 최대한 성능을 최적화하고 빠른 속도로 데이터를 조회해 옵니다. 반환은 실행에서 조회된 데이터를 사용자에게 전달하는 과정입니다. 데이터를 전달할 때 임시공간이 필요할 경우도 있습니다. SQL쿼리를 실행하면 이러한 절차로 쿼리가 실행이 돼서 결과가 리턴되며 올바른 실행 계획을 수립하기 위해서는 인덱스나 쿼리의 구조 데이터베이스의 구조 등을 잘 이해하고 상황에 맞는 SQL쿼리를 작성하여야 합니다.

오라클 실행 계획의 개념과 종류

오라클 실행 계획은 사용자가 쿼리를 실행할 때 데이터베이스에 어떤 방식으로 접근해서 데이터를 가져올지를 결정하는 실행 계획서입니다. 오라클 엔진이 검색을 하고 조인이나 그룹핑, 정렬하는 것도 실행 계획에 포함이 됩니다. 인덱스도 마찬가지입니다. 쿼리를 처리하는 방식의 정보를 담고 있는 것이 실행 계획입니다. 오라클은 실행 계획을 수립하는 다양한 방법이 있습니다. 실행하는 SQL쿼리문에 따라 다양한 방법으로 실행 계획을 수립하는데 실행 계획의 종류에는 전체 스캔(Full Scan) 실행 계획, 인덱스 스캔(Index Scan) 실행 계획, 테이블 조인(Table Join) 실행 계획, 소트(Sort) 실행 계획 등이 있습니다. 전체 스캔(Full Scan) 실행 계획은 테이블 전체를 스캔하여 데이터를 조회해 옵니다. 테이블의 모든 블록을 순차적으로 읽어드리는 방식이며 검색의 범위가 크고 조회해야 하는 데이터가 많은 경우 전체 스캔 실행 계획이 데이터 조회 속도가 빠를 수 있습니다. 하지만 보통의 경우 전체 스캔은 많은 데이터를 읽어 성능 저하를 일으킬 수 있습니다. 데이터 저장된 위치가 분산되어 있거나 테이블의 크기가 매우 큰 경우는 더더욱 속도저하를 일으킬 수 있습니다. 전체 스캔의 경우 인덱스를 사용하지 않아 상대적으로 검색 속도가 느리고 블록 단위로 데이터를 읽으며 대용량 데이터 처리 시에 성능에 영향을 줄 수 있습니다. 데이터 조회되는 대상이 인덱스나 파티셔닝으로 실행 계획이 잡히지 않는 경우 오히려 전체 스캔이 속도가 더 빠른 경우도 있습니다. 전체 스캔은 많은 데이터를 읽고 실행 계획을 세우다 보니 버퍼캐시나 다양한 메모리영역을 많이 사용하게 되므로 메모리에 대한 고려도 필요하고 데이터의 분포도나 테이블의 크기, 다양한 시스템의 자원상황도 고려해야 합니다. 인덱스 스캔(Index Scan) 실행 계획은 인덱스를 사용하여 조건에 맞는 데이터를 조회하는 방법입니다. 테이블의 데이터를 조회할 때 인덱스만 스캔하여 검색이 가능하고 수행 속도나 검색 속도가 매우 빠릅니다. 인덱스 스캔을 사용하기 위해서는 인덱스가 먼저 생성이 되어 있어야 하고 인덱스 생성에 필요한 저장공간이 필요하며 인덱스가 커지면 디스크의 비용이 늘어날 수 있습니다. 인덱스는 인덱스 자체만으로도 정렬이 되어 있기 때문에 인덱스 스캔 시 정렬을 사용할 필요가 없습니다. 인덱스 스캔을 사용하면 매우 효율적으로 데이터를 검색할 수 있습니다. 하지만 테이블의 데이터가 너무 크거나 인덱스를 무분별하게 많이 사용한다거나 조건이 많아질수록 실행 계획의 복잡도가 증가해 성능상에 문제가 생길 수 있습니다. 테이블 조인(Table Join) 실행 계획은 두 개 이상의 테이블을 결합하여 하나의 집합으로 생성하는 작업인데 조인이 효율적으로 수행되기 위해 실행 계획을 최적화하는 것은 매우 중요합니다. 테이블 조인의 실행 계획은 조인 타입에 대한 조인 순서를 결정하고 조인조건 정보를 확인해서 인덱스 사용여부를 결정하고 실행계획을 세우며 최적화된 작업이 수행됩니다. 실행 계획은 일반적으로 통계정보를 기반으로 한 최적화 방법이 많이 사용됩니다. 소트(Sort) 실행 계획은 결과를 정렬하는 데 사용하는 실행 계획입니다. 소트 실행 계획은 정렬할 키를 결정하고 퀵소트, 머지소트, 힙소트 등 소트 알고리즘을 통해 소트방법을 결정하고 소트 연산을 수행합니다. 소트 연산은 성능에 아주 큰 영향을 끼칩니다.

실행 계획 분석 및 최적화 방법

실행 계획은 실행쿼리의 처리방법과 순서를 결정합니다. 어떤 방식으로 처리하는지에 따라 성능에 큰 영향을 미치기 때문에 올바르고 효율적인 실행계획을 수립하여야 합니다. 실행 계획을 분석하는 방법은 우선 실행 계획이 어떠한 순서로 실행되었는지 확인합니다. 각 실행계획에 포함된 수행된 기능이 어떤 작업인지 인덱스는 무엇을 사용하였는지 분석하여야 합니다. 또한 쿼리의 조건이나 구조를 분석하고 쿼리 최적화에 신경을 써야 합니다. 실행 계획에서 문제가 될만한 부분들을 파악하고 이에 대한 최적화 방법을 모색하고 적용하여야 합니다. 실행 계획을 최적화하는 방법은 여러 가지가 있습니다. 첫 번째로 하드웨어를 최적화하여 성능을 개선할 수 있습니다. 두 번째로 쿼리에서 필요하지 않은 조건이나 테이블 조인을 제거하여 성능을 개선할 수 있습니다. 세 번째로 조인되는 테이블의 순서를 변경하거나 인덱스를 추가하여 성능을 개선할 수 있습니다. 네 번째로 인덱스를 최적화하여 성능을 개선할 수 있습니다. 다섯째로 자주 사용하는 쿼리를 캐싱하여 성능을 개선할 수 있습니다. 실행계획을 분석하고 최적화하는 것은 데이터베이스 사용에 있어 아주 중요한 부분입니다. 관리를 하지 않으면 성능이 차츰 저하되고 많은 성능저하가 일어나게 되면 시스템을 사용하지 못할 수도 있습니다. 실행 계획을 세밀히 분석하여 시스템의 성능을 향상하고 최적화 방안을 자주 모색해야 합니다.

728x90

'IT정보' 카테고리의 다른 글

오라클 시스템 뷰 및 사용자 뷰  (2) 2023.05.03
시스템 뷰  (2) 2023.05.02
오라클 아키텍처  (0) 2023.05.01
오라클에 관하여  (0) 2023.04.30
오라클 데이터 정규화  (0) 2023.04.29

댓글