[ORACLE] 테이블 파티션 통계정보 갱신 시 인덱스 글로벌 통계 NULL로 변경됨 테스트


    테이블 파티션 통계정보 갱신 시 인덱스 글로벌 통계정보가 NULL로 변경되는 경우 테스트입니다.
    이 경우 플랜 변경 가능성이 아주 커 주의가 필요 합니다.

      파티션 SPLIT 후 통계정보 갱신 

      SPIT 후 인덱스 글로벌 통계 변경은 없지만 파티션 통계정보 갱신 시 인덱스 글로벌 통계 NULL로 변경됨  
      
      -- 테이블 통계정보 조회
      SELECT 
      a.owner, table_name, partition_name, a.object_type, num_rows, last_analyzed, global_stats, stattype_locked, stale_stats
      FROM dba_tab_statistics a, dba_objects b
      WHERE 1=1
      AND a.owner = b.owner(+)
      AND a.table_name = b.object_name(+)
      AND a.partition_name = b.subobject_name(+)
      AND a.table_name = 'P_TAB1'
      ORDER BY owner, table_name, partition_position NULLS first
      
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 09:42:12.000|NO          |               |NO         |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:34.000|YES         |               |NO         |
      SK   |P_TAB1    |P_MAX         |PARTITION  |       0|2024-09-16 08:19:13.000|YES         |               |NO         |
      
      5 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      SELECT 
      a.owner, index_name, partition_name, a.object_type, num_rows, last_analyzed, global_stats, stattype_locked, stale_stats
      FROM dba_ind_statistics a, dba_objects b
      WHERE 1=1
      AND a.owner = b.owner(+)
      AND a.table_name = b.object_name(+)
      AND a.partition_name = b.subobject_name(+)
      AND a.table_name = 'P_TAB1'
      ORDER BY owner, index_name, partition_position NULLS FIRST
      
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 08:24:49.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 09:41:35.000|NO          |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:34.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |       0|2024-09-16 08:19:13.000|YES         |               |NO         |
      
      6 row(s) fetched.
      
      -- 파티션 SPLIT
      ALTER TABLE sk.P_TAB1 SPLIT PARTITION P_MAX AT (4001) INTO (PARTITION P4000, PARTITION P_MAX) UPDATE indexes 
      
      0 row(s) modified.
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 09:42:12.000|NO          |               |NO         |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:34.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB1    |P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 08:24:49.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 09:41:35.000|NO          |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:34.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      7 row(s) fetched.
      
      
      -- P_MAX 파티션 통계정보 갱신
      EXEC dbms_stats.gather_table_stats (ownname => 'SK', tabname => 'P_TAB1', partname => 'P_MAX', granularity => 'partition') ;
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 09:43:13.000|NO          |               |NO         |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:34.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB1    |P_MAX         |PARTITION  |       0|2024-09-16 09:43:13.000|YES         |               |NO         |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 08:24:49.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |        |                       |NO          |               |           |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:34.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |       0|2024-09-16 09:43:13.000|YES         |               |NO         |
      
      7 row(s) fetched.
      
      

      파티션 split 후 통계정보 복사

      split 시 변경없지만 신규 파티션에 통계정보 복사 시 인덱스 글로벌 통계가 NULL로 변경되며 모든 파티션에 통계정보 복사 완료 시 인덱스 글로벌 통계 채워짐
      
      -- 테이블 통계정보 조회
      SELECT 
      a.owner, table_name, partition_name, a.object_type, num_rows, last_analyzed, global_stats, stattype_locked, stale_stats
      FROM dba_tab_statistics a, dba_objects b
      WHERE 1=1
      AND a.owner = b.owner(+)
      AND a.table_name = b.object_name(+)
      AND a.partition_name = b.subobject_name(+)
      AND a.table_name = 'P_TAB1'
      ORDER BY owner, table_name, partition_position NULLS first
      
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 09:54:48.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P_MAX         |PARTITION  |       0|2024-09-16 09:54:48.000|YES         |               |NO         |
      
      5 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      SELECT 
      a.owner, index_name, partition_name, a.object_type, num_rows, last_analyzed, global_stats, stattype_locked, stale_stats
      FROM dba_ind_statistics a, dba_objects b
      WHERE 1=1
      AND a.owner = b.owner(+)
      AND a.table_name = b.object_name(+)
      AND a.partition_name = b.subobject_name(+)
      AND a.table_name = 'P_TAB1'
      ORDER BY owner, index_name, partition_position NULLS FIRST
      
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 09:54:48.000|NO          |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |       0|2024-09-16 09:54:48.000|YES         |               |NO         |
      
      6 row(s) fetched.
      
      -- 파티션 SPLIT
      ALTER TABLE sk.P_TAB1 SPLIT PARTITION P_MAX AT (4001) INTO (PARTITION P4000, PARTITION P_MAX) UPDATE indexes 
      
      0 row(s) modified.
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 09:54:48.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB1    |P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 09:54:48.000|NO          |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      7 row(s) fetched.
      
      -- P1000 파티션 통계정보 P4000 파티션으로 복사
      EXEC dbms_stats.copy_table_stats('SK', 'P_TAB1', srcpartname=>'P1000', dstpartname=>'P4000');  
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    4000|2024-09-16 09:56:11.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |        |                       |NO          |               |           |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      7 row(s) fetched.
      
      
      -- P1000 파티션 통계정보 P_MAX 파티션으로 복사
      EXEC dbms_stats.copy_table_stats('SK', 'P_TAB1', srcpartname=>'P1000', dstpartname=>'P_MAX');  
      
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    5000|2024-09-16 09:56:55.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P_MAX         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    5000|2024-09-16 09:56:55.000|NO          |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      
      7 row(s) fetched.
      

      파티션 split 후 통계정보 복사 + max 파티션 통계 수집

      모든 파티션 통계정보 채워질 때 인덱스 글로벌 통계도 채워짐
      
      -- 테이블 통계정보 조회
      SELECT 
      a.owner, table_name, partition_name, a.object_type, num_rows, last_analyzed, global_stats, stattype_locked, stale_stats
      FROM dba_tab_statistics a, dba_objects b
      WHERE 1=1
      AND a.owner = b.owner(+)
      AND a.table_name = b.object_name(+)
      AND a.partition_name = b.subobject_name(+)
      AND a.table_name = 'P_TAB1'
      ORDER BY owner, table_name, partition_position NULLS first
      
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 09:59:59.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P_MAX         |PARTITION  |       0|2024-09-16 09:59:59.000|YES         |               |NO         |
      
      5 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      SELECT 
      a.owner, index_name, partition_name, a.object_type, num_rows, last_analyzed, global_stats, stattype_locked, stale_stats
      FROM dba_ind_statistics a, dba_objects b
      WHERE 1=1
      AND a.owner = b.owner(+)
      AND a.table_name = b.object_name(+)
      AND a.partition_name = b.subobject_name(+)
      AND a.table_name = 'P_TAB1'
      ORDER BY owner, index_name, partition_position NULLS FIRST
      
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 09:59:59.000|NO          |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |       0|2024-09-16 09:59:59.000|YES         |               |NO         |
      
      6 row(s) fetched.
      
      -- 파티션 SPLIT
      ALTER TABLE sk.P_TAB1 SPLIT PARTITION P_MAX AT (4001) INTO (PARTITION P4000, PARTITION P_MAX) UPDATE indexes 
      
      0 row(s) modified.
      
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 10:00:51.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB1    |P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 10:00:51.000|NO          |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      7 row(s) fetched.
      
      -- P1000 파티션 통계정보 P4000 파티션으로 복사
      EXEC dbms_stats.copy_table_stats('SK', 'P_TAB1', srcpartname=>'P1000', dstpartname=>'P4000');  
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    4000|2024-09-16 10:01:45.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |YES        |
      SK   |P_TAB1    |P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |        |                       |NO          |               |           |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      7 row(s) fetched.
      
      -- P_MAX 파티션 통계정보 갱신
      EXEC dbms_stats.gather_table_stats (ownname => 'SK', tabname => 'P_TAB1', partname => 'P_MAX', granularity => 'partition') ;
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    4000|2024-09-16 10:02:00.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |YES        |
      SK   |P_TAB1    |P_MAX         |PARTITION  |       0|2024-09-16 10:02:00.000|YES         |               |NO         |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    4000|2024-09-16 10:02:00.000|NO          |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |       0|2024-09-16 10:02:00.000|YES         |               |NO         |
      
      7 row(s) fetched.
      

      인덱스 통계정보 수집 후 파티션 split

      인덱스 통계가 수집된 경우(GLOBAL_STATS='YES')는 파티션 통계일부가 없도고 NULL로 변경되지 않음
      
      -- 테이블 통계정보 조회
      SELECT 
      a.owner, table_name, partition_name, a.object_type, num_rows, last_analyzed, global_stats, stattype_locked, stale_stats
      FROM dba_tab_statistics a, dba_objects b
      WHERE 1=1
      AND a.owner = b.owner(+)
      AND a.table_name = b.object_name(+)
      AND a.partition_name = b.subobject_name(+)
      AND a.table_name = 'P_TAB1'
      ORDER BY owner, table_name, partition_position NULLS first
      
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 10:14:43.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P_MAX         |PARTITION  |       0|2024-09-16 10:02:00.000|YES         |               |NO         |
      
      5 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      SELECT 
      a.owner, index_name, partition_name, a.object_type, num_rows, last_analyzed, global_stats, stattype_locked, stale_stats
      FROM dba_ind_statistics a, dba_objects b
      WHERE 1=1
      AND a.owner = b.owner(+)
      AND a.table_name = b.object_name(+)
      AND a.partition_name = b.subobject_name(+)
      AND a.table_name = 'P_TAB1'
      ORDER BY owner, index_name, partition_position NULLS FIRST
      
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    4000|2024-09-16 10:02:00.000|NO          |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |       0|2024-09-16 10:02:00.000|YES         |               |NO         |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 수집
      EXEC dbms_stats.gather_index_stats (ownname => 'SK', indname => 'P_TAB2_LOC') ;
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 10:14:43.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P_MAX         |PARTITION  |       0|2024-09-16 10:02:00.000|YES         |               |NO         |
      
      5 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 10:15:25.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |       0|2024-09-16 10:15:25.000|YES         |               |NO         |
      
      6 row(s) fetched.
      
      
      -- 파티션 SPLIT
      ALTER TABLE sk.P_TAB1 SPLIT PARTITION P_MAX AT (4001) INTO (PARTITION P4000, PARTITION P_MAX) UPDATE indexes 
      
      0 row(s) modified.
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    3000|2024-09-16 10:14:43.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB1    |P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 10:15:25.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |        |                       |NO          |               |           |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      7 row(s) fetched.
      
      -- P1000 파티션 통계정보 P4000로 복사
      EXEC dbms_stats.copy_table_stats('SK', 'P_TAB1', srcpartname=>'P1000', dstpartname=>'P4000');   
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    4000|2024-09-16 10:18:19.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 10:15:25.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |        |                       |NO          |               |           |
      
      7 row(s) fetched.
      
      -- P_MAX 파티션 통계정보 갱신
      EXEC dbms_stats.gather_table_stats (ownname => 'SK', tabname => 'P_TAB1', partname => 'P_MAX', granularity => 'partition') ;
      
      -- 테이블 통계정보 조회
      
      OWNER|TABLE_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB1    |              |TABLE      |    4000|2024-09-16 10:18:48.000|NO          |               |YES        |
      SK   |P_TAB1    |P1000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P2000         |PARTITION  |    1000|2024-09-16 09:41:32.000|YES         |               |NO         |
      SK   |P_TAB1    |P3000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P4000         |PARTITION  |    1000|2024-09-16 09:41:18.000|YES         |               |NO         |
      SK   |P_TAB1    |P_MAX         |PARTITION  |       0|2024-09-16 10:18:48.000|YES         |               |NO         |
      
      6 row(s) fetched.
      
      -- 인덱스 통계정보 조회
      
      OWNER|INDEX_NAME|PARTITION_NAME|OBJECT_TYPE|NUM_ROWS|LAST_ANALYZED          |GLOBAL_STATS|STATTYPE_LOCKED|STALE_STATS|
      -----+----------+--------------+-----------+--------+-----------------------+------------+---------------+-----------+
      SK   |P_TAB2_GBL|              |INDEX      |    3000|2024-09-16 09:55:19.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|              |INDEX      |    3000|2024-09-16 10:15:25.000|YES         |               |YES        |
      SK   |P_TAB2_LOC|P1000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P2000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P3000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P4000         |PARTITION  |    1000|2024-09-16 10:15:25.000|YES         |               |NO         |
      SK   |P_TAB2_LOC|P_MAX         |PARTITION  |       0|2024-09-16 10:18:48.000|YES         |               |NO         |
      
      7 row(s) fetched.
      

      Post a Comment

      다음 이전