2013-07-01 4 views
1

나는 아주 이상한 행동을 분류하려고합니다. 시스템 중 하나에서후속 쿼리가 왜 그렇게 느린 이유는 무엇입니까?

  • 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 

건이며, 사용자가 자신이 확인하고자하는 상점을 선택할 수 있습니다, 사물 이상한 얻을 곳이다.

첫 번째 저장소를 검사하면 결과가 빠르게 나타납니다. 그러나 이후의 모든 쿼리는 훨씬 더 많은 시간이 걸립니다. 나 예시 보자

  1. 사용자 검사 점 (15) (타오르는 빠른 결과) - 약 200 밀리
  2. 사용자 검사 점 2 (매우 느린 결과) - 약 8000 MS 이제

이 주목 부분적으로, 그것은 매우 중요합니다.

  1. 사용자가 로그 아웃했다가 다시 로그인합니다.
  2. 사용자 확인 저장소 2 (8000ms 걸린 저장소)가 이제는 결과가 빠르게 타격을받습니다.

이전에는 오래 걸렸던 동일한 저장소의 경우 매우 이상합니다. 이제는 매우 빠르게로드됩니다. SQLDeveloper에서 쿼리를 시도 할 때마다 결과도 매우 빠르게 나타납니다.

EJB@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)으로 주석을 달았지만 실행 시간에는 아무런 차이가 없었습니다.

JDBC을 사용하여 쿼리를 실행하는 독립 실행 형 프로젝트를 만들었습니다. 결과가 빠르며, 내 DataSource, persistence.xml 또는 그와 비슷한 것으로 일부 구성 될 수 있다고 생각합니다.

아무도 단서가 있습니까?

+0

어떻게 세션, 트랜잭션을 관리합니까? – Olaf

+0

JDBC 호출을 로깅하고 쿼리 외의 다른 것이 실행되고 있는지 확인하는 방법은 무엇입니까? – OldProgrammer

+0

@Olaf 그들은 컨테이너에 의해 모두 관리되고 있는데, 나는 EntityManager의 인스턴스를 주입한다. –

답변

1

몇 가지 :

  1. 사용자 검사가 두 번째 시간에 상점 2

    , 오라클 최적화는 아마 "캐시"의 사용, 따라서 그것을 빨리 타오르는됩니다.
  2. store2에는 얼마나 많은 파일 레코드가 있습니까?

begin dbms_stats.gather_table_stats(user,'file' , estimate_percent=>100); end; 이 테이블의 보장합니다 : 다른 상점 후이 방법을 수행하려고보다이 파일 테이블이 특별한 통계를 필요로하는 경우 예를 들어, 상점 2가 dramaticly 더 파일 기록이있는 경우,보고 문장으로 그룹을 수행 할 통계는 정확합니다.

    쿼리를 최적화 할 수 있습니다
  1. , 당신은 같은 것을 할 수있는, 3 회 "합"을 수행 할 필요가 없습니다 :

    select f.type , count(*) from File f where f.store.id = :storeId and f.type IN ('TYPE_1', 'TYPE_2', 'TYPE_3') group by f.type

+0

가장 빠른 검색은 실제로 가장 빠른 검색이다. , 다른 사람들은 아닙니다. 그것이 거꾸로 있다면 나는 즉시 캐시를 생각할 것이다. 그러나 나는이 순서대로 행동하는 것을 본 적이 없다. 그래도 제안을 해보겠습니다. 감사합니다 :) –

관련 문제