[07] 소스 수정없이 Connection Pool 별로 성능 현황 및 이력을 확인하는 방법

똘똘님 덕분에 톰캣 환경에서의 DBCP JDBC Connection Pool 구성은 쉽게 마무리했습니다. ([06] 톰캣 JDBC Connection Pool 설정 및 테스트용 JSP 코드 작성 참조) 새로운 미션은 커넥션 풀 별로 성능 현황을 모니터링하고 이력을 분석하는 것입니다. V$SESSION 뷰를 확인해보니 2개의 서비스 모두 PROGRAM 명은 ‘JDBC Thin Client’로 표시되고 SERVICE 명은 ‘SYS$USERS’로 표시되므로 구분이 되지 않습니다. DBMS_APPLICATION_INFO.SET_MODULE 패키지를 이용하면 “MODULE” 및 “ACTION” 설정이 가능하다고 알고 있습니다만, 소스 수정이 불가능한 상황입니다. 어떻게 하면 될까요?

오라클 서비스를 이용하면 아주 쉽게 이 문제를 풀 수 있습니다. 그럼 시작해볼까요?

7-1. 서비스 생성 및 시작


DB 서버에 로그인 한 후, 커넥션 풀을 위한 2개의 서비스를 생성한 후 서비스를 시작합니다. (테스트 환경은 “누구나 쉽게 따라할 수 있는 Oracle 12c RAC 설치 가이드” 참조)

SRVCTL을 이용한 서비스 생성

srvctl add service -d ORA12C -service ONLINE_SRV -preferred ORA12C1 -available ORA12C2 -failovermethod BASIC
srvctl add service -d ORA12C -service BATCH_SRV  -preferred ORA12C2 -available ORA12C1 -failovermethod BASIC

서비스 시작

srvctl start service -d ORA12C -s ONLINE_SRV
srvctl start service -d ORA12C -s BATCH_SRV

서비스 확인

srvctl status service -d ORA12C
Service BATCH_SRV  is running on instance(s) ORA12C2
Service ONLINE_SRV is running on instance(s) ORA12C1

Note
싱글 인스턴스에서 테스트를 하는 경우에는 DBMS_SERVICE 패키지를 이용해서 서비스를 생성하면 됩니다.

7-2. 커넥션 풀 별로 context.xml 파일 내의 url 변경


새로운 서비스로 접속할 수 있도록 context.xml 파일 내의 url을 변경합니다.

예시-1. 온라인 서비스용 url 변경 (/usr/local/tomcat/webapps/online/META-INF/context.xml)

WEB-INF/web.xml

<Resource
name=”jdbc/onlinesrv”
auth=”Container”
type=”javax.sql.DataSource”
factory=”org.apache.tomcat.jdbc.pool.DataSourceFactory”
driverClassName=”oracle.jdbc.OracleDriver”
      url=”jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(FAILOVER=ON)
             (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.81)(PORT=1521))
             (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.82)(PORT=1521)))
             (CONNECT_DATA=(SERVICE_NAME=ONLINE_SRV)(FAILOVER_MODE=(METHOD=BASIC))))”
username=”apps”
password=”apps”
maxActive=”20″
maxIdle=”10″
initialSize=”10″
connectionPoolName=”onlinesrv_pool”
maxWait=”-1″/>

예시-2. 배치 서비스용 url 변경 (/usr/local/tomcat/webapps/batch/META-INF/context.xml)

WEB-INF/web.xml

<Resource
name=”jdbc/batchsrv”
auth=”Container”
type=”javax.sql.DataSource”
factory=”org.apache.tomcat.jdbc.pool.DataSourceFactory”
driverClassName=”oracle.jdbc.OracleDriver”
url=”jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(FAILOVER=ON)
             (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.82)(PORT=1521))
             (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.81)(PORT=1521)))
             (CONNECT_DATA=(SERVICE_NAME=BATCH_SRV)(FAILOVER_MODE=(METHOD=BASIC))))”
