Site icon DBA의 정석

DBMS_STATS 사용

DBMS_STATS 사용

 

 

개요

Oracle8까지는 테이블, 인덱스에 대한 통계정보를 생성하기 위해 ANALYZE
명령만을 사용할 수 있었으나 Oracle8i 부터는 ANALYZE
명령 외에DBMS_STATSPackage를 제공한다.

ANALYZE명령을 사용할 경우에는 신규로 생성한 통계정보가 성능저하를 유발시키더라도 이전과 같은 통계정보를 추출하기 위해서는 다시 ANALYZE 작업을 수행해야 되기 때문에 테이블의 크기가 클 경우 많은 시간을 통계정보를 생성하는데 소비하게 된다.

또한 일부 Partitioned Table에 대해 부정확한 통계정보를 추출할 수도 있기 때문에 Oracle8i부터는DBMS_STATSPackage를 사용하여 통계정보를 생성하고 관리할 것을 권고하고 있다.

DBMS_STATSPackage를 사용할 경우 통계정보에
대한
이력관리가
가능하다.

ANALYZE명령을 사용할 때는 통계정보가 잘못될 경우 다시 ANALYZE작업을 수행해야 했고 이전과 동일한 통계정보를 생성하는 데에도 많은 어려움이 있었다.(테이블 크기가 클수록 문제는 더 심각해 진다)

그러나『DBMS_STATS』Package를 사용하면 문제가 발생하더라도 현재 Data Dictionary에 있는 통계정보를 삭제한 후 User Statistics Table에 저장되어 있는 이전 통계정보를 IMPORT하여 단시간 내에 이전과 동일한 환경으로 돌아가는 것이 가능하다.

 

여기에서는 일반적으로 가장 많이 쓰이는 Procedure에 대한 Syntax 및 사용 예를 설명한다. (자세한 내용은 “Oracle8i supplied PL/SQL Packages Reference” 매뉴얼 참조)

 

 

 

 

CREATE_STAT_TABLE

 

통계정보를 저장할 테이블을 생성한다.

Syntax

DBMS_STATS.CREATE_STAT_TABLE (

Ownname VARCHAR2,

Stattab VARCHAR2,

Tblspace VARCHAR2 DEFAULT NULL);

 

 

Parameter

 

 

Parameter 

Descrition 

Ownname 

Table Owner 

Stattab 

Table Name 

Tblspace 

Tablespace Name 

Example

EXEC DBMS.CREATE_STAT_TABLE(‘SCOTT’,’STATSTBL’,’USERS’);

 

 

DROP_STAT_TABLE

통계정보를 저장했던 테이블을 삭제한다.

 

Syntax

 

DBMS_STATS.DROP_STAT_TABLE (

Ownname VARCHAR2,

Stattab VARCHAR2);

Parameter

 

Parameter 

Descrition 

Ownname 

Table Owner 

Stattab 

Table Name 

 

Example

EXEC DBMS.DROP_STAT_TABLE(‘SCOTT’,’STATSTBL’);

 

 

GATHER_TABLE_STATS

 

테이블, 컬럼에 대한 통계정보를 생성한다. CASCADE parameter에 TRUE를 지정할 경우 인덱스에 대한 통계정보도 생성한다.

 

Syntax

 

DBMS_STATS.GATHER_TABLE_STATS (

ownname VARCHAR2,

tabname VARCHAR2,

partname VARCHAR2 DEFAULT NULL,

estimate_percent NUMBER DEFAULT NULL,

block_sample BOOLEAN DEFAULT FALSE,

method_opt VARCHAR2 DEFAULT ‘FOR ALL COLUMNS SIZE 1’,

degree NUMBER DEFAULT NULL,

granularity VARCHAR2 DEFAULT ‘DEFAULT’,

cascade BOOLEAN DEFAULT FALSE,

stattab VARCHAR2 DEFAULT NULL,

statid VARCHAR2 DEFAULT NULL,

statown VARCHAR2 DEFAULT NULL);

 

Parameter

 

Parameter 

Descrition 

Ownname 

Schema of table to analyze 

Tabname 

Table Name 

Partname 

Name of Partition 

Estimate_percent 

Percentage of Rows to estimate 

Block_sample 

Whether or not to use random block sampling instead of random row sampling

Method_opt 

Options used to create histograms. 

Degree 

Degree of parallelism

Granularity

