데이터베이스 Resident Connection Pool (DRCP) 구성

1. DRCP (Database Resident Connection Pool) 개요

Oracle 데이터베이스 Resident Connection Pool (DRCP)은 데이터베이스 서버에 연결된 연결을 풀링하여 재사용함으로써 애플리케이션 성능과 확장성을 향상시키는 기술입니다. DRCP는 특히 많은 수의 클라이언트가 짧은 시간 동안 데이터베이스에 접속하는 OLTP (Online Transaction Processing) 환경에서 효과적입니다. DRCP를 사용하면 각 클라이언트는 데이터베이스에 직접 연결하지 않고, 풀에 저장된 연결을 재사용하므로 데이터베이스 서버의 부하를 줄일 수 있습니다.

2. DRCP 구성 요소

  • Connection Broker: 풀링된 서버 프로세스를 관리하고 클라이언트 요청에 따라 연결을 할당 및 해제합니다.
  • Pooled Server: 데이터베이스 서버에서 실행되며, 클라이언트 요청을 처리하기 위해 재사용 가능한 연결입니다.
  • Client: DRCP를 사용하는 애플리케이션입니다.

3. DRCP 구성 단계

다음은 DRCP를 구성하는 단계입니다. 예시에서는 CDB(Container Database)와 PDB(Pluggable Database) 환경을 가정합니다.

3.1. CDB 레벨 설정 (SYS 사용자)

DRCP 구성을 위해 CDB 레벨에서 필요한 설정을 수행합니다.

SQL> ALTER SYSTEM SET max_servers=100 SCOPE=BOTH;
SQL> ALTER SYSTEM SET pool_size=50 SCOPE=BOTH;
SQL> ALTER SYSTEM SET tcp.validnode_checking=YES SCOPE=SPFILE;
SQL> ALTER SYSTEM SET tcp.invited_nodes='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))))' SCOPE=SPFILE;
SQL> ALTER SYSTEM SET drpccred_cnxn_ttl=300 SCOPE=BOTH;
SQL> ALTER SYSTEM SET control_management_pack_access='DIAGNOSTIC+TUNING' scope=both;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;

3.2. PDB 레벨 설정 (ADMIN 사용자)

DRCP 사용을 원하는 PDB에서 설정을 수행합니다.

SQL> ALTER SYSTEM SET max_idle_time = 60 SCOPE=BOTH;
SQL> EXECUTE DBMS_CONNECTION_POOL.START_POOL ('POOLED_CONN');
SQL> EXECUTE DBMS_CONNECTION_POOL.CONFIGURE_POOL ('POOLED_CONN',
 '','', 10, 50, 500, 60, 1800);
SQL> SELECT POOL_NAME, STATUS FROM V$CPOOL_STATS;

여기서 POOLED_CONN은 풀의 이름입니다. 필요에 따라 설정 값을 조정하십시오.

4. JDBC Thin 드라이버를 사용한 애플리케이션 설정

JDBC Thin 드라이버를 사용하여 DRCP에 연결하는 방법을 설명합니다.

String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
       (CONNECT_DATA=(SERVICE_NAME=pdb1)(SERVER=POOLED)(POOL_NAME=POOLED_CONN)))";
Properties prop = new Properties();
prop.setProperty("user", "testuser");
prop.setProperty("password", "password");
Connection conn = DriverManager.getConnection(url, prop);

위 예제에서 SERVER=POOLED는 DRCP를 사용하겠다는 의미이며, POOL_NAME=POOLED_CONN은 사용할 풀의 이름을 지정합니다. testuserpassword는 데이터베이스 사용자 이름과 비밀번호입니다.

5. DRCP 관련 성능 뷰 확인

DRCP 관련 성능을 모니터링하는 데 유용한 뷰들을 설명합니다.

5.1. V$CPOOL_STATS

풀에 대한 통계를 보여줍니다. 풀 이름, 상태, 최대 크기, 사용 중인 연결 수 등을 확인할 수 있습니다.

SQL> SELECT POOL_NAME, STATUS, MAXSIZE, CURSIZE, REQSIZE, IDLESIZE, REQWAITTIME
  FROM V$CPOOL_STATS;

5.2. V$SESSION

세션 정보를 보여줍니다. DRCP 연결을 사용하는 세션을 식별할 수 있습니다.

SQL> SELECT SID, SERIAL#, USERNAME, SERVER, POOL_NAME FROM V$SESSION
 WHERE SERVER = 'POOLED';

6. DRCP 사용 시나리오

웹 애플리케이션 서버에서 데이터베이스 연결 풀링을 사용하고, 이 연결들을 DRCP와 연동하여 데이터베이스 성능을 최적화하는 방법을 설명합니다.

6.1. 웹 애플리케이션 서버 (예: Tomcat) 설정

Tomcat의 context.xml 파일에서 데이터 소스 설정을 구성합니다.

<Resource name="jdbc/PooledDB" auth="Container"
          type="javax.sql.DataSource"
          driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
       (CONNECT_DATA=(SERVICE_NAME=pdb1)(SERVER=POOLED)(POOL_NAME=POOLED_CONN)))"
          username="testuser"
          password="password"
          maxActive="100"
          maxIdle="30"
          maxWait="10000"/>

6.2. 애플리케이션 코드

JNDI를 통해 데이터 소스를 가져와 데이터베이스 작업을 수행합니다.

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/PooledDB");
Connection conn = ds.getConnection();
// 데이터베이스 작업 수행
conn.close();

7. 주의사항

  • DRCP는 공유 서버 구성에서만 지원됩니다.
  • 클라이언트 측 연결 풀링과 함께 사용하는 것이 좋습니다.
  • 풀 크기 및 세션 관련 파라미터 (예: max_idle_time)를 적절히 설정해야 합니다.
  • VALIDNODE_CHECKING 설정은 보안을 강화하지만, 복잡한 네트워크 환경에서는 연결 문제를 일으킬 수 있습니다.

8. 추가 정보

이 가이드에서는 Oracle 데이터베이스 23ai 버전을 기준으로 DRCP 구성 및 활용 방법을 설명했습니다. 최신 정보는 Oracle 공식 문서를 참고하십시오.

위로 스크롤