username=”apps”
password=”apps”
maxActive=”20″
maxIdle=”10″
initialSize=”10″
connectionPoolName=”batchsrv_pool”
maxWait=”-1″/>

7-3. 톰캣 재 시작 후 V$SESSION 뷰 확인


context.xml 설정이 완료된 후에는 톰캣을 재 시작합니다.

service tomcat stop
service tomcat start

V$SESSION 뷰를 확인해보겠습니다.

select inst_id, program, service_name from gv$session where program like 'JDBC%' 
order by 1;

   INST_ID PROGRAM                        SERVICE_NAME
  -------- --------------                 --------------
         1 JDBC Thin Client               ONLINE_SRV
         1 JDBC Thin Client               ONLINE_SRV
         1 JDBC Thin Client               ONLINE_SRV
         1 JDBC Thin Client               ONLINE_SRV
         1 JDBC Thin Client               ONLINE_SRV
         1 JDBC Thin Client               ONLINE_SRV
         1 JDBC Thin Client               ONLINE_SRV
         1 JDBC Thin Client               ONLINE_SRV
         1 JDBC Thin Client               ONLINE_SRV
         1 JDBC Thin Client               ONLINE_SRV
         2 JDBC Thin Client               BATCH_SRV
         2 JDBC Thin Client               BATCH_SRV
         2 JDBC Thin Client               BATCH_SRV
         2 JDBC Thin Client               BATCH_SRV
         2 JDBC Thin Client               BATCH_SRV
         2 JDBC Thin Client               BATCH_SRV
         2 JDBC Thin Client               BATCH_SRV
         2 JDBC Thin Client               BATCH_SRV
         2 JDBC Thin Client               BATCH_SRV
         2 JDBC Thin Client               BATCH_SRV

결과에서 보듯이, 서비스 설정 후에는 service_name 칼럼에 각각의 “서비스명”이 출력되는 것을 알 수 있습니다. 즉, 이를 통해 세션 레벨에서의 서비스 구분이 가능한 것을 알 수 있습니다. 그렇다면 서비스 별로 다양한 성능 통계 정보는 어떻게 확인할 수 있을까요?

7-4. 서비스 별 성능 통계 정보를 제공하는 다양한 뷰들


오라클은 V$SESSION.SERVICE_NAME 이외에도 서비스 별로 다양한 성능 통계 정보를 제공하는 뷰들을 제공하고 있습니다. 이러한 뷰들을 이용하면 서비스 별 세션 뿐 아니라 SQL, 대기이벤트, 성능통계 및 대기 클래스등의 다양한 성능 정보를 확인할 수 있습니다.

  • V$SQL : SERVICE 칼럼을 통해 서비스 별 SQL 성능 통계 확인 가능
  • V$SERVICEMETRIC : 서비스 별로 2개의 성능 통계를 제공 (1개는 최근 5초, 1개는 최근 1분)
  • V$SERVICEMETRIC_HISTORY : 서비스 별로 5초 단위의 성능 통계 이력 (최근 2분) 및 1분 단위의 성능 통계 이력 (최근 1시간) 제공
  • V$SERVICE_EVENT : 서비스 별로 대기이벤트 정보 제공
  • V$SERVICE_STATS : 서비스 별로 성능통계 정보 제공 (AWR로도 제공: DBA_HIST_SERVICE_STAT)
  • V$SERVICE_WAIT_CLASS : 서비스 별로 대기클래스 정보 제공 (AWR로도 제공: DBA_HIST_SERVICE_WAIT_CLASS)

글을 마치며


서비스 별 성능 통계를 제공하는 뷰중에서 V$SERVICEMETRIC과 V$SERVICEMETRIC_HISTORY 뷰는 조금 더 학습이 필요할 것 같습니다. 다음 포스팅은 해당 뷰들에서 제공하는 데이터의 내용을 분석할 예정입니다.

[08] V$SERVICEMETRIC, V$SERVICEMETRIC_HISTORY 뷰를 이용한 서비스 성능관리 방안 으로바로가기

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s