Staging Table

2024. 7. 29.·Oracle/Administration

Oracle 23ai에 Staging Table 기능이 추가되었습니다. 적재 성능을 개선하기 위해 로깅 최소화 등의 기능이 추가되기를 바랬지만 현재까지는 압축, 통계 수집, 파티션 관리가 불가능하고 삭제시 즉시 PURGE되는 점을 제외하면 일반 테이블과 크게 다르지 않은 것 같습니다.

Staging tables are heap tables optimized for fast data ingestion and for handling volatile data. Key table attributes are set to defaults for these use cases without any additional user interaction. Creating staging tables rather than 'normal' tables saves you time and effort so that you do not need to tune your table attributes for fast data ingestion with volatile data content. A staging table is configured by default with optimal configuration settings in order to guarantee the best possible performance and to avoid unnecessary performance debugging and tuning.

 

테스트 버전은 아래와 같습니다.

-- 1
SELECT version_full FROM product_component_version;

VERSION_FULL
------------
23.4.0.24.05

1 row selected.

 

테스트를 위해 아래와 같이 테이블을 생성하겠습니다. CREATE TABLE 문에 FOR STAGING 절을 사용하면 Staging 테이블이 생성됩니다. COMPRESS 절은 테스트를 위해 추가했습니다.

-- 2
DROP TABLE t1_n PURGE;
DROP TABLE t1_s PURGE;

CREATE TABLE t1_n (c1 NUMBER) COMPRESS;
CREATE TABLE t1_s (c1 NUMBER) FOR STAGING COMPRESS;

 

*_TABLES 뷰에서 Staging 테이블이 압축이 불가능하고 staging 값이 YES로 표시된다는 점을 제외하면 일반 테이블과 동일한 기본 속성을 가지고 있음을 알 수 있습니다. 아울러 *_TAB_STATISTICS 뷰의 stattype_locked 값에서 통계 수집이 잠겨 있는 것을 확인할 수 있습니다.

-- 3-1
SELECT table_name, pct_free, ini_trans, max_trans, logging, compression, staging
  FROM user_tables
 WHERE table_name IN ('T1_N', 'T1_S');

TABLE_NAME PCT_FREE INI_TRANS MAX_TRANS LOGGING COMPRESSION STAGING
---------- -------- --------- --------- ------- ----------- -------
T1_N             10         1       255 YES     ENABLED     NO
T1_S             10         1       255 YES     DISABLED    YES

2 rows selected.

-- 3-2
SELECT table_name, stattype_locked
  FROM user_tab_statistics
 WHERE table_name IN ('T1_N', 'T1_S');

TABLE_NAME STATTYPE_LOCKED
---------- ---------------
T1_N
T1_S       ALL

2 rows selected.

 

이후 테스트를 위해 t1_n 테이블의 압축을 비활성화하겠습니다. ALTER TABLE 문으로 Staging 테이블인 t1_s 테이블에 압축을 설정하면 ORA-38500 에러가 발생합니다.

-- 4-1
ALTER TABLE t1_n NOCOMPRESS;

Table altered.

-- 4-2
ALTER TABLE t1_s COMPRESS;

ORA-38500: Invalid operation on Staging TABLE

 

아래와 같이 두 테이블에 데이터를 삽입하겠습니다.

-- 5-1
INSERT /*+ APPEND */ INTO t1_n SELECT ROWNUM FROM XMLTABLE ('1 to 1000000');
COMMIT;

-- 5-2
INSERT /*+ APPEND */ INTO t1_s SELECT ROWNUM FROM XMLTABLE ('1 to 1000000');
COMMIT;

 

*_TAB_STATISTICS 뷰에서 Staging 테이블인 t1_s 테이블은 통계가 수집되지 않은 것과 *_SEGMENT 뷰에서 두 세그먼트의 크기가 동일한 것을 확인할 수 있습니다.

-- 6-1
SELECT table_name, num_rows, blocks, stattype_locked
  FROM user_tab_statistics
 WHERE table_name IN ('T1_N', 'T1_S');

TABLE_NAME NUM_ROWS BLOCKS STATTYPE_LOCKED
---------- -------- ------ ---------------
T1_N        1000000   1408
T1_S                       ALL

2 rows selected.

-- 6-2
SELECT segment_name, bytes, blocks, extents
  FROM user_segments
 WHERE segment_name IN ('T1_N', 'T1_S');

SEGMENT_NAME    BYTES BLOCKS EXTENTS
------------ -------- ------ -------
T1_N         11534336   1408      26
T1_S         11534336   1408      26

2 rows selected.

 

Staging 테이블도 강제로 통계를 수집할 수 있습니다.

-- 7-1
EXEC DBMS_STATS.GATHER_TABLE_STATS (NULL, 'T1_S', force => TRUE);

-- 7-2
SELECT table_name, num_rows, blocks, stattype_locked
  FROM user_tab_statistics
 WHERE table_name IN ('T1_N', 'T1_S');

TABLE_NAME NUM_ROWS BLOCKS STATTYPE_LOCKED
---------- -------- ------ ---------------
T1_N        1000000   1408
T1_S        1000000   1408 ALL

2 rows selected.

 

아래와 같이 두 테이블을 삭제하면 Staging 테이블인 t1_s 테이블이 즉시 PURGE됩니다.

-- 8-1
DROP TABLE t1_n;
DROP TABLE t1_s;

-- 8-2
SELECT object_name, original_name
  FROM user_recyclebin
 WHERE original_name IN ('T1_N', 'T1_S');

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ -------------
BIN$Hk4c0Pm5E0ngYwEAAH/KVA==$0 T1_N

1 row selected.

-- 8-3
PURGE TABLE t1_n;

 

관련 링크

  • ORACLE-BASE - Staging Tables in Oracle Database 23ai
저작자표시 비영리 변경금지 (새창열림)
'Oracle/Administration' 카테고리의 다른 글
  • Materialized Expression Columns
  • OATS (Object Activity Tracking System)
  • ALTER SYSTEM FLUSH LOCAL
  • ALTER TABLE MOVE 개선
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 주력해 왔으며, 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며, Oracle 사의 공식 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • Oracle (171)
        • SQL (33)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (5)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
Staging Table
상단으로

티스토리툴바