질의 최적화는 관계형 데이터베이스의 성능, 특히나 복잡한 SQL 문장의 수행에 있어서 아주 중요한 요소이며, 오라클 데이터베이스는 비용기반 최적화 기법을 사용합니다. 비용기반 최적화 기법에서는 주어진 질의에 대해 다양한 실행 계획(execution plan)이 만들어지고, 이 각각의 계획에 대해 비용이 추정됩니다. 이 결과를 바탕으로 질의 최적화는 추정된 비용이 최소인 것을 최상의 계획으로 선택하게 됩니다.

애플리케이션이 매우 복잡한 SQL 코드를 생성할 지도 모르기 때문에, 질의 옵티마이저는 좋은 성능을 보장하기 위해 현명하고 견고해야만 합니다. 오라클 데이터베이스의 비용기반 옵티마이저는 비용 모델의 정확성과 완벽성, 그리고 특정 질의의 대상이 되는 데이터를 액세스하기 위한 가장 효율적인 방법을 결정하는데 사용되는 기술과 방법에 의해 훌륭한 실행 계획을 만들어냅니다.

 
 

  • SQL 변환(transformation)

    Scan, join, aggregation 등을 위해 액세스해야 할 데이터의 양을 줄임으로써 질의 성능을 향상시키기 위해, view merging, predicate pushing 등과 같은 기법으로 주어진 SQL 문장을 스스로 변환시켜서, 결과는 같지만, 효율적으로 처리될 수 있도록 하는 기능입니다. 또한 오라클 데이터베이스는 옵티마이저의 추정된 비용을 근거로, materialized view rewrite, star transformation 등과 같은 기법을 이용해 비용기반 질의 변환을 적용할 수도 있습니다.

  • Cost estimate

    실행 계획의 비용을 최대한 정확히 추정하기 위해서 오라클 데이터베이스는 오브젝트 레벨 통계정보와 시스템 통계정보 등을 활용한 비용 모델을 사용합니다. 오라클 데이터베이스의 기본 비용 모델은 “CPU+IO”로, 질의를 수행하는 동안 발생할 IO 오퍼레이션의 예상 수와 유형뿐 아니라 데이터베이스의 CPU 사이클 수도 고려하게 됩니다.

    통계정보와 성능 정보를 모으는 작업은 효율적이고 자동화될 필요가 있습니다. 오라클 데이터베이스에서는 통계정보가 없거나 오래된 오브젝트들을 자동으로 분석하고, 데이터를 자동으로 샘플링해서 통계정보를 추출할 수 있는 기능이 제공되며, 결과적으로 SQL 수행의 성능을 향상시킬 수 있습니다.

    오라클 데이터베이스는 두가지 옵티마이저 모드를 제공하는데, 첫번째는 질의 결과의 최초 n row를 뽑아내는 시간을 최소화하기 위한 모드이고, 두번째는 모든 row를 뽑아내는 시간을 최소화하기 위한 모드입니다.

     
     

  • 향상된 옵티마이저 통계정보 관리

    통계정보를 수집하는 것이 자동화되어 있지만, 때로는 면밀히 검토할 필요가 있습니다. 원하는 대로 실행 계획이 만들어지는 지 검증한 후 그 결과를 보고 판단하는 것이 좋을 수도 있습니다. Oracle Database 11g에서는 이렇게 통계정보를 수집하는 단계와 배포하는 단계를 구분할 수 있습니다. 검증 과정을 통해 보다 안정적인 운영을 보장할 수 있는 방법이 제공되는 것입니다.

  • 지능화된 커서 공유(cursor sharing)

    바인드 변수를 사용하는 경우 처음에 실제 어떤 값이 들어오느냐에 따라 실행 계획은 정해집니다. 해당 SQL이 age out되지 않는 한 이 실행 계획은 계속 사용됩니다. 하지만 해당 값이 편중된 경우 정해진 실행 계획을 계속 사용하는 것은 불합리합니다. Oracle Database 11g에서는 이와 같이 실제 바인드 값에 따라 다르게 실행 계획을 만들어 사용하는 것이 좋은지 판단할 수 능력이 추가되었습니다. 따라서 능동적으로 성능 향상을 얻을 수 있게 됩니다.

     
     

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다