2010-08-09 2 views
6

저는 스프링 3.0 SimpleJdbcTemplate을 사용하려고 시도해 왔으며 1500 초의 레코드를 삽입하는 데 5 분이 걸리는 반면 몇 초는 걸립니다. 직선 JDBC를 사용하여 삽입 할 수 있습니다. 내가 뭘 잘못하고 있는지 모르겠다.스프링 JDBC와 JDBC

+1

코드를 통과 할 수 있습니까? – dierre

+6

이것은 질문이 아니며 면밀히 조사 할 코드를 제공하지 않습니다. 어떻게하면 우리가 당신을 도울 것으로 기대합니까? 자세한 내용을 제공해주십시오. – Andrew

+0

삽입하는 데 5 분이 걸리지 만 "straight jdbc"위에 프레임 워크를 사용하면 지연이 발생합니다. 무슨 일이 일어나는지 알 수 있도록 쿼리/코드를 게시하십시오. –

답변

6

일괄 처리를 작성하는 경우 적절한 일괄 처리 크기 설정을 사용하는 스프링 일괄 처리 - JdbcBatchItemWriter을 사용하면 이러한 1500 개의 레코드가 1 초 이내에로드됩니다.

1

어떤 것들은 가치가 검사 :

  • 오버 헤드는 응용 프로그램 수준에서 스프링에 의해 관리되는 트랜잭션에있을 수 있습니다. 어떤 종류의 트랜잭션 관리자를 사용하고 있는지보세요 (이름이 transactionManager 인 bean을 찾으십시오). JTA를 사용하고 있다면 문제가있는 곳일 것입니다. JDBC를 사용하면 빠르기 때문에 병목 현상이 db가 아닌 것 같습니다.
  • 앱이 해당 트랜잭션을 사용하는 방법에 따라 1500 회의 요청 및 커밋을 모두 마치기 전에 모든 내용을 메모리에 보관할 수 있습니다. 메모리 사용량에 큰 차이가 있음을 알 수 있습니까?
  • 두 경우 모두 어떤 유형의 DB 연결 풀을 사용하고 있습니까? 후드 아래에 무슨 일이 일어나고 있는지

    확인 (메모리 누수의 어떤 모양이 있는지 확인) jmap -histo PID가 :

    pid - "jps -l"

    메모리를 가져옵니다 :

빠른 방법은 응용 프로그램을 프로파일 링하는 jstack PID을 (천천히 또는 재귀 메서드 호출을 찾으십시오)

-2

사용 방법 어때요

jdbcTemplate.batchUpdate(new String[]{sql}); 
관련 문제