org.hibernate.Query#list
이라는 메서드로 성능 문제가있다. 메서드 호출의 지속 시간은 시간에 따라 다양합니다. 일반적으로 약 1 초, 며칠, 어쩌면 반나절이면 약 20 초 걸립니다.org.hibernate.Query # 목록이 임의로 느리다.
어떻게이 문제를 해결할 수 있습니까? 이 문제의 원인을 어떻게 결정할 수 있습니까? 이 문제의 분석에
더 많은 요소 :
- 성능 문제는 생산 환경에서 관찰되었지만, 설명 된 문제는 테스트 환경에 있습니다.
- 문제는 적어도 몇 주 동안 관찰되었지만 기원 날짜는 알려지지 않았습니다. 데이터베이스 서버가 안 :
- 기본 쿼리는 MS SQL 서버 (2008 R2)에서 뷰 (선택)입니다 : 한 번에 소수의 사용자로부터
- 데이터베이스 읽기 /이 테스트 환경의 글입니다 지나치게 독점적이며 데이터는 시간이 지남에 따라 천천히 변합니다.
- MS SQL Server 클라이언트에서 직접 정확한 쿼리를 실행하면 항상이 1 초 이내에 완료됩니다.
- (데이터베이스를 백업하고이 백업을 새 데이터베이스로 복원하기 위해 MS SQL Server 클라이언트를 사용하여) 데이터베이스 복제는 문제를 재현하지 못하게합니다. 즉, 메서드 호출로 인해 복제본이 빨라집니다.
- 응용 프로그램은 최대 절전 모드 (4.2.x를) 및 Java 4.2 최대 절전 모드 3.5 6.
- 업그레이드 문제에 대해 아무 것도 변경되지 않았습니다 사용합니다.
- 메서드 호출은 항상 동일한 인수를 사용합니다. 즉, 작업을 수행하는 테스트 메서드가 있습니다.
- (hprof를 사용하여) 메소드 호출을 프로파일 링하면 길이가 길 때 "Object.wait"및 "ref.ReferenceQueue.remove"에 대부분 소요됩니다. 메소드 호출시 기본 쿼리 시간을 기록 log4jdbc를 사용
- 는 다음과 같은 결과를 보여줍니다
- 쿼리 < 1 초 => 방법 ~ 1 초
- 쿼리 ~ 3S => 방법 ~ 20 대
- 쿼리는 this issue에서 가장 득표 한 대답에 설명 된대로 POJO를 생성합니다.
- 나는 어떤 영향을 미치는지 이해할 수 없기 때문에 가장 높은 투표 결과 (this other similar issue)에 설명 된대로 모든 속성을 가진 생성자를 사용하여 시도하지 않았습니다.
답장을 보내 주셔서 감사합니다. 당신이 제안하는 원인을 시험 할 방법을 설명해 주시겠습니까? 아마도 문제가 될 수있는 것을 테스트하기 전에 모든 작업을 비우는 것과 같은 것일까요? – cooltea