2017-10-18 2 views
0

년 (문자), 월 (문자) 및 기타 3 차원으로 정리 된 요약 구체화보기가 있고 그 다음에 많은 조치가 있습니다. 내 데이터는 2013 년부터 현재까지 계속 증가합니다.오라클 구체화 된 뷰 : 파티션 전략

사실 Fact 테이블이 거대한 (500 + M 행은 매년 100 + M으로 증가합니다.) MV에서 마지막 12 개월 만 새로 고치려면 테이블과 MV를 파티션하는 것이 좋습니다.

많은 읽기 후에 필자는 사실 테이블을 범위 (매월)로 분할하고 MV를 월별로 분할하고 연도별로 하위 분할해야한다고 생각했습니다.

저는 파티셔닝 전략이 퍼포먼스에 결정적으로 중요하다는 것을 알고 있습니다. 그래서 누군가가 더 나은 해결책을 가지고 있는지 또는 내가 해결해 낸 것이 최적인지 묻고 있습니다.

감사합니다. 뮤직 비디오 분할의 코드

예 :

CREATE MATERIALIZED VIEW my_mv 
    PARTITION BY LIST (month) SUBPARTITION BY LIST (year) 
     (PARTITION p01 VALUES ('01') 
      (SUBPARTITION p_0117 VALUES ('2017') 
      , SUBPARTITION p_0116 VALUES ('2016') 
      , SUBPARTITION p_0115 VALUES ('2015') 
      , SUBPARTITION p_0114 VALUES ('2014') 
      , SUBPARTITION p_0113 VALUES ('2013') 
     ) 
     , PARTITION p02 VALUES ('02') 
      (SUBPARTITION p_0217 VALUES ('2017') 
      , SUBPARTITION p_0216 VALUES ('2016') 
      , SUBPARTITION p_0215 VALUES ('2015') 
      , SUBPARTITION p_0214 VALUES ('2014') 
      , SUBPARTITION p_0213 VALUES ('2013') 
     ) 

     ... 

     , PARTITION p12 VALUES ('12') 
      (SUBPARTITION p_1217 VALUES ('2017') 
      , SUBPARTITION p_1216 VALUES ('2016') 
      , SUBPARTITION p_1215 VALUES ('2015') 
      , SUBPARTITION p_1214 VALUES ('2014') 
      , SUBPARTITION p_1213 VALUES ('2013') 
     ) 
     ) 
AS 
SELECT 
    ... 
FROM 
    ... 
; 

답변

1

왜 개월 간단한 파티션을하지? 월별 및 하위 분할별로 파티션을 만드는 것은 의미가 없습니다. 이전 파티션을 삭제할 수 없으므로 일반적으로 유지 관리가 매우 어려울 수 있습니다.

SELECT 
... 
TO_TIMESTAMP(year||month, 'YYYYMM') AS PARTITION_KEY, 
... 

다음 당신은 MVIEW을 위해 :이 또한 파티션 관리에서 당신을 저장

PARTITION BY RANGE (PARTITION_KEY) INTERVAL (INTERVAL '1' MONTH) 

.

성능과 관련하여 실행하는 주요 쿼리에 따라 크게 달라질 수 있습니다. 분할되지 않은 테이블보다 분할 된 테이블에서 성능이 떨어지는 것이 상당히 쉽습니다. 기본 쿼리가 특정 날짜 범위를 선택하지 않으면 날짜에 파티션이 모순됩니다 (성능면에서).

+0

답변 해 주셔서 감사합니다. 솔루션을 통해 MV의 마지막 12 개월 만 새로 고칠 수 있다고 제안하십니까? 범위 기술을 사용하여 파티션 이름이 표시되지 않기 때문입니다. 가능하다면 코드 스케치를 제공 할 수 있습니까? 다시 감사합니다! –

+0

[DBMS_MVIEW.REFRESH()] (https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_mview.htm#i997194)에서'method => 'P' '를 사용하면 Oracle은 새로 고침 마지막 새로 고침 이후 변경된 파티션 만 - 실제로 지난 달의 파티션이어야합니다 (파티션 간격에 따라 다름). 일반적으로 파티션 이름을 예를 들어 이름으로 지정할 수 있습니다. PARTITION P_201707' 또는 값 (예 : 'PARTITION FOR (TIMESTAMP '2017-07-01 00:00:00')' –

관련 문제