2009-10-22 5 views
0

10M 레코드를 실행하면서 10 분이 걸리는 선택 쿼리가 있습니다. TOAD 나 프로그램을 정상적인 JDBC 연결을 사용하여 실행하면 결과가 반환되지만, ORM이 결과를 반환하지 않으므로 최대 절전 모드를 사용하는 작업을 실행하는 동안. 45 분이 지났는데도 전화가 끊깁니다? 제발 도와주세요Oracle JDBC가있는 최대 절전 모드

+2

정직하게 대답 하시겠습니까? – skaffman

답변

0

당신은 최대 절전 모드와 같은 ORM을 사용하여 10M 레코드를 가져 오려고합니까? 큰 문제가있는 경우 응용 프로그램을 다시 디자인해야합니다. 응용 프로그램을 다시 디자인해야합니다. 왜 메모리가 끊어지기 때문에 응용 프로그램을 다시 디자인해야합니다.

+0

죄송합니다. 쿼리는 조건을 만족하는 레코드 수만 계산하므로 모든 레코드를 메모리로 가져 오지 않습니다. 질의 자체는 시간이 걸립니다. 주어진 일이지만, 우리는 시간이 좀 걸릴 것으로 기대하고 있습니다. 그러나 일단 준비된 문장이 생성되면 정상 런타임이나 두꺼비 (10 분)의 쿼리 후에도 카운트를 되 찾을 수 없습니다. – vijay

0

최대 절전 모드에서 SQL 출력을 활성화 했습니까? 이를 수행하려면 set hibernate.show_sql to true해야합니다.

일단 완료되면 TOAD를 통해 실행중인 SQL과 생성 된 SQL을 비교하십시오. 그들은 정확히 동일 또는 아닙니다?

SQL을 생성하고 나면 Hibernate는 아무 것도하지 않기 때문에 여기있는 것처럼 추측 할 것입니다. 연결은 풀에서 가져옵니다. 준비된 문장이 생성되고 실행되므로 JDBC와 다르지 않아야한다.

따라서 HQL을 어떻게 최적화 할 수 있는지에 대한 질문이 가장 많습니다. 도움이 필요하다면 문제의 HQL과 적절한 매핑/테이블 스키마를 게시해야합니다. 질의에 대한 설명을 실행하면 도움이 될 것입니다.

+0

제안을 주셔서 감사 드리며, 나는 Hibernate에 의해 생성 된 TOAD에서 같은 쿼리를 실행하고있다. – vijay

+0

쿼리를 게시 할 수 있습니까? HQL과 SQL 모두? 그리고 당신이 Hibernate에서 그것을 실행하고있는 코드? Hibernate가 ** 동일한 ** 쿼리를 실행하는 데 더 오래 걸릴 것으로 생각하는 것이 가장 힘든 시간입니다. – ChssPly76

+0

답장을 보내 주셔서 감사합니다. 나는 SQL 쿼리로 변환하는 Criteria 오브젝트를 가지고 있습니다. 쿼리는 조건과 일치하는 오브젝트의 수입니다. DB에 50,000 개의 레코드가있는 개발 환경에서 프로그램을 실행하면 결과가 나옵니다. 그러나 Perf에서 같은 프로그램을 실행할 때. env는 10M 레코드와 같은 쿼리를 반환하지 않습니다. TOAD에서 동일한 쿼리를 실행하면 결과가 나타납니다. 내 쿼리는 다음과 같습니다. y0_로서 카운트 (고유 A_.A_ID) A_ 에서 y1_ 같은 A_.C_ID 이너 A_.A_ID = B_.A_ID에 B B_ 가입을 선택 – vijay