• 통계정보 개요
    • 통계정보

      통계정보는 해당 Table 및 Index,        Column 에 대한 통계치로서 Optimizer 가 가장 효율적인 Execution plan 을 수립하기 위해 최소비용을 계산하기 위해 사용하는 정보이다.        또한 Object구조 및 Chain정보도 제공한다.

       
       

      COST Based Optimizer 의 경우 특별한 목적을 제외하고는 반드시 통계정보를 가지고 있어야 Optimizer 가 가능한 정확한 Execution Plan 을 생성하게 된다.

       
       

      예를 들면, 특정 컬럼의 distinct value 가 3 이하이면, 조건절에 해당 컬럼이 인덱스사용 조건에 만족하더라도 Optimizer 가 인덱스 사용 Cost 를 높게 계산하여 full scan 으로 유도한다.

       
       

      그러나, System Table (sys, system schema)에 대해서는 절대 통계정보를 생성해서는 안 된다. 만약 통계정보를 인위적으로 생성할 경우 비효율 발생 가능성이 매우 높다. System 은 그 자체로 최적의 관리를 함으로 절대 생성해서는 안 된다. 또한 Temporary Table 은 Table 특성 상 통계정보를 생성하지 않는다.

       
       

      통계정보 생성 시, < analyze > command 를 직접 사용할 수도 있고, Oracle 에서 제공해주는 DBMS_STATS        Package 를 활용할 수도 있다.

       
       

      Analyze 에 의해 생성되는 정보는 아래와 같다.

       
       

      •        TABLE        ( dba_tables, all_tables )

      Table에 대한 통계정보 생성할 때는 특별한 오류는 발생하지 않았으며, 다만 IOT type 의 Table 은 아래 통계정보 중 Block 정보(blocks, empty_blocks)가 Null 값이 된다. 이것은 Index 로 관리되기 때문이다.

       
       

      –        NUM_ROWS

       
       

      –        BLOCKS

       
       

      –        EMPTY_BLOCKS

       
       

      –        AVG_SPACE

       
       

      –        CHAIN_CNT

       
       

      –        AVG_ROW_LEN

       
       

      –        AVG_SPACE_FREELIST_BLOCKS

       
       

      –        NUM_FREELIST_BLOCKS

       
       

      –        SAMPLE_SIZE

       
       

      –        LAST_ANALYZED

       
       

       
       

              INDEX        ( dba_indexes, all_indexes )

      Index 는 통계정보 생성 및 이행의 가장 주의해야 할 부분으로 반드시 생성 및 이행 시 정확히 Check 해야 함.

       
       

      특히, Index Type 이 <LOB>, <DOMAIN> 인 경우에는 그 참조 값이 어떤 것인지 일일이 찾아야 하며, 단순 dba_indexes View 에서는 통계정보가 보이지 않는 경우가 대부분이다. LOB 은 하나의 Column 을 참조해야만 하는 제약사항이 있으며, 그 Column 은 하나의 독립된 object ( Table, Array) 등으로 표현된 것으로, 그 depth 가 몇 단계가 되는 것도 있다. 참조 컬럼을 확인하려면 (dba_lobs) 를 recursive 하게 찾아가야 한다.

       
       

      또한, 또 하나의 특수 Type 인 <DOMAIN> 도 확인하기 어려우며, 통계정보 또한 dba_indexes 이외의 다른 참조 View 를 통해 확인해야 함..

       
       

      해당 인덱스의 통계정보가 모두 Null 이라고 Analyze 가 잘못됐다고 판단하면 위 2개의 Index Type 에 대해서는 오류를 발생시킨다.

       
       

      또한 Index Rebuild 시 일반적으로 통계정보는 그대로 유지 된다. 그러나

      Partition Table 의 Local Index 의 경우 Rebuild 시 통계정보 삭제됨.

       
       

      –        BLEVEL

       
       

      –        LEAF_BLOCKS

       
       

      –        DISTINCT_KEYS

       
       

      –        AVG_LEAF_BLOCKS_PER_KEY

       
       

      –        AVG_DATA_BLOCKS_PER_KEY

       
       

      –        CLUSTERING_FACTOR

       
       

      –        NUM_ROWS

       
       

      –        SAMPLE_SIZE

       
       

      –        LAST_ANALYZED

       
       

       
       

      •        COLUMN        (dba_tab_columns, all_tab_columns )

      Column 통계정보는 대개 Table 통계정보가 생성되면 정상 생성 됨. 단, Patch 등 컬럼이 추가되는 경우가 있으므로 주기적으로 확인해야 함.

      –        NUM_DISTINCT

       
       

      –        LOW_VALUE

       
       

      –        HIGH_VALUE

       
       

      –        DENSITY

       
       

      –        NUM_NULLS

       
       

      –        NUM_BUCKETS

       
       

      –        LAST_ANALYZED

       
       

      –        SAMPLE_SIZE

       
       

      –        AVG_COL_LEN

     
     

    • Histogram

      Histogram 은 특정 Column 에 대한 분포도를 나타내는 것으로 Cost Based Optimizer 환경에서 조건절에 사용된 컬럼의 비교 값에 의해 처리 범위(선택성)가 크게 달라질 때 참조되는 정보로 Optimizer 는 Histogram 정보를 참조하여 Execution Plan 을 달리 생성한다. 따라서, 이것은 해당 컬럼의 값의 분포가 Skewed 되어 분포하는 경우에 특히 유용하다.

       
       

      비교되는 컬럼이 Skewed 되어 있다는 것을 알고, 그 컬럼에 대해 Histogram 정보가 있을 때에는 가능한 Literal value 를 사용하여 Optimizer가 정확한 Plan 을 생성할 수 있도록 유도해야 한다.

       
       

      << 주의 사항 >>

       
       

      –        Where 절에 BIND 변수를 사용할 경우, Histogram 정보를 사용 안 함.

       
       

      –        데이터가 정적으로 분포되어 있지 않을 경우 자주 갱신해야 함.

       
       

      –        Histogram 생성은 추가 Storage 를 차지 하므로 정확히 생성 조건 및 활용 용도를 점검 후 생성해야 함.

       
       

      –        Column 값이 동일하게 분포되어 있을 경우 사용 자제 ( 특히, unique )

       
       

      –        For all indexed        columns 옵션을 사용할 경우 unique column 에도 생성될 가능성이 많으므로 주의해서 사용해야 함.

       
       

      –        Histogram 생성 시 Sample 수는 Bucket size 의 100배 이상이어야 함.

       
       

      –        Default Bucket size : 75 ( size range : 1 ~ 254)

       
       

       
       

       
       

      Histogram 정보 확인

       
       

      •        COLUMN        (dba_tab_columns, all_tab_columns )

       
       

      –        NUM_BUCKETS ( 2 보다 큰 경우 Histogram 이 생성되었다고 판단 )

       
       

      •        HISTOGRAM        (dba_tab_histgograms , all_tab_ histgograms )

       
       

      –        OWNER

       
       

      –        TABLE_NAME

       
       

      –        COLUMN_NAME

       
       

      –        ENDPOINT_NUMBER

       
       

      –        ENDPOINT_VALUE

       
       

      –        ENDPOINT_ACTUAL_VALUE

       
       

 
 

  • 통계정보 운영 방안
    • 운영 방법

    통계정보는 물론 가장 최신 정보를 가지고 있으면 최선이지만, Data size 에 비례해 많은 생성 시간이 필요하므로 Table 의 성격에 따라 주기를 정하는 것이 합리적이다. 또한 수많은 Application 들이 수행되는 환경에서는 약간의 통계정보 변경으로 Execution Plan 이 바뀔 수 있고, 또한 그것이 항상 최선이라고 단정짓기 어려울 뿐 아니라, Execution Plan 변경에 따라 Application 수행 시간 예측이 어렵다.

    현재까지 수많은 프로그램들에 대해 튜닝이 이루어졌으며, 또한 중요한 Job 들에 대한 튜닝이 대부분 완료되어 전반적으로 가동계 시스템은 안정화 되었다고 판단된다.

     
     

    따라서, 현재의 DATA (2002. 01) 를 기준으로 전체 Table에 대해 통계정보를 생성한 후 통계정보를 Fix 시킨다.

     
     

    추가되는 Table 및 인덱스, 특별한 DDL 작업, Oracle Patch 작업에 의한 Object변경, 철저한 분석에 의해 검증된 Table 및 Column 에 한해 예외적으로 해당 Table 및 인덱스, 컬럼에 대해 새로운 통계정보를 생성하는 것을 원칙으로 한다..

     
     

    단, 현재 채취한 통계정보는 차후 전반적인 DATA SIZE 및 분포의 변동이 예상되는 시점에 전체 통계정보를 재 생성하여 Application 성능을 검증한 후 새로운 통계정보로 대체한다.

     
     

     
     

     
     

    •        기본 정책 : 전체 통계정보 Fix

    2002. 01. xx 에 가동계 DB 의 모든 Table 에 대해 생성한 통계정보를 Backup 한다. 또한 대량의 데이터 변화가 있는 시점 전반적인 Table 의 구조 변화가 있는 시점에 전체 통계정보를 재 생성한다.

    Backup 정보를 통해 향후 통계정보 이상 시 해당 Table 에 대해 통계정보를 IMPORT 한다.

     
     

    •        예외 1        (SYS, SYSTEM Schema 통계정보 생성 금지)

    SYS, SYSTEM Schema 는 절대 통계정보를 생성하지 말아야 한다.

    생성했다면 확인 후 반드시 삭제해 주어야 한다.

    Temporary Table은 Table 특성 상 통계정보를 생성하지 않는다.

     
     

    •        예외 2        ( 새로운 Table 생성, 새로운 Index 생성 )

    해당 Table 에 대해서만 통계정보 생성 및 해당 Table 통계정보를 기존

    Backup 본에 추가한다.

     
     

    •        예외 3        ( Table Definition 변경 시        )

    해당 Table의 컬럼에        대해서만 통계정보 생성 및 해당 Table 통계정보를 기존 Backup 본에 추가한다.

    ( 검증이 가능하다면 가능한 Table 전체(table, index, histogram)에 대해 수행하는 것이 좋다. )

     
     

    •        예외 4        ( Patch 에 의한 Table 정보 변경 시 )

    위 예외1, 예외2        Case 를 적용한다.

     
     

     
     

  • Sampling 방법

