2009년 12월 5일 토요일
[JDBC] Oracle JDBC를 이용한 성능향상 방법
1. Statement Caching
① Implicit Statement Caching
// Statement cache 사이즈를 5로 설정
((OracleConnection) conn).setStatementCacheSize(5);
// Enable Implicit caching
((OracleConnection) conn).setImplicitCachingEnabled(true);
② Explicit Statement Caching
// Statement Cache 사이즈를 5로 설정
((OracleConnection) conn).setStatementCacheSize(5);
// Enable Explicit caching
((OracleConnection) conn).setExplicitCachingEnabled(true);
2. Implicit Connection Caching
private static final String CACHE_NAME =“ CacheSample”;
// Datasource 초기화
OracleDataSource ods = new OracleDataSource();
// Enable caching
ods.setConnectionCachingEnabled(true);
// Set the cache name
ods.setConnectionCacheName(CACHE_NAME);
// cache, datasource, cache properties를 지정하여 새로운 cache생성
connMgr.createCache(CACHE_NAME, ods, properties);
Connection conn = ods.getConnection();
3. Update Batching
① Standard Update Batching
Connection conn = ds.getConnection();
conn.setAutoCommit(false);
Statement s = conn.createStatement();
s.addBatch( “insert into dept values‘ ( 26’,‘HR’,‘Mongolia’)”);
s.executeBatch();
conn.commit();
s.close();
② Oracle Update Batching
Connection conn = ds.getConnection();
conn.setAutoCommit(false);
PreparedStatement ps =
conn.prepareStatement(“ insert into dept values (?, ?, ?)”);
((OraclePreparedStatement)ps).setExecuteBatch (3);
ps.executeUpdate();
((OraclePreparedStatement)ps).sendBatch();
conn.commit();
ps.close();
4. Standard Fetch Size and Oracle Row Prefetching
① Standard Fetch Size
Statement stmt = conn.createStatement();
stmt.setFetchSize(100);
② Oracle Row Prefetching
((OracleConnection)conn).setDefaultRowPrefetch(7);
((OracleStatement)stmt).setRowPrefetch (2);
<출처>
2007 Spring Oracle Korea Magazine
Oracle JDBC를 이용한 성능향상 방법
저자_김정식 Oracle ACE(oramaster@empal.com)
2009년 12월 2일 수요일
[FW] 전자정부 표준Framework
행정안전부에서 2009년 6월 24일(수)에
“전자정부 표준프레임워크 공개 및 활성화 계획 발표” 를 했다.
오픈소스에 기반한 표준프레임워크 발표는 긍정적인 부분이다.
전자정부 표준프레임워크 사이트는 http://www.egovframe.go.kr 이며,
전자정부 표준프레임워크에 포함된 오픈소스 리스트는 아래에서 확인할 수있다.
http://www.egovframe.go.kr/EgovEnvRun.jsp
아키텍처 구성에 대한 내용은 꼭 한번 읽어볼 필요가 있어보인다.
앞으로도 지속적으로 유지보수되고 더욱더 개선되어지길 기대한다.
무료교육을 통한 전파도 시도되고 있다. 기회가되면 참여하고 싶다.
<추신>
공공기관에 있어 표준프레임워크에 대한 시도는 분명 좋은시도이며 많은 잇점이 있을것으로 보인다.
하지만 표준이라는 이름으로 다양성이 무시되고 쏠림현항이 심화되는 부작용은 없었으면 한다.
2009년 10월 26일 월요일
[Timeout]UserTransaction과 SQL Timeout관계
javax.transaction.UserTransaction(ut)을 사용하는 Global Transaction의 기본적인 구조는 아래와 같다.
-----------------------
시간 소스
0초 ut.begin();
1초 select(); -> SQL Timeout
2초 insert() -> SQL Timeout
3초 update(); -> SQL Timeout
4초 delete(); -> SQL Timeout
5초 ut.commit(); -> Transaction Timeout
-----------------------
* Transaction Timeout : begin() ↔ commit() 사이의 최대시간
* SQL Timeout : 각각 SQL 단위 수행 최대시간
이와 같이 UserTransaction을 사용하는 Global Transaction에서 고려해야 할 기본적인 Timeout은
Transaction Timeout과 SQL Timeout 이다.
즉, 위의 예제를 보면,
총 Transaction 수행 시간은 5초이므로, Transaction Timeout 은 5초 보다 커야 하고,
SQL 수행시간은 1초이므로, SQL Timeout은 1초보다 커야한다.
<Timeout 설정값 비교>
|
구분 |
UserTransaction |
JEUS 5.0 |
|
Transaction Timeout |
setTransactionTimeout |
<active-timeout> |
|
SQL Timeout |
- |
<stmt-query-timeout> |
[Timeout]javax.transaction.UserTransaction
setTransactionTimeout
void setTransactionTimeout(int seconds)
throws SystemException
- Modify the timeout value that is associated with transactions started by the current thread with the begin method.
If an application has not called this method, the transaction service uses some default value for the transaction timeout.
- Parameters:
seconds- The value of the timeout in seconds. If the value is zero, the transaction service restores the default value. If the value is negative a SystemException is thrown.- Throws:
SystemException- Thrown if the transaction manager encounters an unexpected error condition
2009년 10월 25일 일요일
[Timeout]JEUS 5.0 Timeout 설정값
JEUS 트랜잭션 매니저는 예외 상황 처리를 위해서 다양한 타임 아웃 메커니즘을 사용한다. 타임 아웃 메커니즘의 값을 조정해서 어플리케이션 시스템에 가장 적합하도록 트랜잭션 매니저를 튜닝 할 수 있다.
- Resolution: 타임 아웃 메커니즘의 기본 시간 간격. 이 값을 작게 설정하면 타임 아웃이 세밀하게 작동한다. 값이 너무 크면 타임 아웃이 너무 느슨하게 작동한다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.tmResolution=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <resolution> 태그에 값을 설정한다.
- Active Timeout: Global Transaction이 시작되면 이 시간 안에 commit이 실행되어야 한다. 그렇지 않으면 트랜잭션 매니저가 rollback 시켜버린다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.activeto=<time in milliseconds>추가한다. Web Container나 EJB Container에 설정하려면 <active-timeout> 태그에 값을 설정한다.
- Prepare Timeout: Root Coordinator는 이 시간 내에 Sub Coordinator와 리소스매니저로부터 ‘prepare’ 신호를 받아야한다. 만약 받지를 못하면Root Coordinator는 Global Transaction을 rollback 시킨다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.prepareto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <prepare-timeout> 태그에 값을 설정한다.
- Prepared Timeout: Sub Coordinator는 자신의Root Coordinator로부터 이 시간 안에commit을 해야 할지, rollback을 해야 할지를 나타내는 global decision을 받아야 한다. 만약 이 시간 내에 받질 못하면, Root Coordinator 로 다시 ‘prepare’에 대한 응답 메시지를 보낸다. 그래도 여전히시간 내에 global decision이 오지 않는다면, <heuristic-rollback>의 값이 true일 때 Global Transaction을 rollback 시켜버린다. <heuristic-rollback>이 false이면, Root Coordinator로 메시지를 보내고global decision을 기다리기를 계속 한다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 - Djeus.tm.preparedto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <prepared-timeout> 태그에 값을 설정한다.
- Commit Timeout: Root Coordinator는 이 시간 내에 Sub Coordinator와 리소스매니저로부터 ‘commit’이나 ‘rollback’ 에 대한 결과를받아야 한다. 만약 결과가오지 않으면, Root Coordinator는 Global Transaction을 ‘Uncompleted List’에 기록해서, 트랜잭션이 완전히끝나지 않았음을 남겨둔다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 - Djeus.tm.committo =<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <commit-timeout> 태그에 값을 설정한다.
- Recovery Timeout: 이 값은 트랜잭션 복구 시에 사용된다. 트랜잭션 매니저는 트랜잭션 복구를 위해서 복구될 트랜잭션 정보를 가져오려고 한다. 만약 다른 트랜잭션 매니저에서 이 시간 내에 복구 정보를 알려주지 않으면, <heuristic-rollback>이 true 일 때, 해당 트랜잭션을 rollback 시킨다. 값이 false이면 트랜잭션 복구를 시스템 관리자에게 남겨두고 더 이상 진행하지 않는다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 -Djeus.tm.recoveryto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <recovery-timeout> 태그에 값을 설정한다.
- Uncompleted Timeout: 트랜잭션 매니저는 전체 트랜잭션 처리를 완료하기 위해, 실패한 Global Transaction의 목록을 보관한다. 완료되지 못한 Global Transaction의 정보는 복구 처리시에 사용되므로, 이 타임 아웃 시간까지 보관된다. 그러므로 이 시간이 너무 짧으면 복구 정보가 빨리 지워지게 되고, 트랜잭션 매니저가 해당 Global Transaction의 무결성을 복구할 수 없게 된다. 그 결과 Global Transaction 복구를 위해서, 시스템 관리자가 많은 작업을 직접 처리해야만 한다. Client Container에서 이 값을 설정하려면 클라이언트 어플리케이션의 스크립트에 - Djeus.tm.uncompletedto=<time in milliseconds>를 추가한다. Web Container나 EJB Container에 설정하려면 <uncompleted-timeout> 태그에값을 설정한다.
<출처> technet.tmax.co.kr - 매뉴얼
2009년 10월 4일 일요일
[IBM,SUN,HP]GC, Heapdump, Thread dump 분석툴 비교
Garbage Collection, Heapdump, Thread dump(javacore) 분석 시
IBM, SUN, HP 환경에서 각각 사용가능한 분석툴들을 정리하면 아래와 같다
※ 이보다 더 많은 툴이 있을 수 있으나 개인적으로 사용해 본 툴 위주로 정리하였다.