액세스 플랜을 사용하여 REFRESH TABLE 및 SET INTEGRITY문의 성능 문제점 자체 진단

REFRESH TABLE 또는 SET INTEGRITY문에 대해 Explain 유틸리티를 호출하면 이러한 명령문의 성능 문제점을 자체 진단하는 데 사용될 수 있는 액세스 플랜을 생성할 수 있습니다. 이는 구체화된 쿼리 테이블(MQT)을 더 잘 유지하는 데 도움이 될 수 있습니다.

REFRESH TABLE 또는 SET INTEGRITY문에 대한 액세스 플랜을 얻으려면 다음 방법 중 하나를 사용하십시오.
  • EXPLAIN문에서 EXPLAIN PLAN FOR REFRESH TABLE 또는 EXPLAIN PLAN FOR SET INTEGRITY 옵션을 사용하십시오.
  • REFRESH TABLE 또는 SET INTEGRITY문을 발행하기 전에 CURRENT EXPLAIN MODE 특수 레지스터를 EXPLAIN으로 설정한 다음 이후에 CURRENT EXPLAIN MODE 특수 레지스터를 NO로 설정하십시오.

제한사항

  • REFRESH TABLE 및 SET INTEGRITY문은 재최적화 자격이 없으므로, 이러한 두 명령문에 REOPT Explain 모드(또는 Explain 스냅샷)를 적용할 수 없습니다.
  • 지정된 설명 가능한 명령문이 재최적화됨을 표시하는 EXPLAIN문의 WITH REOPT ONCE절을 REFRESH TABLE 및 SET INTEGRITY문에 적용할 수 없습니다.

시나리오

이 시나리오는 EXPLAIN 및 REFRESH TABLE문에서 액세스 플랜을 생성 및 사용하여 성능 문제점의 원인을 자체 진단할 수 있는 방법을 보여줍니다.
  1. 테이블을 작성하고 채우십시오. 예를 들면, 다음과 같습니다.
       create table t (
         i1 int not null,
         i2 int not null,
         primary key (i1)
       );
    
       insert into t values (1,1), (2,1), (3,2), (4,2);
    
       create table mqt as (
         select i2, count(*) as cnt from t group by i2
       )
       data initially deferred
       refresh deferred;
  2. 다음과 같이 EXPLAIN 및 REFRESH TABLE문을 발행하십시오.
       explain plan for refresh table mqt;
    다음과 같이 SET CURRENT EXPLAIN MODE 특수 레지스터에서 EXPLAIN 모드를 설정하는 것으로 이 단계를 교체할 수 있습니다.
       set current explain mode explain;
       refresh table mqt;
       set current explain mode no;
  3. db2exfmt 명령을 사용하여 Explain 테이블의 컨텐츠를 형식화하고 액세스 플랜을 얻으십시오. 이 도구는 인스턴스 sqllib 디렉토리의 misc 서브디렉토리에 있습니다.
       db2exfmt -d dbname -o refresh.exp -1
  4. 액세스 플랜을 분석하여 성능 문제점의 원인을 판별하십시오. 위의 예에서, T가 대형 테이블인 경우, 테이블 스캔에 비용이 매우 많이 듭니다. 인덱스를 정리하면 쿼리의 성능이 향상될 수도 있습니다.