Post

<오라클 성능 고도화 원리와 해법2> Ch04-10 실체화 뷰 쿼리로 재작성

오라클 성능 고도화 원리와 해법2 - Ch04-10 실체화 뷰 쿼리로 재작성

일반적인 뷰는 주로 하나 또는 그 이상의 테이블에 기초하여 논리적으로 정의한 테이블로서, ‘저장된 쿼리’ 또는 가상의 테이블이라고 불린다. 테이블이 사용될 수 있는 대부분 위치에 뷰를 사용할 수 있고, 뷰에 기초해 또 다른 뷰를 생성할 수도 있다.

정의에서도 알 수 있듯이 뷰는 쿼리만 저장하고 있을 뿐 자체적으로 데이터를 갖지는 않는다. 반면, 실체화 뷰 (Materialized View, 이하 MV는 materialize가 의미하는 것처럼 물리적으로 실제 데이터를 갖는다.

MV는 과거에 분산 환경에서 실시간 또는 일정 주기로 데이터를 복제하는 데 사용하던 Snapshot 기술을 DW 분야에 적응시킨 것이며, 여전히 데이터 복제 용도로 사용할 수 있다. DW 분야에서는 주로 두 개 이상의 테이블을 미리 조인해 두거나 (~ Join View) 대량의 테이블을 미리 group by해서 집계해두는 형태(Aggregate View)로 많이 활용되고 있다. MV를 활용하는 이유는 기준 테이블이 그만큼 대용량이기 때문인데 Join View는 같은 데이터를 중복 저장하는 비효율이 있어 활용도가 낮고, 주로 Aggregate View 형태로 활용되는 편이다.

MV를 사용하게 만드는 가장 중요한 두 가지 특징은 다음과 같다.

  • Refresh 옵션을 이용해 오라클이 집계 테이블을 자동 관리하도록 할 수 있다.
  • 옵티마이저에 의한 Query Rewrite를 지원한다.

사용자가 직접 관리하는 일반 집계 테이블과 비교할 때 MV의 가장 큰 장점은 자동으로 쿼리가 재작성(Rewrite)된다는 점이다. 일반 집계 테이블은, 쿼리 작성자가 그런 집계 테이블이 있음을 미리 인지한 상태에서 직접 그 테이블을 참조하도록 쿼리를 작성해야만 한다. 하지만 MV는 사용자가 집계 테이블의 존재를 몰라도 된다. 사용자는 기준(Base) 테이블을 쿼리하지만 옵티마이저가 알아서 MV를 액세스하도록 쿼리를 변환해주기 때문이다.

쿼리 재작성(Query Rewrite) 기능이 작동하기 위해서는 MV를 정의할 때 enable_query_rewrite 옵션을 지정해주어야하고, 세션 또는 시스템 레벨에서 아래와 같이 파라미터도 변경해주어야 한다. 9i까지는 기본 설정이 false였지만 10g부터는 true로 변경되었다.

1
alter session set query_rewrite_enabled = true;
This post is licensed under CC BY 4.0 by the author.