연결 풀 성능 조정
연결 풀을 사용하면 연결 관리 오버헤드가 감소하고 데이터 액세스를 위한 개발 태스크가 줄어듭니다. 애플리케이션은 백엔드 저장소(데이터베이스와 같은)에 액세스하려 시도할 때마다 이 데이터 저장소에 대한 연결을 작성, 유지보수, 해제하기 위한 자원을 필요로 합니다. 이 프로세스의 전반적인 애플리케이션 자원에 대한 압박을 줄이기 위해 Application Server는 Application Server에서 애플리케이션이 공유할 수 있는 백엔드 연결 풀을 관리자가 설정할 수 있도록 합니다. 연결 풀링은 연결 오버헤드를 여러 사용자 요청에 분산시킴으로써 추후 요청을 위한 애플리케이션 자원을 보존합니다.
이 태스크 정보

프로시저
- 연결 교착 상태를 방지하십시오. 교착 상태는 애플리케이션이 스레드당 둘 이상의 동시 연결을 필요로 하며 데이터베이스 연결 풀이 스레드의 수만큼 충분히 크지 않은 경우에 발생할 수 있습니다. 각 애플리케이션 스레드마다 두 개의 동시 데이터베이스 연결이 필요하고 스레드 수가 최대 연결 풀 크기와 동일하다고 가정하십시오. 다음 두 조건이 모두 참이면 교착 상태가 발생할 수 있습니다.
- 각 스레드마다 최초 데이터베이스 연결이 있으며 모두 사용 중입니다.
- 각 스레드가 두 번째 데이터베이스 연결을 대기하고 있으며 모든 스레드가 차단되어 사용 가능하지 않습니다.
이 경우에 교착 상태를 방지하려면 데이터베이스 연결 풀의 최대 연결 값을 적어도 1이라도 늘리십시오. 그러면 대기 중인 최소 하나의 스레드가 두 번째 데이터베이스 연결을 얻으므로 교착 상태 시나리오를 피할 수 있습니다.
연결 교착 상태를 예방하는 일반적인 방법으로, 스레드당 연결을 하나만 사용하도록 애플리케이션을 코딩하십시오. C 동시 데이터베이스 연결을 요구하도록 애플리케이션을 코딩하는 경우 연결 풀은 적어도 다음 수의 연결을 지원해야 합니다. 여기서, T는 최대 스레드 수입니다.T * (C - 1) + 1
연결 풀 설정은 데이터베이스 서버가 지원하도록 구성된 연결 수와 직접 관련됩니다. 풀의 최대 연결 수를 늘리고 데이터베이스의 해당 설정이 이에 따라 증가하지 않을 경우 애플리케이션이 실패할 수 있습니다. 결과적인 SQL 예외 오류가 다음 위치에 표시됩니다.연결 교착 상태의 가장 일반적인 원인 중 하나는 서블릿과 EJB(Enterprise JavaBeans)가 모두 동일한 연결 풀을 사용하며, 여기에서 서블릿이 직접 또는 간접적으로 Bean을 호출하기 때문입니다. 예를 들어, 연결 풀에서 JMS 연결을 얻는 서블릿은 메시지 구동 Bean(MDB)에 메시지를 보내고 응답을 기다립니다. MDB는 서블릿과 동일한 연결 풀을 사용하도록 구성되어 있으므로 MDB가 서블릿에 응답을 보내려면 풀의 또 다른 연결이 필요합니다. 서블릿과 엔터프라이즈 Bean은 동일한 연결 풀을 공유하지 않습니다. 이는 동시(C) 스레드의 전형적인 경우입니다. 여기서 C=2이고 T는 서블릿 및 EJB 스레드 풀의 최대 크기입니다.stderr.log 파일
하위의 SYSOUT
- 연결 풀링을 사용 안함으로 설정하십시오.
- 관계형 자원 어댑터(RRA)의 경우 데이터 소스에 대한 disableWASConnectionPooling
사용자 정의 특성을 추가하십시오.
- JDBC > 데이터 소스를 클릭하십시오.
- 구성하려는 데이터 소스의 이름을 클릭하십시오.
- 추가 특성 표제 아래에서 사용자 정의 특성을 클릭하십시오.
- 새로 작성을 클릭하십시오.
- 다음 정보로 필수 필드를 완료하십시오.
- 이름: disableWASConnectionPooling
- 값: true
- 기타 자원 어댑터의 경우에는 해당 자원 어댑터에 대한 바인딩 스펙을 참조하여
연결 풀링을 사용 안함으로 설정하도록 애플리케이션을
구성하십시오.
- 자원 어댑터를 통해 프로그래밍 방식으로 연결 풀링을 사용 안함으로 설정하십시오.
- Application Server는 다음 코딩을 통해 javax.resource.NotSupportedException
예외를 발견하고 연결 풀링을 사용 안함으로
설정합니다.
_managedFactory.matchManagedConnections(s,subject,cri); // 169059 174269 } catch(javax.resource.NotSupportedException e){
- 관계형 자원 어댑터(RRA)의 경우 데이터 소스에 대한 disableWASConnectionPooling
사용자 정의 특성을 추가하십시오.
- 연기된 확보를 사용하십시오.
Application Server 환경에서 연기된 확보란 애플리케이션의 작업 단위(UOW) 범위에서 연결을 얻기 전에 연결이 사용될 때까지 Application Server이 대기하는 기법을 말합니다.
연기된 확보에 대한 다음 설명을 고려하십시오.- 연기된 확보를 사용하는 애플리케이션 컴포넌트는 글로벌 트랜잭션 내에서 getConnection 메소드를 호출합니다.
- 애플리케이션 컴포넌트는 즉시 연결을 사용하지 않습니다.
- 애플리케이션이 초기 연결 사용에 대한 호출을 발행할 때 트랜잭션 관리자가 호출을 인터셉트합니다.
- 트랜잭션 관리자는 연결을 위한 XA 자원을 확보하고 XAResource.start 메소드를 호출합니다.
- XA 자원과 연관된 연결 관리자는 데이터베이스에 호출을 보냅니다.
연기된 확보는 UOW 범위 내에서 연결을 얻었지만 사용하지 않는 경우에 개선된 성능을 제공합니다. 이 기법은 참여가 발생해야 하는 UOW까지 트랜잭션 참여 비용을 절감시킵니다.
자원 어댑터가 이 기능을 제공하는지 확인해야 하는 경우 자원 어댑터 제공자를 검토하십시오. Application Server 관계형 자원 어댑터는 연기된 확보를 자동으로 지원합니다.
코드에 연기된 확보 통합:
JCA(Java™ EE(Java Platform, Enterprise Edition) Connector Architecture) 버전 1.5 이상 스펙은 연기된 확보 기법을 지연 트랜잭션 확보 최적화라 부릅니다. 이 지원은 마커 인터페이스(LazyEnlistableManagedConnection) 및 연결 관리자의 메소드(LazyEnlistableConnectionManager())를 통해 제공됩니다.package javax.resource.spi; import javax.resource.ResourceException; import javax.transaction.xa.Xid; interface LazyEnlistableConnectionManager { // application server void lazyEnlist(ManagedConnection) throws ResourceException; } interface LazyEnlistableManagedConnection { // resource adapter }
- 연결 풀 공유를 제어하십시오. 특정 연결 팩토리나 데이터 소스에 대한 defaultConnectionTypeOverride 또는 globalConnectionTypeOverride 연결 풀 사용자 정의 특성을 사용하여 연결 공유를 제어할 수 있습니다.
- defaultConnectionTypeOverride 특성은 연결 풀의 기본 공유 값을 변경합니다. 이 특성을 통해 직접 조회에 대한 연결 공유를 제어할 수 있습니다. 이 데이터 소스나 연결 팩토리에 대한 자원 참조가 구성된 경우 자원 참조의 구성이 defaultConnectionTypeOverride 특성 설정보다 우선합니다. 예를 들어, 애플리케이션이 직접 조회를 수행 중이며 비공유 연결이 필요하면 defaultConnectionTypeOverride 특성을 unshared로 설정하십시오.
- globalConnectionTypeOverride 사용자 정의 특성에 지정된 값은 다른 모든 연결 공유 설정보다 우선합니다. 예를 들어, 이 특성을 unshared로 설정하면 직접 조회와 자원 참조 검색 모두에서 모든 연결 요청이 공유되지 않습니다. 이 특성은 자원 참조 설정을 변경하지 않고, 특정 데이터 소스 또는 연결 팩토리의 모든 연결을 비공유 또는 공유로 이동시킨 결과를 테스트할 빠른 방법을 제공합니다.
defaultConnectionTypeOverride 및 globalConnectionTypeOverride 특성 모두의 값을 지정할 경우 globalConnectionTypeOverride 특성에 지정된 값만 사용하여 연결 공유 유형을 판별합니다.
데이터 소스 또는 연결 팩토리 연결 풀에 대한 설정에 새 사용자 정의 특성을 추가하려면 새 연결 풀 사용자 정의 특성을 작성해야 합니다. 이러한 특성 중 하나를 데이터 소스에 추가하려면 관리 콘솔을 사용하십시오. 자원 > JDBC > 데이터 소스를 클릭하십시오. 목록에서 데이터 소스를 선택한 후 추가 특성 > 연결 풀 특성 > 연결 풀 사용자 정의 특성 > 새로 작성을 클릭하십시오. 기타 J2C 또는 JMS 연결 팩토리의 경우 관리 콘솔의 연결 팩토리 정의로 이동하십시오. 그런 다음 추가 특성 > 연결 풀 > 연결 풀 사용자 정의 특성 > 새로 작성을 선택하십시오. 이제 이름 필드에 defaultConnectionTypeOverride 또는 globalConnectionTypeOverride를 지정하고, 값 필드에 shared 또는 unshared를 지정하십시오.중요사항: 데이터 소스나 연결 팩토리의 일반 사용자 정의 특성이 아닌 연결 풀 사용자 정의 특성에 특성을 설정해야 합니다. 연결 풀이 구성된 자원 관리자에 연결할 수 없는 경우 자동으로 완화 조치를 수행하십시오.
failureNotificationActionCode 및 failureThreshold 특성을 사용하여, 연결 팩토리가 구성된 자원 관리자에 연결할 수 없을 때 일반 사용자의 실패 영향을 최소화하기 위해 z/OS®용 WebSphere® Application Server 런타임이 자율 완화 조치를 수행하도록 연결 풀을 구성할 수 있습니다. 연결 팩토리가 구성된 자원 관리자에 대한 연결을 재설정할 수 있을 때 자율 완화 조치를 되돌립니다. 이러한 완화 조치 유형의 한 가지 예는 실패한 자원이 있는 서버에 대해 서버가 새 작업을 허용하지 않도록 런타임이 "pause listeners" 명령을 실행할 수 있는 경우입니다. 고가용성 프론트 엔드와 결합하여 클러스터의 다른 서버로 새 작업을 라우팅할 수 있습니다.
특정 연결 팩토리 또는 데이터 소스가 지정된 또는 기본 실패 임계값에 도달하면 z/OS 런타임에 알림이 전송됩니다. 실패 알림은 런타임이 실패 알림에 응답할 방식을 판별하는 구성된 조치 코드를 포함합니다. 조치 코드 정의는 연결 풀 사용자 정의 특성 주제의 내용을 참조하십시오.
이 특성을 사용하려면 이 특성을 연결 풀의 새 사용자 정의 특성으로 정의해야 합니다. 관리 콘솔을 통해 다음과 같이 이를 수행할 수 있습니다. JDBC 제공자 > 데이터 소스 > 연결 풀 > 사용자 정의 특성 > 새로 작성을 클릭하십시오. 그런 다음 이름 필드에 failureNotificationActionCode 또는 failureNotification을 지정하고 값 필드에 적합한 값을 지정하십시오.
이 사용자 정의 특성의 설정에 대해 더 배우려면 연결 풀 사용자 정의 특성 주제의 내용을 참조하십시오.
- 연결을 버리십시오.
Reap 시간 및 사용하지 않은 제한시간 설정은 하위 리젼이 유휴 상태인 경우 유휴 또는 사용하지 않은 연결을 버리게 하지 않습니다. 이 상황은 필요에 따라 일부 DB2 연결을 더 오래 보유하게 할 수 있습니다.
이 환경 설정으로 인해 유휴 하위 리젼이 다시 활성화될 수 있어도 Reaper 시간 및 사용하지 않은 시간 설정의 조합에 지정된 시간에 연결을 버리려는 경우에는, nondeferredreaper 사용자 정의 특성을 JDBC 드라이버 제공자 데이터 소스 설정에 추가할 수 있습니다. 이 사용자 정의 특성을 추가하면 Reaper 시간과 사용하지 않은 제한시간 설정의 조합에 지정된 시간에 연결을 버립니다.
이 사용자 정의 특성을 JDBC 드라이버 제공자 데이터 소스 설정에 추가하려면 관리 콘솔에서 자원 > JDBC 제공자 > DB2 Universal JDBC 드라이버 제공자 > 데이터 소스 > data_source > 사용자 정의 특성 > 새로 작성을 클릭하십시오. 그런 다음 이름 필드에 nondeferredreaper를 지정하고, 값 필드에 true를 지정하며, 유형 필드에는 java.lang.Boolean을 지정하십시오. 이 데이터 소스를 사용하고 있는 서버를 다시 시작할 때까지는 새 설정이 적용되지 않습니다.
문제점 방지: 사용하지 않은 연결을 버리기 위한 용도로만 유휴 하위 리젼을 활성화하면 추가 및 때로 원하지 않는 CPU 사용이 초래될 수 있습니다. 또한 다음 경고 메시지가 로깅될 수 있지만 무시해야 합니다.
gotchaDSRA8200W: DataSource Configuration: DSRA8020E: Warning: The property 'nondeferredreaper' does not exist on the DataSource classcom.ibm.db2.jcc.DB2ConnectionPoolDataSource.
- 제거 정책에 기반하여 연결 풀을
제거하십시오.
연결 풀 오류 발견 모델이 예외 맵핑으로 구성된 경우 시간이 경과된(stale) 연결 예외가 연결이 더 이상 유효하지 않음을 표시합니다.
일반적으로 StaleConnectionException이 예외 맵핑 프로세스로 인한 것이면 연결 오류 이벤트가 실행되고 이어서 연결 풀이 제거됩니다. 하지만 이 경우에 SCE가 인스턴스화되면 기존 코드에 연결 오류 이벤트를 실행할 기능이 없어서 풀이 제거되지 않습니다. 새 연결을 요청할 때 데이터베이스측에서 연결이 종료되면 드라이버가 XAException을 처리합니다. 결과가 errorDetectionModel=ExceptionMapping인 경우에는 제거 정책에 기반하여 연결 풀이 제거되도록 ConnectionErrorEvent가 실행됩니다.
이 사용자 정의 특성을 JDBC 드라이버 제공자 데이터 소스 설정에 추가하려면 관리 콘솔에서 자원 > JDBC 제공자 > DB2 Universal JDBC 드라이버 제공자 > 데이터 소스 > data_source > 사용자 정의 특성 > 새로 작성을 클릭하십시오. 그런 다음 이름 필드에 fireCEEventOnSCE를 지정하고, 값 필드에 true를 지정하며, 유형 필드에는 java.lang.Boolean을 지정하십시오. 이 데이터 소스를 사용하고 있는 서버를 다시 시작할 때까지는 새 설정이 적용되지 않습니다.
errorDetection 모델로 ExceptionMapping을 사용할 때 StaleConnectionException이 발생하면 풀이 제대로 제거되도록 WebSphere RRA 코드가 변경되었습니다.
하위 주제


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_conpoolman
파일 이름:tdat_conpoolman.html