Granularity of statistics to collect ( only pertinet if the table is partitioned ) 

Cascade 

Gather statistics on the indexes for this table.

Stattab

User stat table identifier describing where to save the current statistics.

Statid 

Identifier (optional) to associate with these statistics within stattab.

STATOWN 

STATTAB TABLE OWNER 

 

Example

 

EXEC DBMS_STATS.GATHER_TABLE_STATS( –

OWNNAME=>’SCOTT’ –

,TABNAME=>’EMP’ –

,PARTNAME=>NULL –

,ESTIMATE_PERCENT=>25 –

,BLOCK_SAMPLE=>TRUE –

,METHOD_OPT=>’FOR ALL COLUMNS SIZE 1′ –

,DEGREE=>4 –

,GRANULARITY=>’DEFAULT’ –

,CASCADE=>TRUE –

,STATTAB=>’STATSTBL’ –

,STATID=>’EMP_011229′ –

,STATOWN=>’SCOTT’);

 

 

 

 

 

 

 

GATHER_INDEX_STATS

인덱스에 대한 통계정보를 생성한다.

 

Syntax

 

DBMS_STATS.GATHER_INDEX_STATS (

Ownname VARCHAR2,

indname VARCHAR2,

partname VARCHAR2 DEFAULT NULL,

estimate_percent NUMBER DEFAULT NULL,

stattab VARCHAR2 DEFAULT NULL,

statid VARCHAR2 DEFAULT NULL,

statown VARCHAR2 DEFAULT NULL);

 

Parameter

 

Parameter 

Descrition 

Ownname 

Schema of index to analyze 

Indname 

Index Name 

Partname 

Name of Partition 

Estimate_percent 

Percentage of Rows to estimate 

Stattab 

User stat table identifier describing where to save the current statistics.

Statid 

Identifier (optional) to associate with these statistics within stattab.

 

Example

 

EXEC DBMS_STATS.GATHER_INDEX_STATS(ownname=>’scott’

,indname=>’emp’

,partname=>NULL

,stattab=>’STATSTBL’

,estimate_percent=>25

,statid=>’indemp_20010520′

);

 

 

DELETE_TABLE_STATS

테이블, 인덱스에 대한 통계정보를 Data Dictionary 또는 User Statistics Table로 부터 삭제한다. (Default로 테이블에 대한 통계정보를 삭제할 경우 인덱스에 대한 통계정보도 삭제된다)

 

Syntax

 

DBMS_STATS.DELETE_TABLE_STATS (

Ownname VARCHAR2,

Tabname VARCHAR2,

Partname VARCHAR2 DEFAULT NULL,

Stattab VARCHAR2 DEFAULT NULL,

statid VARCHAR2 DEFAULT NULL,

cascade_parts BOOLEAN DEFAULT TRUE,

cascade_columns BOOLEAN DEFAULT TRUE,

cascade_indexes BOOLEAN DEFAULT TRUE,

statown VARCHAR2 DEFAULT NULL);

 

Parameter

 

Parameter 

Descrition 

Ownname 

Schema of index to analyze 

Tabname 

Index Name 

Partname 

Name of Partition 

Stattab 

User stat table identifier describing where to save the current statistics.

Statid 

Identifier (optional) to associate with these statistics within stattab.

 

Example

 

EXEC DBMS_STATS.DELETE_TABLE_STATS(ownname=>’scott’

,tabname=>’emp’

,partname=>NULL

,stattab=>NULL

,statid=>NULL

);

 

 

EXPORT_TABLE_STATS

테이블 및 인덱스에 대한 통계정보를 Data Dictionary로 부터 Export하여 User Statistics Table에 저장한다.

 

Syntax

 

DBMS_STATS.EXPORT_TABLE_STATS (

Ownname VARCHAR2,

Tabname VARCHAR2,

Partname VARCHAR2 DEFAULT NULL,

Stattab VARCHAR2 DEFAULT NULL,

Statid VARCHAR2 DEFAULT NULL,

Cascade BOOLEAN DEFAULT TRUE,

Statown VARCHAR2 DEFAULT NULL);

 

Parameter

 

Parameter 

Descrition 

Ownname 

Schema of index to analyze 

Tabname 

Table Name 

Partname 

Name of Partition 

Stattab 

User stat table identifier describing where to save the current statistics.

Statid 

Identifier (optional) to associate with these statistics within stattab.

Cascade 

