h3.04 통계정보 I
옵티마이저가 참조하는 통계정보 종류로 아래 네 가지

  • 테이블통계
  • 인덱스통계
  • 컬럼 통계 (히스토그램 포함)
  • 시스템통계
통계정보를 확인할 수 있는 주요 Data Dictionary
ALL_TABLES
ALL_INDEXES
ALL_TAB_COLUMNS
ALL_IND_COLUMNS
ALL_TAB_PARTITIONS
ALL_IND_PARTITIONS
주요 Data Dictionary 내용
ALL_TABLES
NUM_ROWS : TABLE의 자료 건수
BLOCKS : TABLE이 실제 사용하는 BLOCK의 갯수
EMPTY_BLOCKS : BLOCKS중 전혀 사용하지 않은 BLOCK의 갯수
AVG_SPACE : 1 BLOCK의 평균 FREE BYTES
CHAIN_CNT : 2 BLOCK에 나누어 저장된 ROW의 개수
AVG_ROW_LEN : 1 RECORD의 평균 크기
ALL_INDEXES
BLEVEL : ROOT BLOCK으로부터 LEAF BLOCK까지의 DEPTH.
LEAF_BLOCKS : INDEX의 LEAF BLOCK 갯수
DISTINCT_KEYS : 서로 다른 값의 갯수
AVG_LEAF_BLOCKS_PER_KEY : 1개의 값으로 검색해야 하는 평균 LEAF BLOCK의 수
AVG_DATA_BLOCKS_PER_KEY : 1개의 값으로 검색해야 하는 평균 DATA BLOCK의 수
CLUSTERING_FACTOR : 해당 INDEX의 KEY 값이 TABLE에 물리적으로 배열된 정도 표시
NUM_ROWS : INDEX에 저장된 자료량
ALL_TAB_COLUMNS
NUM_DISTINCT : 서로 다른 값의 갯수
LOW_VALUE : 제일 낮은 값
HIGH_VALUE : 제일 높은 값
NUM_NULLS : NULL값의 갯수
NUM_BUCKETS : HISTOGRAM 생성 시 사용한 구분자의 갯수
DENSITY : 값의 밀도. 1/NUM_DISTINCT

NoWorkload 시스템 통계
오라클이 무작위로 1/0를 발생시켜 측정한 값 (10g ~ )
관리자가 명시적으로 선택하지 않더라도 CPU 비용 모델이 기본 비용 모델로 시용되게 하려고 오라클 10g에서 NoWorkload 시스템 통계를 도입.
Workload 시스템 통계를 수집하고 반영하는 순간 NoWorkload 시스템 통계는 무시.
어떤 이유에서건 NoWorkload 시스템 통계를 이용하기로 했다면 기본 설정 값을 그대로 사용하지 말고,
적당한 부하를 준 상태에서 NoWorkload 시스템 통계를 수집

Workload 시스탬 통계
실제 애플리케이션에서 발생하는 부하를 측정한 값 (9i부터~ )
EXP/IMP를 통하여 업그레이드 프로젝트에 쓰일수 있으며, 수동셋팅도 가능

Workload 시스탬 통계 실습
{code:sql}

SQL> select sname,pname,pval1,pval2 from sys.aux_stats$;

SNAME PNAME PVAL1








--






--

--
PVAL2





















---












--
SYSSTATS_INFO STATUS
COMPLETED

SYSSTATS_INFO DSTART
04-20-2013 00:50

SYSSTATS_INFO DSTOP
04-20-2013 00:50

SYSSTATS_INFO FLAGS 0

SYSSTATS_MAIN CPUSPEEDNW 3152.7

SYSSTATS_MAIN IOSEEKTIM 10

SYSSTATS_MAIN IOTFRSPEED 4096

SYSSTATS_MAIN SREADTIM

SYSSTATS_MAIN MREADTIM

SYSSTATS_MAIN CPUSPEED

SYSSTATS_MAIN MBRC

SYSSTATS_MAIN MAXTHR

SYSSTATS_MAIN SLAVETHR

13 개의 행이 선택되었습니다.

1. 시스템 통계를 담을 테이블 생성

begin
dbms_stats.create_stat_table(
ownname => USER
, stattab => 'mystats'
, tblspace => 'USERS'
, global_temporary => FALSE
);
end;
/

