database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9457 게시물 읽기
No. 9457
oracle to postgresql 전환간 DB 성능, CPU 문제입니다.
작성자
한성원(gks3117)
작성일
2014-08-11 15:46ⓒ
2014-08-12 09:41ⓜ
조회수
13,790

 안녕하세요. 성능테스트하면서 진행했던 문제에 대해 질문올립니다.

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

 

 

이 글에 대한 댓글이 총 6건 있습니다.

shared_buffers 의 정보가 빠져있네요.

혹시 shared_buffers 는 수정안하셨나요?

안하셨다면 실 메모리의 25%정도로 설정해주시길 바랍니다.

김주왕(kimjuking)님이 2014-08-11 16:20에 작성한 댓글입니다.
이 댓글은 2014-08-11 16:21에 마지막으로 수정되었습니다.

shared_buffer는  3000MB로 충분히 설정했습니다.

사실 postgresql.conf 파일은 여러번 수정하고 최대한 최적화했다고 생각합니다.

혹 다른 요소는 없을까요? 

한성원님이 2014-08-11 17:17에 작성한 댓글입니다. Edit

테스트 진행 중 vmstat, iostat 정보들을 비교해서 보여주시면 조금 더 원인에 다가갈 수 있을 것 같습니다.

박동식(luzluna)님이 2014-08-11 18:46에 작성한 댓글입니다.

고객주문관련 쿼리가 도는데

한 주기를 도는데 총 6초정도 소요됩니다. 

이때 1명 기준으로는 CPU 점유율이 크진 않으나 

2,3,4,... 인원이 점점 증가함에 따라 CPU가 비례하여 10명 정도에 도달했을때 100% 소요합니다. 

그러면서 실행시간은 감소하고요. 

그래서 '락'이 아닐까 생각을 해봤는데 이부분에서 도움줄수 있으신지요?

(세션이 늘어남에 따라 비례하여 증가하는 현상으로 볼때..)

한성원님이 2014-08-12 09:27에 작성한 댓글입니다. Edit

한 주기를 처리하는데 6초나 소요된다라고 하시면 OLTP가 아니거나 OLTP로 처리하면 안되는 문제가 아닌가 하는 의구심은 듭니다만...

인원증가에 단순 비례가 아니라 지수로 증가하는 CPU로드를 말씀하시는 것으로 보아 MVCC관련 연산이 쌓여가면서 생기는 이슈가 아닐까 짐작됩니다.

하지만 역시 vmstat과 iostat정보를 보여주셔야 원인에 좀더 다가갈 수 있을것 같습니다.

아 그리고 쿼리플랜도 꼼꼼히 읽어보시면 ..... 도움이 될지도...

박동식(luzluna)님이 2014-08-12 17:56에 작성한 댓글입니다.
이 댓글은 2014-08-12 17:59에 마지막으로 수정되었습니다.

답변 감사합니다!!!!

한성원(gks3117)님이 2014-08-12 18:07에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9460mariaDB의 'ON DUPLICATE KEY UPDATE ' 와 같은 기능의 함수는 아직 없죠? [2]
hyeon
2014-08-15
13181
9459The PgJDBC driver is not an executable Java program. [1]
강인호
2014-08-13
12304
9458parsing 시간 관련 질문있습니다. [2]
한성원
2014-08-12
11506
9457oracle to postgresql 전환간 DB 성능, CPU 문제입니다. [6]
한성원
2014-08-11
13790
9456postgreSQL에 원격으로 접속해서 select 하는데 응답 없음.. [1]
separk1031
2014-08-08
11797
9454sql 쿼리로 parameter 셋팅하는 방법?(max_connections, shared_buffers) [3]
이야호
2014-07-29
11902
9453update오류 [2]
서리
2014-07-25
11024
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다