If true, then column and index statistics for this table are also exported..

 

Example

 

EXEC DBMS_STATS.EXPORT_TABLE_STATS(ownname=>’scott’

,tabname=>’emp’

,partname=>NULL

,stattab=>’statstab’

,statid=>’emp_20010321′

,cascade=>TRUE

);

 

 

 

 

IMPORT_TABLE_STATS

User Statistics Table에 저장되어 있는 테이블 및 인덱스에 대한 통계정보를 Data Dictionary로 Import한다.

 

Syntax

 

DBMS_STATS.IMPORT_TABLE_STATS (

Ownname VARCHAR2,

Tabname VARCHAR2,

Partname VARCHAR2 DEFAULT NULL,

Stattab VARCHAR2 DEFAULT NULL,

Statid VARCHAR2 DEFAULT NULL,

Cascade BOOLEAN DEFAULT TRUE,

Statown VARCHAR2 DEFAULT NULL);

 

Parameter

 

Parameter 

Descrition 

Ownname 

Schema of index to analyze 

Tabname 

Table Name 

Partname 

Name of Partition 

Stattab 

User stat table identifier describing where to save the current statistics.

Statid 

Identifier (optional) to associate with these statistics within stattab.

Cascade 

If true, then column and index statistics for this table are also exported..

 

Example

 

EXEC DBMS_STATS.IMPORT_TABLE_STATS(ownname=>’scott’

,tabname=>’emp’

,partname=>NULL

,stattab=>’statstab’

,statid=>’emp_20010321′

,cascade=>TRUE

);

 

 

유형별
작업사례

User Statistics Table생성

 

EXEC DBMS_STATS.CREATE_STAT_TABLE(‘SCOTT’,’STATSTBL’,

‘USERS’);

 

 

User Statistics Table삭제

 

EXEC DBMS_STATS.DROP_STAT_TABLE(‘SCOTT’,’STATSTBL’)

 

 

테이블에
대한
통계정보
생성

EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname=>’scott’

,tabname=>’emp’

,partname=>NULL

,estimate_percent=>25

,method_opt=>

‘FOR ALL INDEXED COLUMNS’

,degree=>1

,block_sample=>TRUE

,cascade=>TRUE

,stattab=>’STATSTBL’

,statid=>’emp_20010520′

);

 

 

테이블의
특정 PARTITION
대한
통계정보
생성

 

EXEC DBMS_STATS.GATHER_TABLE_STATS( –

OWNNAME=>’SCOTT’ –

,TABNAME=>’EMP’ –

,PARTNAME=>NULL –

,ESTIMATE_PERCENT=>25 –

,BLOCK_SAMPLE=>TRUE –

,METHOD_OPT=>’FOR ALL COLUMNS SIZE 1′ –

,DEGREE=>4 –

,GRANULARITY=>’DEFAULT’ –

,CASCADE=>TRUE –

,STATTAB=>’STATSTBL’ –

,STATID=>’EMP_011229′ –

,STATOWN=>’SCOTT’);

 

 

 

인덱스에
대한
통계정보
생성

 

EXEC DBMS_STATS.GATHER_INDEX_STATS(ownname=>’scott’

,indname=>’ix_emp’

,partname=>NULL

,estimate_percent=>25

,stattab=>’STATSTBL’

,statid=> ‘ix_emp_p06_20010520’

);

 

전체
테이블에
대한
통계정보
삭제

 

EXEC DBMS_STATS.DELETE_TABLE_STATS(ownname=>’scott’

,tabname=>’emp’

,partname=>NULL

,stattab=>NULL

,statid=>NULL

);

 

테이블에
대한
통계정보 EXPORT

 

EXEC DBMS_STATS.EXPORT_TABLE_STATS(ownname=>’scott’

,tabname=>’emp’

,partname=>NULL

,stattab=>’statstab’

,statid=>’emp_20010321′

,cascade=>TRUE

);

 

테이블에
대한
통계정보 IMPORT

 

EXEC DBMS_STATS.IMPORT_TABLE_STATS(ownname=>’scott’

,tabname=>’emp’

,partname=>NULL

,stattab=>’statstab’

,statid=>’emp_20010321′

,cascade=>TRUE

);

 

 

참고사항

 

ALTER SESSION SET SORT_AREA_SIZE = XXXX;

(byte단위로 값을 지정한다.)

 


  1.  

Exit mobile version