설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 13건, 최근 0 건
 

[JDBC Tip] Type Mismatching. 성능 저하의 지름길

글쓴이 : 처음부터 날짜 : 2015-01-05 (월) 23:57 조회 : 10892
간혹, 다른 DBMS와 성능 비교 결과가 나오면, PostgreSQL이 타 DBMS보다
좀 더 CPU 사용을 많이 하는 것으로 나타난다. 실제로 사용해보면 그렇지만은 않은데...

PostgreSQL이 CPU를 불필요하게 많이 쓰는 경우 중에 하나가 Implicit type casting이다.
PostgreSQL을 사용하면서 느낀점은, 절대적으로 Type Matching이 중요하다라는 점이다.
PostgreSQL내부 Converting Function들은 사용 비용이 너무 커서 솔직히 나는 Implicit Type Casting을
극도로 싫어하는 편이다.

예를 들어, 단순한 NUMERIC(9,0) Type을 JDBC PreparedStatement를 이용해서 값을 지정한다고 해보자.

PreparedStatement의 어떤 메쏘드를 쓸까?

9자리 이하의 정수형이니까, int 값 범위안이니, stmt.setInt 를 사용할까?
아니면, 좀 자리수가 아리까리 하니, 미래를 위하여 stmt.setLong 을 이용할까?
아니면, NUMERIC type이니까 그냥 stmt.setBigDecimal 을 이용할까?

테스트를 해보면 알겠지만, setBigDecimal이 이 경우에는 맞다.
만약, setInt/setLong을 사용하면, 내부적으로, implicit casting function을 사용하게 된다.
그렇게 되면, 단순 Insert도 몇 ms 안에 실행될 것이 몇백 ms로 시간이 늘어난다.

간단하게, JDBC TYPE/Column Attribute Type을 마추어 줄 것.

특히 PostgreSQL은 BIGINT형이 지원되어 setLong도 직접 쓸 수 있다.


PostgresDBA 2015-01-06 (화) 00:59
많은 좋은글 부탁드립니다.
특히나 자바쪽에  득도를 하신분인듯 같으시네요.
이처럼 디비 단순 이론보다는 app과 연관된 이런 노우하우들이 정말 피와 살이 되는 글이죠.
댓글주소
 

postgresdba.com