Analyze 수행 시 Compute statistics 방법으로 하게 되면, 전수 검사 방식이 되므로 전 Table 에 대해 Full Scan을 기본으로 수행하게 되어 많은 시간이 소요된다. 따라서, 적절한 Sampling 기준을 정해 Sampling 방법으로 수행한다. 다만, 일부 검증된 Table 및 통계정보에 민감한 Table 에 대해서는 예외 사항을 반영한다.

 
 

 
 

•        99 percent Sampling

이전 Analyze 자료에 의해 (dba_tables.num_rows) row 수가 10만 건 미만인 Table

( compute statistics 방법과 같으나, 다만 자동 Script 를 만들기 위해 이렇게 처리함)

 
 

•        20 percent Sampling

이전 Analyze 자료에 의해 (dba_tables.num_rows)         row 수가 10만 건 이상,

100 만건 미만인 Table

 
 

•        10 percent Sampling

이전 Analyze 자료에 의해 (dba_tables.num_rows) row 수가 100만 건 이상, 1000만 건 미만인 Table

 
 

•        선택적 수행 ( 대용량 Table )

이전 Analyze 자료에 의해 (dba_tables.num_rows) row 수가 1000 만 건 이상인 Table ( 이것은 수행시간을 고려하여 결정해야 하며, 보통 이정도의 데이터 건수라면 보통 Transaction 성격의 Table 이므로 그 구성비가 변동되지 않으므로 굳이 재 수행할 필요가 없다. 그러나 통계정보를 수행한다면 Sampling 5 ~ 10 percent 로 해야 한다.)

 
 

