제4장 시스템 진단과 튜닝(통계정보 생성)
4.5.1. 목적
- Cost based optimizer의 비용계산
- 각 Object의 구조 검증
- Chain 생성 여부 확인을 통한 시스템저장공간 관리
4.5.2. 사용방법
4.5.2.1. ANALYZE
ANALYZE | object | (TABLE, INDEX, CLUSTER..) | |
| operation | COMPUTE | 정확한 통계값 제공, 전체 테이블을 ACCESS 하여 수집 계산하여 가장 많은 시간이 소요된다. |
| | ESTIMATE | Data Dictionary와 데이터 견본으로 산정 |
| | DELETE | 모든 통계정보 삭제 |
STATICS | | VALIDATE STRUCTURE | 오브젝트 구조 검증 |
| | LIST CHANED ROWS | TABLE, CLUSTER의 체인 로우 확인 및 보정 |
| | FOR TABLE FOR ALL... | 컬럼 히스토그램 정보 생성 |
- 통계 테이블의 생성 및 삭제
- Analyze 구문은 datadictionary의 정보를 지우고 새로이 통계정보를 갱신하는 단점을 보완하기 위해 DBMS_STATS에서는 CREATE_STAT_TABLE, DROP_STAT_TABLE를 지원하고 있다
- 통계 테이블 생성
DBMS_STATS.CREATE_STAT_TABLE(
ownname VARCHAR2,
stattab VARCHAR2,
tblspace VARCHAR2 DEFAULT NULL);
DBMS_STATS.DROP_STAT_TABLE(
ownname VARCHAR2,
stattab VARCHAR2 );
- 옵티마이저 용 통계 정보 생성
- 프로시저를 사용하여 특정 범위의 통계정보를 옵티마이저 용으로 생성 할 수 있다.
- 통계정보의 이동
- IMPORT: USER의 통계테이블=>DATA DICTIONARY
IMPORT_COLUMN_STATS
IMPORT_INDEX_STATS
IMPORT_SYSTEM_STATS
IMPORT_TABLE_STATS
IMPORT_SCHEMA_STATS
IMPORT_DATABASE_STATS
- EXPORT: DATA DICTIONARY=>USER의 통계테이블
EXPORT_COLUMN_STATS
EXPORT_INDEX_STATS
EXPORT_SYSTEM_STATS
EXPORT_TABLE_STATS
EXPORT_SCHEMA_STATS
EXPORT_DATABASE_STATS
4.5.3. DataDictionary
USER_TABLES | 총 로우의 수 |
---|
| 총 블록의 수 |
| 비어 있는 블록에 쓰여질 수 있는 빈 공간의 평균 |
| 체인이 발생된 로우의 수 |
| 로우의 평균 길이 |
USER_COLUMNS | Distinct한 값의 수 |
---|
| 히스토그램 정보 |
USER_INDEXES | 인덱스의 Depth |
---|
| Leaf block의 개수 |
| Distinct Key의 수 |
| Leaf Blocks/Key의 평균 |
| Data Block/key의 평균 |
| Clustering Factor |
| 가장 큰 Key의 값(compute지정시) |
| 가장 작은 Key의 값(compute지정시) |
USER_CLUSTER | Cluster Key당 길이의 평균 |
---|
4.5.4. 실행사항
- 총 로우 수가 많은 테이블은 작업주기를 길게 한다
- 해당 오브젝트와 연관있는 모든 오브젝트들을 동시에 작업한다. 프로시저로 작업을 수행한다.
- 테이블을 재생성하거나 새로 클러스트링한 경우 ANALYZE한다.
- 인덱스를 추가 혹은 재생성한 경우 ANALYZE한다.
- SQL이나 배치 Job을 통해 다량의 데이터를 입력한 경우 ANALYZE한다.
문서에 대하여