ADW 서비스 별 쿼리 성능

  • 문서 생성일: 2020-03-16 08:54:32 +0900 KST
  • ADW는 데이터베이스에 접속하여 SQL과 Stored Procedure를 실행할 때 자원을 할당 정책을 정의하는 3개의 기본 서비스를 제공합니다. 사용하는 서비스에 따라서 동일한 쿼리를 수행할 때 할당되는 자원이 달라집니다. 이 문서에서는 4개 OCPU가 할당된 ADW 인스턴스에서 low 서비스와 high 서비스에 동일한 SQL을 수행하고 처리 시간이 달라지는 실험을 진행하겠습니다.


    이번 문서는 오라클 클라우드 Free Tier 계정에 ADW 인스턴스를 만들었다는 전제로 진행합니다. 현재 ADW 인스턴스가 없다면, 다음 문서를 참조하여 ADW 인스턴스(DemoADW)를 만드시기 바랍니다.


    OCI ADW 인스턴스는 사전에 정의된 3개의 서비스를 제공합니다. 3개 서비스에서 동일한 쿼리를 수행하고 결과를 비교하는 실험을 다음과 같은 순서로 진행하겠습니다.


    ADW 사전 정의 서비스

    ADW 인스턴스가 제공하는 Wallet 파일에 포함된 tnsnames.ora 파일에는 ADW 인스턴스를 식별하는 세 개의 데이터베이스 서비스 이름이 등록되어 있습니다. 이름 형식은 다음과 같습니다.

    <DATAASE_NAME>_<high|medium|low>
    

    다음은 demoadw (ADW 인스턴스)가 제공하는 Wallet 파일(Wallet_DemoApp.zip)의 tns_names.ora에 정으된 서비스 예시입니다.

    demoadw_high = 
    (description= 
        (retry_count=20)
        (retry_delay=3)
        (address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))
        (connect_data=(service_name=w0a8icio6wvena7_demoadw_high.adwc.oraclecloud.com))
        (security=
            (ssl_server_cert_dn="CN=adwc.uscom-east-1.oraclecloud.com,OU=Oracle BMCS US,O=Oracle Corporation,L=Redwood City,ST=California,C=US")
        )
    )
    
    demoadw_low = 
    (description= 
        (retry_count=20)
        (retry_delay=3)
        (address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))
        (connect_data=(service_name=w0a8icio6wvena7_demoadw_low.adwc.oraclecloud.com))
        (security=(ssl_server_cert_dn="CN=adwc.uscom-east-1.oraclecloud.com,OU=Oracle BMCS US,O=Oracle Corporation,L=Redwood City,ST=California,C=US")
        )
    )
    
    demoadw_medium = 
    (description= 
        (retry_count=20)
        (retry_delay=3)
        (address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))
        (connect_data=(service_name=w0a8icio6wvena7_demoadw_medium.adwc.oraclecloud.com))
        (security=
            (ssl_server_cert_dn="CN=adwc.uscom-east-1.oraclecloud.com,OU=Oracle BMCS US,O=Oracle Corporation,L=Redwood City,ST=California,C=US")
        )
    )
    

    이렇게 사전 정의된 각 서비스는 각각 다른 레벨의 성능 및 동시성을 제공합니다.

    서비스 별 쿼리 실행 시간 비교

    Oracle SQL Developer에서 서비스 별로 3개의 커넥션을 만들고 접속합니다. 3개 서비스는 다음 이미지와 같이 각각 다른 서비스를 선택하여 구성합니다.

    사전 준비

    실습을 위하여 ADW 인스턴스가 필요합니다. 실습에 사용할 ADW 인스턴스는 4개 OCPU이 할당된 인스턴스를 사용합니다.

    실험에 사용할 인스턴스의 OCPU가 4개 미만이라면 다음 문서를 참조하여 OCPU 수를 수정하시기 바랍니다.

    SQL을 수행하는 도구로 Oracle SQL Developer를 사용할 것입니다. Oracle SQL Developer 설치와 설정이 필요하시다면 다음 문서를 참조하여 준비하시기 바랍니다.

    다음과 같이 2개 서비스로 SQL Developer 커넥션을 설정하시기 바랍니다.

    테스트 쿼리

    다음 SQL을 앞에서 등록한 2개 커넥션으로 각각 ADW에 접속하여 수행할 것입니다.

    select /*+ no_result_cache  */  
    c_nation, s_nation, d_year, sum(lo_revenue) as revenue
    from ssb.customer, ssb.lineorder, ssb.supplier, ssb.dwdate
    where lo_custkey = c_custkey
    and lo_suppkey = s_suppkey
    and lo_orderdate = d_datekey
    and c_region = 'ASIA' and s_region = 'ASIA'
    and d_year >= 1992 and d_year <= 1997
    group by c_nation, s_nation, d_year
    order by d_year asc, revenue desc
    

    위 SQL은 캐쉬를 사용하지 않는 SQL Hint를 포함합니다.

    SQL 실행 테스트

    위에서 등록한 demoadw-high 커넥션과 demoadw-low 커넥션으로 접속하여 위 쿼리를 수행합니다.

    테스트 결과

    실행 결과는 다음과 같습니다.

    커넥션 이름 사용하는 서비스 쿼리 실행 시간
    demoadw-high demoadw-high 35.892초
    demoadw-low demoadw-low 127.611초

    위 실행 결과와 같이 HIGH 데이터베이스 서비스에서 실행되는 쿼리가 LOW 데이터베이스 서비스에서 실행되는 쿼리보다 더 빨리 실행되는 것을 확인할 수 있습니다. 이 것은 High 데이터베이스 서비스가 Low 데이터베이스 서비스보다 더 많은 자원을 쿼리 실행 프로세스에 할당하기 때문입니다.

    요약

    ADW 인스턴스에 요구하는 성능 및 운영 요구사항에 따라 알맞은 데이터베이스 서비스를 선택하여 운영하는 것이 가능합니다.

    김태완 avatar
  • 작성자: 김태완
  • 사랑하는 민수와 데이터 관리, 데이터 분석 & 클라우드에 집중하고 있습니다.
  • E-mail: taewanme@gmail.com
  • Disclaimer
    이 저작물은 Oracle과 관계없이 개인으로서 개인의 시간을 할애하여 작성된 글 입니다. 본 글의 내용, 입장, 예측은 Oracle을 공식적으로 절대 대변하지 않습니다.