구체화된 뷰: 새로 고침에 실패하면 구체화된 뷰가 무효화됨¶
구체화된 뷰는 백그라운드 프로세스에 의해 정기적으로 자동 업데이트됩니다.
현재, 구체화된 뷰를 새로 고치는 데 실패할 경우 구체화된 뷰의 데이터가 업데이트되지 않으며 백그라운드 프로세스는 계속해서 구체화된 뷰를 주기적으로 새로 고치려고 시도합니다.
계속해서 발생할 문제(예: 구체화된 뷰 정의 또는 데이터로 인해 발생하는 0으로 나누기 오류)로 인해 발생한 실패일 경우 백그라운드 프로세스는 구체화된 뷰를 계속해서 새로 고치는 데 실패하고 구체화된 뷰의 데이터가 업데이트되지 않습니다.
현재 릴리스에서는 새로 고침 프로세스 중 특정 유형의 오류로 인해 구체화된 뷰가 무효화됩니다. 또한,
구체화된 뷰를 쿼리하면 출력에 무효화 이유가 포함됩니다.
SHOW MATERIALIZED VIEWS 명령의 출력에는 구체화된 뷰가 무효화된 이유가 포함됩니다.
이러한 명령 출력의 정보를 사용하여 구체화된 뷰의 문제를 해결하고 ALTER MATERIALIZED VIEW … RESUME 명령을 실행하여 구체화된 뷰를 재개합니다.
요컨대, 구체화된 뷰를 새로 고치고 쿼리하는 프로세스가 아래의 설명처럼 변경됩니다.
- 이전:
백그라운드 프로세스가 구체화된 뷰를 새로 고치지 못합니다.
구체화된 뷰의 데이터가 오래되었지만 구체화된 뷰 쿼리의 출력에 데이터가 부실하다는 점이 나타나지 않습니다.
SHOW MATERIALIZED VIEWS 명령을 실행할 때 refreshed_on 열은 데이터가 오래되었음을 나타내지만 출력에는 그 이유가 포함되지 않습니다.
- 현재:
백그라운드 프로세스가 구체화된 뷰를 무효화합니다.
구체화된 뷰를 쿼리하면 새로 고침 프로세스가 구체화된 뷰를 업데이트하지 못한 이유를 나타내는 오류가 발생합니다. 예:
SELECT * FROM my_mv;
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;
... +---------+------------------+ ... ... | invalid | invalid_reason | ... ... +---------+------------------+ ... ... | true | Division by zero | ... ... +---------+------------------+ ...
예를 들어 다음 문을 실행하여 구체화된 뷰를 생성한다고 가정해 보겠습니다.
CREATE OR REPLACE TABLE my_base_table (a INT, b INT, c VARCHAR(16));
INSERT INTO my_base_table VALUES (1, 1, 'valid data');
CREATE OR REPLACE MATERIALIZED VIEW my_mv AS SELECT a / b AS div FROM my_base_table;
구체화된 뷰를 새로 고치는 데 실패하는 원인이 될 데이터를 테이블에 삽입한다고 가정해 보겠습니다. 예를 들어 다음 문을 실행한다고 가정합니다.
INSERT INTO my_base_table VALUES (1, 0, 'invalid data');
다음에 구체화된 뷰를 새로 고칠 때 “0으로 나누기” 오류가 발생하며 새로 고침이 실패하게 됩니다. 새로 고침이 실패하므로 구체화된 뷰가 무효화됩니다.
무효화 이유를 보려면 구체화된 뷰를 쿼리하거나 SHOW MATERIALIZED VIEWS 명령을 실행하십시오.
SELECT * FROM my_mv;
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 | ...
... +---------+------------------+ ...
... | true | Division by zero | ...
... +---------+------------------+ ...
무효화의 원인이 된 문제를 해결하고 ALTER MATERIALIZED VIEW … RESUME 명령을 실행하여 구체화된 뷰를 재개합니다.
ALTER MATERIALIZED VIEW my_mv RESUME;
참조: 1178