공유 서버와 연동되도록 Amazon RDS Oracle DB 인스턴스를 구성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 2월 4일

공유 서버와 연동되도록 Amazon Relational Database Service(Amazon RDS) Oracle DB 인스턴스를 구성하려면 어떻게 해야 합니까?

간략한 설명

Oracle 사용자는 전용 또는 공유 서버 프로세스를 사용하여 RDS DB 인스턴스에 연결할 수 있습니다. 공유 서버를 사용하기 전에 다음 사항을 고려하십시오.

  • 공유 서버를 사용하면 CPU 오버헤드가 발생하여 성능 문제를 일으킬 수 있습니다.
  • 공유 서버를 사용한다는 것은 UGA 할당이 대규모 풀 내에서 이루어진다는 것을 의미합니다. 공유 서버를 수용할 만큼 SGA 내에 충분한 여유 공간이 있는지 확인합니다. 여유 공간이 부족하면 인스턴스의 알림 로그 및 추적 파일에 "large pool free" 오류가 나타날 수 있습니다.
  • 공유 서버를 사용하면 SGA 메모리가 더 자주 동적으로 재할당되어 성능 문제를 일으킬 수 있습니다.
  • DISPATCHERS 파라미터가 연결 처리량에 비해 충분히 높게 설정되지 않은 경우에는 데이터베이스 재부팅 또는 장애 조치 중에 애플리케이션 연결이 크게 증가할 때 디스패처가 감당하지 못할 수 있습니다.
  • 공유 서버에서 배치 프로세스, 장기 실행 쿼리, 과도한 부하 또는 장기 실행 DBA 작업을 실행하면 다른 작업이 대기열에 추가되어 성능 문제를 일으킬 수 있습니다. 대규모 작업에는 전용 서버를 사용합니다.

Oracle Database 공유 서버 및 전용 서버 아키텍처에 대한 자세한 내용은 Oracle 설명서의 공유 서버 아키텍처 이해를 참조하십시오.

해결 방법

공유 서버 사용의 이점과 한계를 균형 있게 맞추려면 다음과 같이 진행하십시오.

  • 자주 연결 및 연결 해제되고 가벼운 작업을 수행하는 다수의 OLTP 세션에 대해 공유 서버를 사용합니다.
  • 장기 실행 배치 작업과 인덱스 생성과 같은 과중한 관리 작업에는 전용 서버를 사용합니다.

참고: 다음 예제는 지정된 인스턴스 크기(db.r3.large 인스턴스)로 공유 서버를 활성화하기 위한 기준으로 제공됩니다. 관리자는 사용 사례에 따라 메모리를 최적화하는 파라미터 그룹 설정을 적용해야 합니다. 자세한 내용은 Amazon RDS의 Oracle을 참조하십시오.

1.    사용자 지정 파라미터 그룹을 수정하여 다음 파라미터를 최대 허용 값 또는 사용 사례에 맞는 값으로 설정합니다.

dispatchers=(PROTOCOL=TCP)(DISPATCHERS=30)
max_dispatchers=30

2.    인스턴스에 로그인한 다음, 호스트 크기에 대한 SESSIONS의 기본값을 확인합니다. 기본 설정을 사용하지 않는 경우 기본 파라미터 그룹으로 인스턴스를 테스트합니다.

SQL> show parameter sessions
2428

3.    SHARED_SERVERS 및 MAX_SHARED_SERVERS를 해당 값의 10%로 설정합니다.

sessions=2428
shared_servers=243
max_shared_servers=243

4.    LARGE_POOL_SIZE를 SHARED_SERVERS 값 * 1MB(이 경우 243 * 1,048,576바이트)와 같게 설정합니다.

large_pool_size= 254803968

5.    대규모 풀의 크기가 적절한지 확인하기 위해 large_pool_size '‘free memory'’에 대한 v$sgastat을 쿼리합니다.

SQL> select name, pool, bytes/1024/1024 megs from v$sgastat where name='free memory' and pool='large pool';
Name           POOL        Megs
-------------- ----------- -------
free memory    large pool  243

6.    실행 중인 Oracle 인스턴스에 적용되는 파라미터 그룹 설정을 확인한 후 인스턴스에서 다음 SQL 쿼리를 실행합니다.

select name, value from v$parameter where name in ('processes', 'sessions', 'shared_servers', 'dispatchers', 'memory_target', 'memory_max_target', 'large_pool_size');

7.    Oracle 인스턴스에서 다음 SQL 쿼리를 실행하여 세션이 공유된 것으로 연결되어 있는지 확인합니다.

SQL> select decode(server,'NONE','SHARED',server), count(*) from v$session
group by decode(server,'NONE','SHARED',server);

같은 Oracle 인스턴스에 전용 및 공유 서버 액세스를 활성화하려면 다음 예제와 같이 이중 tnsnames.ora 항목을 사용합니다.

  # make the default shared
 
  dbname = 
  (DESCRIPTION= 
      (ADDRESS_LIST= 
          (ADDRESS=(PROTOCOL=TCP)(HOST=dbname.endpoint.amazonaws.com)(PORT=1521))
      )
      (CONNECT_DATA=
          (SID=dbname)
      )
  )

  # use the dedicated one for batch processes and dba tasks such as creating indexes

  dbname_d=
  (DESCRIPTION=
      (ADDRESS_LIST=
          (ADDRESS=(PROTOCOL=TCP)(HOST=dbname.endpoint.amazonaws.com)(PORT=1521))
      )
      (CONNECT_DATA=
          (SID=dbname)
          (SERVER=DEDICATED)
      )
  )

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?