•        예외 1 ( 99 percent )

특정 Column 에 대해 정확한 통계정보가 필요한 경우 Compute Statistics

방식으로 수행한다. (Table 단위 / Column 단위 : 목적에 맞게)

그러나 이것은 철저한 검증과 함께 평소 대상 List 를 관리해야 한다.

 
 

Example> WIP_DISCRETE_JOBS (costed_type),

WIP_OPERATIONS(status_type)        등

 

•        예외 2 ( 모든 통계정보를 “0” 으로 setting )

통계정보가 모두 0 로 Setting 되어 있어야 하는 Table 의 경우 별도 확인 작업 및 .잘못된 경우 이행 작업 필요 ( 주로 Temp / Interface Table )

이것은 철저한 검증과 함께 평소 대상 List 를 관리해야 한다

Example> CST_LISTS        등

 
 

 
 

  • 통계정보 이행 운영 방안

    통계정보 이행 시 사용할 수 있는 방법 중 Table 단위의 Export / Import 를 권장한다. 관리상의 편의 및 운영 중 개별 Object 통계정보 이행 시 편리한 장점이 있다.

    Ex) DBMS_STATS.EXPORT_TABLE_STATS, DBMS_STATS.IMPORT_TABLE_STATS

     
     

  • 통계정보 이행 순서(General)
    • 통계정보 생성
    • 통계정보 저장 Table 생성
    • 통계정보 Export
    • 통계정보 저장 Table을 EXPORT Utility를 활용하여 OS file로 dump
    • FTP 를 이용해 원하는 이행 대상 DB에 dump file 전송
    • 통계정보 이행 대상 DB에 위 dump file을 IMPORT Utility를 이용해 Import
    • 통계정보 Import
    • 최종 확인
    • 통계정보 저장 Table 삭제

     
     

  • 통계정보 이행 순서
    • MASTER DB Cloning
    • 전 Table에 대한 통계정보 생성
    • 통계정보 정상 생성 여부 확인 및 조치
    • 통계정보 저장 Table 생성
    • 통계정보 Export
    • 통계정보 정상 Export 여부 확인 및 조치
    • 통계정보 변경에 의한 각종 Program 및 Application Plan 점검
    • 통계정보 저장 Table을 EXPORT Utility를 활용하여 OS file로 dump
    • FTP 를 이용해 원하는 이행 대상 DB 에 dump file 전송
    • MASTER DB 현재 통계정보 Export
    • 통계정보 이행 대상 DB에 위 dump file을 IMPORT Utility를 이용해 Import
    • 통계정보 Import
    • 통계정보 Import 후 정상 여부 확인( -> 개별 analyze 조치)
    • 최종 확인 (각 Application 점검)
    • 통계정보 저장 Table 삭제

 
 

  • 통계정보 생성 방법

