대형 통계 로그에 대한 쿼리 성능 향상

통계 로그 파일이 대형인 경우, 로그 레코드를 테이블에 복사하고, 인덱스를 작성한 다음 통계를 수집하여 쿼리 성능을 향상시킬 수 있습니다.

프로시저

  1. 로그 레코드에 대한 적절한 컬럼이 있는 테이블을 작성하십시오.
       create table db2user.stats_log (
         pid         bigint,
         tid         bigint,
         timestamp   timestamp,
         dbname      varchar(128),
         retcode     integer,
         eventtype   varchar(24),
         objtype     varchar(30),
         objschema   varchar(20),
         objname     varchar(30),
         event1_type varchar(20),
         event1      timestamp,
         event2_type varchar(20),
         event2      varchar(40),
         event3_type varchar(20),
         event3      varchar(40),
         eventstate  varchar(20))
  2. SYSPROC.PD_GET_DIAG_HIST에 대해 쿼리의 커서를 선언하십시오.
       declare c1 cursor for
         select pid, tid, timestamp, dbname, retcode, eventtype,
             substr(objtype, 1, 30) as objtype,
             substr(objname_qualifier, 1, 20) as objschema,
             substr(objname, 1, 30) as objname,
             substr(first_eventqualifiertype, 1, 20),
             substr(first_eventqualifier, 1, 26),
             substr(second_eventqualifiertype, 1, 20),
             substr(second_eventqualifier, 1, 40),
             substr(third_eventqualifiertype, 1, 20),
             substr(third_eventqualifier, 1, 40),
             substr(eventstate, 1, 20)
           from table (sysproc.pd_get_diag_hist
             ('optstats', 'EX', 'NONE',
               current_timestamp - 1 year, cast(null as timestamp ))) as sl
  3. 통계 로그 레코드를 테이블로 로드하십시오.
       load from c1 of cursor replace into db2user.stats_log
  4. 인덱스를 작성한 다음 테이블에서 통계를 수집하십시오.
       create index sl_ix1 on db2user.stats_log(eventtype, event1);
       create index sl_ix2 on db2user.stats_log(objtype, event1);
       create index sl_ix3 on db2user.stats_log(objname);
    
       runstats on table db2user.stats_log
         with distribution and sampled detailed indexes all;