2. 시스템 통계 수집

  1. 방법2
    begin
    dbms_stats.gather_system_stats(
    gathering_mode => 'start'
    , stattab => 'mystats'
    , statid => 'OLTP');
    end;
    /

918843 개의 행이 선택되었습니다.

SQL> begin
2 dbms_stats.gather_system_stats(
3 gathering_mode => 'stop',
4 stattab => 'mystats',
5 statid =>'OLTP');
6 end;
7 /

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> begin
2 dbms_stats.export_system_stats('mystats', 'OLTP', USER);
3 end;
4 /

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> begin
2 dbms_stats.import_system_stats('mystats', 'OLTP', USER);
3 end;
4 /

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> alter system flush shared_pool;

시스템이 변경되었습니다.

SQL> select sname,pname,pval1,pval2 from sys.aux_stats$;

SNAME PNAME PVAL1








--






--

--
PVAL2






















--












--
SYSSTATS_INFO STATUS
COMPLETED

SYSSTATS_INFO DSTART
04-20-2013 00:50

SYSSTATS_INFO DSTOP
04-20-2013 00:50

SYSSTATS_INFO FLAGS 0

SYSSTATS_MAIN CPUSPEEDNW 3152.7

SYSSTATS_MAIN IOSEEKTIM 10

SYSSTATS_MAIN IOTFRSPEED 4096

SYSSTATS_MAIN SREADTIM

SYSSTATS_MAIN MREADTIM

SYSSTATS_MAIN CPUSPEED 3099

SYSSTATS_MAIN MBRC

SYSSTATS_MAIN MAXTHR

SYSSTATS_MAIN SLAVETHR

13 개의 행이 선택되었습니다.

SQL> begin
2 dbms_stats.set_system_stats ( 'CPUSPEED', 500);
3 dbms_stats.set_system_stats ( 'SREADTIM', 5.0);
4 dbms_stats.set_system_stats ( 'MREADTIM', 30.0);
5 dbms_stats.set_system_stats ( 'MBRC', 12) ;
6 end;
7 /

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> select sname,pname,pval1,pval2 from sys.aux_stats$;

SNAME PNAME PVAL1








--






--

--
PVAL2




































--
SYSSTATS_INFO STATUS
COMPLETED

SYSSTATS_INFO DSTART
04-20-2013 07:39

SYSSTATS_INFO DSTOP
04-20-2013 07:39

SYSSTATS_INFO FLAGS 1

SYSSTATS_MAIN CPUSPEEDNW 3152.7

SYSSTATS_MAIN IOSEEKTIM 10

SYSSTATS_MAIN IOTFRSPEED 4096

SYSSTATS_MAIN SREADTIM 5

SYSSTATS_MAIN MREADTIM 30

SYSSTATS_MAIN CPUSPEED 500

SYSSTATS_MAIN MBRC 12

SYSSTATS_MAIN MAXTHR

SYSSTATS_MAIN SLAVETHR

13 개의 행이 선택되었습니다.

||


||NoWorkload 시스템 통계
{code:sql}
SQL> begin
  2  dbms_stats.gather_system_stats( gathering_mode => 'NOWORKLOAD');
  3  end;
  4  /

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> select sname,pname,pval1,pval2 from sys.aux_stats$;

SNAME                          PNAME                               PVAL1
------------------------------ ------------------------------ ----------
PVAL2
--------------------------------------------------------------------------------
--------------------------------------------------
SYSSTATS_INFO                  STATUS
COMPLETED

SYSSTATS_INFO                  DSTART
04-20-2013 07:46

SYSSTATS_INFO                  DSTOP
04-20-2013 07:46

SYSSTATS_INFO                  FLAGS                                   1


SYSSTATS_MAIN                  CPUSPEEDNW                        3075.54


SYSSTATS_MAIN                  IOSEEKTIM                              10


SYSSTATS_MAIN                  IOTFRSPEED                           4096


SYSSTATS_MAIN                  SREADTIM                                5


SYSSTATS_MAIN                  MREADTIM                               30


SYSSTATS_MAIN                  CPUSPEED                              500


SYSSTATS_MAIN                  MBRC                                   12


SYSSTATS_MAIN                  MAXTHR


SYSSTATS_MAIN                  SLAVETHR



13 개의 행이 선택되었습니다.

||