2014-08-28 4 views
0

일부 연구 결과에 이 구체화 된보기에서 FAST FRESH을 사용할 수 없습니까?이 경우 Materialized View 또는 Normal View를 사용 하시겠습니까?

oracle document 부분에 Complex Materialized View은 빨리 새로 고칠 수 없다고 나와 있습니다.

In some cases, an aggregate function, although it is possible to have an aggregate 
function in the defining query and still have a simple materialized view. 
For example, the following statement creates a complex materialized view: 

CREATE MATERIALIZED VIEW hr.average_sal AS 
SELECT AVG(salary) "Average" FROM [email protected]; 

는보기 내가 여러 결과 조인에 대한 SUM() 집계를 포함 만드는 오전 구체화 (6 여섯 일부 8 thousand 행을 반환해야 조인). 보기가 20 초마다 새로 고쳐 져야합니다. 여기 스크립트 내가 위의 제약 조건으로

CREATE MATERIALIZED VIEW V_MVIEW$BASEVIEW 
BUILD IMMEDIATE 
REFRESH FAST START WITH (sysdate) NEXT (sysdate+1*20/(60*60*24)) WITH PRIMARY KEY 
AS 
    select 
     cb.id as cb_id, 
     vb.id as vb_id, 
     sb.id as sb_id, 
     v.id as v_id, v.name as v_name, 
     t.t1 as t1, t.t2 as t2, t.t3 as t3, 
     c.id, 
     SUM(t.amount) as t_amount 

     from t 
      join cb on t.cb_id = cb.id 
      join vb on cb.vb_id = vb.id 
      join sb on sb.id = vb.sb_id 
      join v on v.id = sb.v_id 
      join c on c.id=cb.c_id 

     GROUP BY 
      cb.id, 
      vb.id, 
      sb.id, 
      v.id, v.name, 
      t.t1, t.t2, t.t3, 
      c.id 
      ; 

사용하지 않을조차 도움이 아직도 확신이 정상 전망보다 더 좋을 수 없다 매 20 초 동안 전체보기를 새로 고칠 수 있기 때문에, 더 이상 볼 구체화입니까? 상황을 어떻게 최적화 할 수 있습니까?

+0

20 초마다 새로 고침? 이 스크립트의 실행 시간이 10 초 이상이면 서버 처리 비용이 반으로 줄어 듭니다. 10 초 미만인 경우 구체화 된보기가 갈 길이 아닙니다. 데이터가 매분 또는 2 분이 아닌 매 20 초마다 새로 고쳐지면 비즈니스 이익을 얻으려면 어떤 이점이 있습니까? – Twelfth

+0

@Twelfth 감사합니다. 쿼리는 모든 결과를 반환하는 데 약 1 초가 걸리지 만 가장 최근의 결과를 얻으려면 20 초마다 반복해야합니다. 우리가보기를 사용하는 것을 선호하는 이유는 읽기 전용 데이터에 대한 트랜잭션 문제를 피하기 위해 I/O를 최소화하는 것입니다. 또한 다른 뷰가이 기본 뷰에 참여할 수 있지만 결과를 반환하는 데 몇 초 이상 걸리지는 않지만 10-30 초마다 새로 고침해야합니다. – Dreamer

+0

이 구체화 된 뷰가 호출되는 횟수는 몇 번입니까? 1 분에 50 번 정도 익숙해지면 말이되는 것 같아요. 그리고 두 번째 질문으로, 귀하의 색인이 좋고 여기에 완전히 사용되고 있습니까? – Twelfth

답변

0

내 경험에 따르면 호스트 시스템을 사용할 수없는 경우 수신 서버에 데이터가 없을 수없는 상황에 대해 구체화 된보기가 사용됩니다. 위의 의견에 동의하는 것은 20 초마다 새로 고치는 것이 과도한 것처럼 보이지만 데이터가하는 일이면 데이터가하는 일입니다.

예를 들어 주문 입력 시스템과 재고 관리 시스템이 있다고 가정 해 보겠습니다. 재고 관리 시스템은 재고 상태 (양호, 만료, 손상 등)를 유지합니다. 주문 입력 시스템은 주문을 받아야하는 재고가 얼마나되는지 알아야합니다. 이것은 재고 상태 정보가 주. 입력 프로세스에 중요하기 때문에 구체화 된보기에 대한 좋은 예입니다. 그것 없이는, 주문 입력 시스템은 상태를 확인할 수 없기 때문에 주문을 할 수 없습니다.

그러나 반대편에는 동일한 주문 입력 시스템이 유통 센터의 재고 및 주문 재고를 포함하는 재고 보고서를 생성한다고 가정 해 봅시다. 유통 센터에서는 주문에 대해 알지 못하므로 주문 입력 시스템이이 보고서를 생성하는 데 적합한 지 동의하십시오. 우리가 보고서를 생성 할 수 없다면, 관리자는 불평 할 수도 있지만 사업을 중단하지는 않을 것입니다. 이것은 dblink에서 표준보기에 대한 좋은 경우입니다. 데이터 사용은 중요하지 않으므로 인벤토리 관리 시스템이 어떤 이유로 다운되면 주문 입력 시스템이 나중에 보고서를 실행할 수 있기 때문에 큰 문제는 아닙니다.

죄송합니다. 귀하의 질문에 정말로 답변을 드리지 못해서 죄송 합니다만, 바라건대 그것에 대해 생각할만한 것을 제공합니다.

+0

감사합니다. 나는 당신의 지위에서 지혜를 볼 수 있습니다.귀하의 게시물에 언급 된 "표준보기"는 정상적인 비 물질적 인 전망을 의미합니까? 프로젝트에서 m 뷰를 도입하려는 의도는 성능 오버 헤드를 피하기위한 것입니다. 정상적인보기에서 데이터를 잃는 것은 문제가되지 않습니다. 마스터 테이블의 데이터가 안전하기 때문에 모든 것이 좋습니다. 6 개의 테이블 조인과 함께 20 초마다 10,000 개의 레코드가 새로 고침되는 쿼리를 새로 고치는 것은 확실하지 않습니다. 오라클이 미쳐 버리는 원인이됩니다 (데이터베이스가 필요한 리소스를 적절하게 할당했다고 가정 해 봅시다). – Dreamer

관련 문제