대형 통계 로그에 대한 쿼리 성능 향상
통계 로그 파일이 대형인 경우, 로그 레코드를 테이블에 복사하고, 인덱스를 작성한 다음 통계를 수집하여 쿼리 성능을 향상시킬 수 있습니다.
프로시저
- 로그 레코드에 대한 적절한 컬럼이 있는 테이블을 작성하십시오.
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))
- 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
- 통계 로그 레코드를 테이블로 로드하십시오.
load from c1 of cursor replace into db2user.stats_log
- 인덱스를 작성한 다음 테이블에서 통계를 수집하십시오.
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;