ADW 서비스 별 쿼리 성능
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")
)
)
이렇게 사전 정의된 각 서비스는 각각 다른 레벨의 성능 및 동시성을 제공합니다.
- high
- 예시 서비스 명: demoadw_high
- 특징
- High 데이터베이스 서비스는 각 SQL 문에 최고 레벨의 자원을 제공하여 최고의 성능을 보임
- 가장 적은 수의 동시 SQL 문을 지원
- 모든 SQL 문은 데이터베이스의 모든 CPU 및 IO 리소스를 사용
- 실행할 수있는 동시 SQL 문의 수는 3(이 수는 데이터베이스의 OCPU 수와 무관)
- medium
- 예시 서비스 명: demoadw_medium
- 특징
- medium 데이터베이스 서비스는 각 SQL 문에 더 낮은 수준의 리소스를 제공
- 잠재적으로 더 낮은 수준의 성능을 제공
- high 보다 더 많은 동시 SQL 문을 지원
- 실행할 수있는 동시 SQL 문의 수는 데이터베이스의 OCPU 수에 따라 달라짐
- low
- 예시 서비스 명: demoadw_low
- 특징
- Low 데이터베이스 서비스는 각 SQL 문에 최소 수준의 리소스를 제공
- 가장 많은 수의 동시 SQL 문을 지원
- 모든 SQL 문은 데이터베이스에서 단일 CPU와 여러 IO 리소스를 사용
- 실행할 수있는 동시 SQL 문 수는 OCPU 수의 최대 300배
서비스 별 쿼리 실행 시간 비교
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 데이터베이스 서비스보다 더 많은 자원을 쿼리 실행 프로세스에 할당하기 때문입니다.
요약
- HIGH 데이터베이스 서비스는 실행되는 각 query에 대해 최대 리소스를 사용하여 쿼리수행 시 높은 parallel 수행을 제공
- MEDIUM 데이터베이스 서비스는 HIGH 데이터베이스 서비스와 비교해 더 낮은 수치의 parallel 쿼리수행하지만 더 많은 동시성을 제공
- LOW 데이터베이스 서비스는 가장 적은 리소스를 제공, 동시 쿼리수는 OCPU 수 X 300 이상 지원
ADW 인스턴스에 요구하는 성능 및 운영 요구사항에 따라 알맞은 데이터베이스 서비스를 선택하여 운영하는 것이 가능합니다.