구체화된 뷰: 새로 고침에 실패하면 구체화된 뷰가 무효화됨

주의

이 동작 변경 사항은 2023_05 번들에 있습니다.

번들의 현재 상태는 번들 기록 섹션을 참조하십시오.

구체화된 뷰는 백그라운드 프로세스에 의해 정기적으로 자동 업데이트됩니다.

현재, 구체화된 뷰를 새로 고치는 데 실패할 경우 구체화된 뷰의 데이터가 업데이트되지 않으며 백그라운드 프로세스는 계속해서 구체화된 뷰를 주기적으로 새로 고치려고 시도합니다.

계속해서 발생할 문제(예: 구체화된 뷰 정의 또는 데이터로 인해 발생하는 0으로 나누기 오류)로 인해 발생한 실패일 경우 백그라운드 프로세스는 구체화된 뷰를 계속해서 새로 고치는 데 실패하고 구체화된 뷰의 데이터가 업데이트되지 않습니다.

현재 릴리스에서는 새로 고침 프로세스 중 특정 유형의 오류로 인해 구체화된 뷰가 무효화됩니다. 또한,

  • 구체화된 뷰를 쿼리하면 출력에 무효화 이유가 포함됩니다.

  • SHOW MATERIALIZED VIEWS 명령의 출력에는 구체화된 뷰가 무효화된 이유가 포함됩니다.

이러한 명령 출력의 정보를 사용하여 구체화된 뷰의 문제를 해결하고 ALTER MATERIALIZED VIEW … RESUME 명령을 실행하여 구체화된 뷰를 재개합니다.

요컨대, 구체화된 뷰를 새로 고치고 쿼리하는 프로세스가 아래의 설명처럼 변경됩니다.

이전

백그라운드 프로세스가 구체화된 뷰를 새로 고치지 못합니다.

구체화된 뷰의 데이터가 오래되었지만 구체화된 뷰 쿼리의 출력에 데이터가 부실하다는 점이 나타나지 않습니다.

SHOW MATERIALIZED VIEWS 명령을 실행할 때 refreshed_on 열은 데이터가 오래되었음을 나타내지만 출력에는 그 이유가 포함되지 않습니다.

현재

백그라운드 프로세스가 구체화된 뷰를 무효화합니다.

구체화된 뷰를 쿼리하면 새로 고침 프로세스가 구체화된 뷰를 업데이트하지 못한 이유를 나타내는 오류가 발생합니다. 예:

SELECT * FROM my_mv;
Copy
002037 (42601): SQL compilation error:
  Failure during expansion of view 'MY_MV':
    SQL compilation error: Materialized View MY_MV is invalid.
    Invalidation reason: Division by zero

SHOW MATERIALIZED VIEWS 명령을 실행할 때 invalid 열은 구체화된 뷰가 유효하지 않음을 나타내고, invalid_reason 열에는 무효화 이유가 포함됩니다. 예:

SHOW MATERIALIZED VIEWS;
Copy
...  +---------+------------------+ ...
...  | invalid | invalid_reason   | ...
...  +---------+------------------+ ...
...  | true    | Division by zero | ...
...  +---------+------------------+ ...

예를 들어 다음 문을 실행하여 구체화된 뷰를 생성한다고 가정해 보겠습니다.

CREATE OR REPLACE TABLE my_base_table (a INT, b INT, c VARCHAR(16));
Copy
INSERT INTO my_base_table VALUES (1, 1, 'valid data');
Copy
CREATE OR REPLACE MATERIALIZED VIEW my_mv AS SELECT a / b AS div FROM my_base_table;
Copy

구체화된 뷰를 새로 고치는 데 실패하는 원인이 될 데이터를 테이블에 삽입한다고 가정해 보겠습니다. 예를 들어 다음 문을 실행한다고 가정합니다.

INSERT INTO my_base_table VALUES (1, 0, 'invalid data');
Copy

다음에 구체화된 뷰를 새로 고칠 때 《0으로 나누기》 오류가 발생하며 새로 고침이 실패하게 됩니다. 새로 고침이 실패하므로 구체화된 뷰가 무효화됩니다.

무효화 이유를 보려면 구체화된 뷰를 쿼리하거나 SHOW MATERIALIZED VIEWS 명령을 실행하십시오.

SELECT * FROM my_mv;
Copy
002037 (42601): SQL compilation error:
  Failure during expansion of view 'MY_MV':
    SQL compilation error: Materialized View MY_MV is invalid.
    Invalidation reason: Division by zero
SHOW MATERIALIZED VIEWS;
Copy
...  +---------+------------------+ ...
...  | invalid | invalid_reason   | ...
...  +---------+------------------+ ...
...  | true    | Division by zero | ...
...  +---------+------------------+ ...

무효화의 원인이 된 문제를 해결하고 ALTER MATERIALIZED VIEW … RESUME 명령을 실행하여 구체화된 뷰를 재개합니다.

ALTER MATERIALIZED VIEW my_mv RESUME;
Copy

참조: 1178