안녕하세요. 성능테스트하면서 진행했던 문제에 대해 질문올립니다.
oracle에서 postgresql로 전환 후 성능테스트 진행중에 있습니다.
전환은 ora2pg를 이용하여 스키마, 데이터를 이관후에 sql 쿼리도 postgresql에 맞게 수정하여 테스트를 진행하였습니다.
(web은 톰캣, was는 아파치, db는 postgresql입니다.)
성능테스트는 jmeter로 하고 있습니다.
문제는 DB상에서 SELECT 쿼리를 날렸을때의 실행시간과
성능 테스트 진행할때(web-was연동) 같은 select 쿼리의 실행시간이 굉장히 크다는 것입니다. (DB상에서만 돌렸을때의 약 6배 차이가 났음)
(SQL의 특징은 JOIN문이 많이 걸려있고(테이블6개, 조회할때 함수가 좀 있습니다.)
그래서 가장 오래걸리는 sql을 기준으로 log를 분석한 결과 parse, fetch, exec 실행시간이 각각 0.1, 0.3, 1.1초가 수행되었습니다.. 그리고 DB에서는 총 실행시간이 0.2초입니다.
더불어 세션수와 거의 정비례하여 CPU가 100을 치는 현상(세션수10명)이 납니다.
그래서 이를 해결하고자 시도한 결과는 다음과 같습니다.
1. 플랜을 제대로 타는가?( 네.. RANGE 스캔 및, 오라클 플랜과 비교했을 때도 괜찮아 보입니다.)
2.통계정보생성을 했는가?(vacuum도 주기적으로 돌려주고 최적화한 결과가 위의 결과입니다.)
3. JDBC에 문제는 아닌가?(JDK도 8버전 9버전으로 설치해보았는데요 실행시간은 동일합니다.)
혹시 이러한 상황이 있었던 적이 있으신가요?
해결방법이나 제가 시도해야할 또다른 방법이 있다면 알려주시면 감사하겠습니다. 추가로 orafunc을 설치하여 실행하였습니다.(이게 문제가 될까요?)
참고 :
postgresql.conf 는 다음과 같습니다.
work_mem=14MB
maintenance_work_mem=200MB
wal_buffers=16MB
effective_cache_size=5000MB
listen_address='*'
port=5432
max_connection=2000
max_prepared_transactions=10
max_stack_depth=3584
wal_level=minimal
checkpoint_segments=64
checkpoint_completion_target=0.9
logging_collector=on
log_min_duration_statement=2000
|