통계정보 생성 시 기본 Command ANALYZE / DBMS_STATS 를 사용하지만, ERP

의 경우 특별히 FND_STATS        PACKAGE 를 활용한다.

 
 

오라클 ERP의 경우 FND_STATS PACKAGE 는 Table , Index , Column 및 ERP 에서 미리 정의된 Histogram 생성 대상 Column 에 대한 Histogram 정보를 생성할 뿐 아니라 통계정보에 대한 History 도 관리하는데 FND_STATS PACKAGE 가 자동으로 확인 후 수행한다. 만약 통계정보 생성 작업을 <analyze> command 를 이용해 manual 하게 한다면, 특히 Histogram 대상 컬럼 정보를 반드시 확인 후 별도로 Histogram 정보를 생성해야 한다.

 
 

결론적으로, 전체 DB 에 대한 통계정보 생성 시 반드시 DBMS_STATS PACKAGE 를 활용하는 것이 Manual 에 의한 실수를 줄일 수 있다.        그러나, 정확히 수행만 한다면 통계정보 자체는 차이가 없다.

 
 

  • DBMS_STATS 활용
  • DBMS_STATS.GATHER_TABLE_STATS ( Table 단위 작업 )
  • 주요 파라미터
    • Owner : Analyze 대상 Table의 Owner
    • Tabname : Analyze 대상 Table 명
    • Percent : Analyze Estimate 시 Sampling 비율
    • Degree : Analyze 시의 Parallel Degree
  • 주요 작업
    • 대상 테이블의 모든 컬럼에 대한 통계정보 획득 및 변경
    • 대상 테이블의 모든 인덱스에 대해 ANALYZE 수행
    • 대상 테이블에 대해 ANALYZE FOR TABLE을 수행
    • 대상 테이블에 포함되면서, Histogram 생성대상 column에 대한 Histogram 생성
  • 사용 예

    dbms_stats.gather_table_stats (        ownname=>’BOM’

    , tabname=>’CST_STD_COST_ADJ_VALUES’

    , estimate_percent=>10

    , degree=>1);

     
     

  • DBMS_STATS. GATHER_SCHEMA_STATS ( SCHEMA 단위 작업 )
  • 주요 파라미터
    • Schema name : Analyze 대상 Schema
    • Estimate Percent : Analyze Estimate 시 Sampling 비율
    • Degree : Analyze 시의 Parallel Degree
  • 주요 작업(아래 작업을 해당 Schema 전 Table에 대해 수행)
    • 대상 테이블의 모든 컬럼에 대한 통계정보 획득 및 변경
    • 대상 테이블의 모든 인덱스에 대해 ANALYZE 수행
    • 대상 테이블에 대해 ANALYZE FOR TABLE을 수행
    • 대상 테이블에 포함되면서 Histogram 생성 대상 Column에 대한 Histogram 생성
  • 사용 예

    dbms_stats.gather_schema_stats ( schemaname =>’BOM’

    , estimate_percent =>10

    , degree =>1);

     
     

     
     

  • DBMS_STATS. GATHER_COLUMN_STATS ( Column 단위 작업 )
  • 주요 파라미터
    • OWNNAME
    • TABNAME
    • COLNAME
    • PERCENT
    • DEGREE
    • HSIZE
    • BACKUP_FLAG
    • PARTNAME
  • 사용 예

    Exec dbms_stats.gather_column_stats ( ownname=>’APPS’

    , tabname=>’T1′

    ,colname=>’A’

    ,percent=>99

    ,degree=>1

    ,hsize=>254);

     
     

  • ANALYZE 활용
  • Table
  • 주의 사항 : Partition Table 에 대해 통계정보를 생성할 때에는 반드시 Table 이름으로 analyze 를 해야 각 partition table 및 Parent table 에 대해서 한다. Partition table 에 대해서만 할 경우 해당 Partition 통계정보만 생성된다.
  • 사용 예

    Analyze table        wip.wip_discrete_jobs compute statistics ;

    Analyze table        bom.cst_item_cost_details partition (p1) compute statistics

    Analyze table        wip.wip_discrete_jobs estimate statistics sample 20 percent ;

    Analyze table        wip.wip_discrete_jobs estimate statistics sample 10000 rows ;

    Analyze table        wip.wip_discrete_jobs        delete statistics ;

     
     

  • Index
  • 사용 예

    Analyze table wip.wip_discrate_jobs compute statistic for all indexes;

    Analyze index wip.wip_discreate_jobs_u1 compute statistics;

    Analyze index wip.wip.discreate_jobs_u1 estimate statistic sample 20 percent;

    Analyze index wip.wip_discreate_jobs_u1 delete statistics;

     
     

  • Column(histogram 생성 : default bucket size = 75, max = 254, min=1 )
  • 사용 예

    Analyze table wip.wip_discreate_jobs compute statistics for all columns;

    Analyze table wip.wip_discreate_jobs compute statistics for all columns size 75;

    Analyze table wip.wip_discreate_jobs compute statistics for all indexed columns size 254;

    Analyze table wip.wip_discreate_jobs compute statistics for columns status_type size 254;

    Analyze table wip.wip_discreate_jobs compute statistics for columns status_type, class_code size 254;

     
     

  • 주의 사항
    • Analyze table을 수행하면
      • 기존의 통계정보는 새로운 통계정보로 바뀌며 Histogram 정보도 모두 없어진다.
      • 따라서, Histogram을 재 생성해야 한다.
    • Analyze table .. For columns를 수행하면
      • 기존의 통계정보는 그대로 있고, 해당 컬럼에 대한 Histogram 정보만 계속 추가 된다.
    • IOT Table의 경우 통계정보 중 Block 정보는 Null 값이 된다.
    • Partitioned Table의 경우 가끔 index가 Analyze 되지 않는 오류 발생(항상 그렇지는 않음, 항상 확인 필요)
    • Analyze index 를 할 경우
      • 이것은 인덱스 통계정보만을 바꾼다. Table 및 Column, Histogram 정보는 전혀 영향을 주지 않는다.
    • Index type 중 LOB, DOMAIN type은 통계정보 확인 시 별도의 check routine이 필요하다.

 
 

 
 

  • 통계정보 이행
  • 통계정보 저장 Table 생성

    EXEC DBMS_STATS.CREATE_STAT_TABLE ( ownname, stattab, tblspace )

    € EXEC DBMS_STATS.CREATE_STAT_TABLE ( ‘APPS’, ‘STAT_TEMP’, ‘SKK’)

     
     

    OWNNAME : STAT TABLE의 OWNER

    STATTAB : STAT TABLE명

    TBLSPACE : 사용할 TABLESPACE, 여유 있는 임의의 T.S 지정

     
     

  • 통계정보 저장 Table 삭제

    EXEC DBMS_STATS. DROP _STAT_TABLE ( ownnae, stattab)

    € EXEC DBMS_STATS.DROP_STAT_TABLE ( ‘APPS’, ‘STAT_TEMP’)

     
     

    OWNNAME : STAT TABLE의 OWNER

    STATTAB : STAT TABLE 명

     
     

  • 통계정보 Export(Schema)

    EXEC DBMS_STATS. EXPORT_SCHEMA_STATS ( ownname, stattab, statid, statown)

    € EXEC DBMS_STATS.EXPORT_SCHEMA_STATS ( ‘BOM’,’STAT_TEMP’,’BOM’ ,’APPS’)

     
     

    OWNNAME : 대상 SCHEMA명

    STATTAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) EKS, INDEX의 첫 컬럼이므로 활용성 있게 설정

     
     

  • 통계정보 Export(Table)

    EXEC DBMS_STATS.EXPORT_TABLE_STATS ( ownname, tabname, partname, stattab, statid, cascade, statown )

    € EXEC DBMS_STATS.EXPORT_TABLE_STATS(‘BOM’,’CST_LISTS’,”,’STAT_TEMP’, ‘CST_LISTS’, TRUE,’APPS’)

     
     

    OWNNAME : 대상 TABLE의 OWNER

    TABNAME : 대상 TABLE명

    PARTNAME : PARTITION명

    STATTAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 첫 컬럼이므로 활용성 있게 설정(EX, TABLE명 등)

    CASCADE : 인덱스, 컬럼, HISTOGRAM 포함 여부

    STATOWN : STAT TABLE의 OWNER

     
     

  • 통계정보 Export(Index)

    EXEC DBMS_STATS.EXPORT_INDEX_STATS ( ownname, indname, partname, stattab, statid, statown )

    € EXEC DBMS_STATS.EXPORT_INDEX_STATS(‘BOM’,’CST_LISTS_U1′,”,’STAT_TEMP’, ‘CST_LISTS’,’APPS’ )

     
     

    OWNNAME : 대상 TABLE의 OWNER

    INDNAME : 대상 INDEX명

    PARTNAME : PARTITION명

    STATAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 의 첫 컬럼이므로 활용성있게 설정(EX, TABLE명 등)

    STATOWN : STAT TABLE의 OWNER

     
     

  • 통계정보 Export(Column)

    EXEC DBMS_STATS.EXPORT_COLUMN_STATS ( ownname, tabname, colname, partname, stattab, statid, statown )

    € EXEC DBMS_STATS.EXPORT_COLUMN_STATS(‘BOM’,’CST_LISTS’,’LIST_ID’,’STAT_TEMP’,’CST_LISTS’,’APPS’ )

     
     

    OWNNAME : 대상 TABLE의 OWNER

    TABNAME : 대상 TABLE 명

    COLNAME : 대상 COLUMN명

    PARTNAME : PARTITION명

    STATTAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 의 첫 컬럼이므로 활용성있게 설정(EX, TABLE명 등)

    STATOWN : STAT TABLE의 OWNER

     
     

  • 통계정보 Import(Schema)

    EXEC DBMS_STATS. IMPORT_SCHEMA_STATS ( ownname, stattab, statid, statown)

    == > EXEC DBMS_STATS.IMPORT_SCHEMA_STATS (‘BOM’,’STAT_TEMP’,”,’APPS’)

     
     

    OWNNAME : 대상 TABLE의 OWNER

    STATAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 의 첫 컬럼이므로 활용성있게 설정(EX, TABLE명 등)

    STATOWN : STAT TABLE의 OWNER

     
     

     
     

  • 통계정보 Import(Table)

    EXEC DBMS_STATS.IMPORT_TABLE_STATS ( ownname, tabname, partname, stattab, statid, cascade, statown )

    € DBMS_STATS.IMPORT_TABLE_STATS(‘BOM’,’CST_LISTS’,”,’STAT_TEMP’, ‘CST_LISTS’, TRUE,’APPS’)

     
     

    OWNNAME : 대상 TABLE의 OWNER

    TABNAME : 대상 TABLE명

    PARTNAME : PARTITION명

    STATTAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 첫 컬럼이므로 활용성 있게 설정(EX, TABLE명 등)

    CASCADE : 인덱스, 컬럼, HISTOGRAM 포함 여부

    STATOWN : STAT TABLE의 OWNER

     
     

     
     

  • 통계정보 Import(Index)

    EXEC DBMS_STATS.IMPORT_INDEX_STATS ( ownname, indname, partname, stattab, statid, statown )

    € EXEC DBMS_STATS.IMPORT_INDEX_STATS(‘BOM’,’CST_LISTS_U1′,”,’STAT_TEMP’, ‘CST_LISTS’, ‘APPS’ )

     
     

    OWNNAME : 대상 TABLE의 OWNER

    INDNAME : 대상 INDEX명

    PARTNAME : PARTITION명

    STATAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 의 첫 컬럼이므로 활용성있게 설정(EX, TABLE명 등)

    STATOWN : STAT TABLE의 OWNER

     
     

  • 통계정보 Import(Column)

    EXEC DBMS_STATS.IMPORT_COLUMN_STATS ( ownname, tabname, colname, partname, stattab, statid, statown )

    € EXEC DBMS_STATS.IMPORT_COLUMN_STATS

    (‘BOM’,’CST_LISTS’,’LIST_ID’,”,’STAT_TEMP’,’CST_LISTS’,’APPS’)

     
     

    OWNNAME : 대상 TABLE의 OWNER

    TABNAME : 대상 TABLE 명

    COLNAME : 대상 COLUMN명

    PARTNAME : PARTITION명

    STATTAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 의 첫 컬럼이므로 활용성있게 설정(EX, TABLE명 등)

    STATOWN : STAT TABLE의 OWNER

     
     

     
     

  • 통계정보 Delete(Schema)

    EXEC DBMS_STATS.DELETE_SCHEMA_STATS ( ownname, stattab, statid, statown)

    € EXEC DBMS_STATS.DELETE_SCHEMA_STATS ( ‘BOM’,’STAT_TEMP’,’BOM’ ,’APPS’)

     
     

    OWNNAME : 대상 TABLE의 OWNER

    STATAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 의 첫 컬럼이므로 활용성있게 설정(EX, TABLE명 등)

    STATOWN : STAT TABLE의 OWNER

     
     

  • 통계정보 Delete(Table)

    EXEC DBMS_STATS.DELETE_TABLE_STATS

    ( ownname, tabname, partname, stattab, statid, cascade_part, cascade_column, cascade_indexes, statown )

    € EXEC DBMS_STATS.DELETE_TABLE_STATS

    (‘BOM’,’CST_LISTS’,”,’STAT_TEMP’,’CST_LISTS’,TRUE,TRUE,TRUE,’APPS’)

     
     

    OWNNAME : 대상 TABLE의 OWNER

    TABNAME : 대상 TABLE 명

    PARTNAME : PARTITION명

    STATTAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 의 첫 컬럼이므로 활용성있게 설정(EX, TABLE명 등)

    CASCADE_PART : 인덱스, 컬럼, HISTOGRAM 포함 여부

    CASCADE_COLUMNS : DELETE_COLUMN_STATS 호출

    CASCADE_INDEXES : DELETE_INDEX_STATS 호출

    STATOWN : STAT TABLE의 OWNER

     
     

  • 통계정보 Delete(Index)

    EXEC DBMS_STATS.DELETE_INDEX_STATS ( ownname, indname, partname, stattab, statid, cascade_parts, statown)

    € EXEC DBMS_STATS.DELETE_INDEX_STATS(‘BOM’,’CST_LISTS_U1′,”,’STAT_TEMP’,’CST_LISTS’,TRUE,’APPS’)

     
     

    OWNNAME : 대상 TABLE의 OWNER

    TABNAME : 대상 TABLE 명

    PARTNAME : PARTITION명

    STATTAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 의 첫 컬럼이므로 활용성있게 설정(EX, TABLE명 등)

    CASCADE_PART : 인덱스, 컬럼, HISTOGRAM 포함 여부

    STATOWN : STAT TABLE의 OWNER

     
     

  • 통계정보 Delete(Column)

    EXEC DBMS_STATS.DELETE_COLUMN_STATS

    ( ownname,tabname,colname,partname,stattab,statid,cascade_parts,statown )

    € EXEC DBMS_STATS.DELETE_COLUMN_STATS

    (‘BOM’,’CST_LISTS’,’LIST_ID’,”,’STAT_TEMP’,’CST_LISTS’,TRUE,’APPS’ )

     
     

    OWNNAME : 대상 TABLE의 OWNER

    TABNAME : 대상 TABLE 명

    COLNAME : 대상 COLUMN명

    PARTNAME : PARTITION명

    STATTAB : STAT TABLE명

    STATID : STAT_ID(임의의 값 설정) 단, INDEX 의 첫 컬럼이므로 활용성있게 설정(EX, TABLE명 등)

    CASCADE_PART : 인덱스, 컬럼, HISTOGRAM 포함 여부

    STATOWN : STAT TABLE의 OWNER

     
     

     
     

     
     

  • 통계정보 생성(Analyze) 후 확인 Script
  • Table 통계정보 정상 유무 확인 – 통계정보가 없을 시 소문자 컬럼의 조회 결과가 나오지 않습니다.

    select OWNER, TABLE_NAME,PARTITIONED, LAST_ANALYZED, num_rows, chain_cnt, avg_space, avg_row_len from dba_tables where owner like ‘%SCOTT%’;

     
     

  • Index 통계정보 정상 유무 확인 – 인덱스 및 파티셔닝 인덱스 관련 확인

    select table_name, index_name, status, PARTITIONED, LAST_ANALYZED, num_rows, leaf_blocks, blevel

    from dba_indexes where owner = ‘SCOTT’;

     
     

    select INDEX_OWNER,INDEX_NAME,PARTITION_NAME,LAST_ANALYZED,NUM_ROWS,LEAF_BLOCKS,BLEVEL

    from dba_ind_partitions where index_owner = ‘SCOTT’;

     
     

    select INDEX_OWNER,INDEX_NAME,PARTITION_NAME,LAST_ANALYZED,NUM_ROWS,LEAF_BLOCKS,BLEVEL

    from DBA_IND_SUBPARTITIONS where index_owner = ‘SCOTT’;

     
     

     
     

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다