나는 아주 이상한 행동을 분류하려고합니다. 시스템 중 하나에서후속 쿼리가 왜 그렇게 느린 이유는 무엇입니까?
JBoss AS 7.1.1
EJB 3.0
JPA
XA DataSource
Oracle 11g
:
내가 함께 일하고 있어요 fuctionalitites, 사용자는 각 Store
의 상태를 볼 수 있습니다. 각 Store
에 대해 쿼리를 실행하여 처리 된 모든 파일을 요약합니다. 쿼리는 다음과 같이이다 :
SELECT
SUM(CASE file.type
WHEN 'TYPE_1' THEN 1
ELSE 0
END)
,
SUM(CASE file.type
WHEN 'TYPE_2' THEN 1
ELSE 0
END)
,
SUM(CASE file.type
WHEN 'TYPE_3' THEN 1
ELSE 0
END)
FROM
File file
WHERE
file.type IN ('TYPE_1', 'TYPE_2', 'TYPE_3')
AND file.status = 'RECEIVED'
AND file.store.id = :storeId
건이며, 사용자가 자신이 확인하고자하는 상점을 선택할 수 있습니다, 사물 이상한 얻을 곳이다.
첫 번째 저장소를 검사하면 결과가 빠르게 나타납니다. 그러나 이후의 모든 쿼리는 훨씬 더 많은 시간이 걸립니다. 나 예시 보자
- 사용자 검사 점 (15) (타오르는 빠른 결과) - 약 200 밀리
- 사용자 검사 점 2 (매우 느린 결과) - 약 8000 MS 이제
이 주목 부분적으로, 그것은 매우 중요합니다.
- 사용자가 로그 아웃했다가 다시 로그인합니다.
- 사용자 확인 저장소 2 (8000ms 걸린 저장소)가 이제는 결과가 빠르게 타격을받습니다.
이전에는 오래 걸렸던 동일한 저장소의 경우 매우 이상합니다. 이제는 매우 빠르게로드됩니다. SQLDeveloper
에서 쿼리를 시도 할 때마다 결과도 매우 빠르게 나타납니다.
EJB
에 @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
으로 주석을 달았지만 실행 시간에는 아무런 차이가 없었습니다.
JDBC
을 사용하여 쿼리를 실행하는 독립 실행 형 프로젝트를 만들었습니다. 결과가 빠르며, 내 DataSource
, persistence.xml
또는 그와 비슷한 것으로 일부 구성 될 수 있다고 생각합니다.
아무도 단서가 있습니까?
어떻게 세션, 트랜잭션을 관리합니까? – Olaf
JDBC 호출을 로깅하고 쿼리 외의 다른 것이 실행되고 있는지 확인하는 방법은 무엇입니까? – OldProgrammer
@Olaf 그들은 컨테이너에 의해 모두 관리되고 있는데, 나는 EntityManager의 인스턴스를 주입한다. –