[Oracle] 오라클 append와 append_values 힌트, 사용방법

2022. 4. 23. 22:15·Programming/Oracle
반응형

현 프로젝트에서 대량의 데이터를  적재하기 위해 오라클에서 INSERT 문을 사용하여 데이터를 적재하고 있었다. 조금 오래걸리지만 데이터 용량이 커서 그러겠거니 하면서 평화롭게 적재를 하고 있던 도중, IT 현업이 내려와서 대용량 데이터를 압축도 안시키고 그냥 적재하고 있냐며 한바탕 쿠사리를 주길래... 당황 겸 혼나면서 찾아본 append 힌트 구문... 정확이 append 구문을 언제 사용하며, 사용하는 방법에 대해 적어보려 한다. 

 

1. append 힌트를 사용하는 이유가 무엇인가?

이것저것 찾아보니 다른 곳에서도 통상적으로 대량의 데이터를 INSERT 시킬 때에 많이 사용하는 문구가 APPEND 힌트라고 한다. APPEND 힌트를 사용하면, 중간에 버퍼 캐시를 경유하지 않고 바로 데이터 블록을 쓸 수 있어(아래와 같은 기능을 다이랙트 패스 인서트(direct path insert)라고 한다.) 적재하는 시간이 단축된다고 말한다. 또한 APPEND 힌트를 쓰면 리드 로그가 생성되지 않아서 빠르게 수행될 수 있다는 장점도 있다고 한다. (압축을 해서 넣는다기보다는 캐시를 생성하지 않아 빠른 것인데... 왜 압축이라는 단어를 말하셨는진 의문..)

 

2. append 힌트 사용 방법

보통 INSERT구문을 사용할 때에는 두가지 방법이 있다. 

 

1) INSERT INTO (to_table) SELECT * FROM (from_table);

2) INSERT INTO (to_table) values (val1, val2,.....);

 

위 INSERT 구문에는 APPEND를 사용하는 방법이 조금씩 다르다. 

 

1)  select 문을 사용하여 insert할 경우

 INSERT /*+ APPEND */ INTO (to_table) 
 SELECT * FROM (from_table)
 ;
 COMMIT;

 

2)  insert values 절을 사용할 경우

insert values를 사용하는 것은 버전 별로 조금씩 다르다.

  • 10gR2
    insert into (to_table) values (...) 에서는 /*+ append */ 힌트를 사용해도 direct_path insert가 안된다. insert into ... select에서만 append힌트가 적용된다.
  • 11gR1
    insert into (to_table) values (...) 에서 /*+ append */ 힌트를 사용하면  direct_path insert가 적용된다. 
  • 11gR2
    insert into (to_table) values (...) 에서 /*+ append */ 힌트를 사용하면  direct_path insert가 적용되지 않는다. 대신에 /*+ append_values */를 사용해야 direct_path insert가 적용된다. 
INSERT /*+ APPEND_VALUES */ INTO (to_table) VALUES (VAL1, VAL2, ....);
COMMIT;

 

3. append의 단점도 있나?

append 힌트가 최고라고 생각할 수도 있겠지만, 일단 찾아본 바로는 append힌트의 단점도 분명히 있다.

테이블에 대한 베타 락이 걸려서 해당 insert 가 종료할 때까지는 다른 트렌잭션에서 insert/update/delete문을 동시에 실행할 수 없다고 한다. 또한 noarchivelog 모드 데이터 베이스가 사용되고 있는 경우나, nologging으로 표시된 테이블을 대상으로 작업하고 있는 경우만 append 힌트가 리드 로그를 생성하지 않아 해당 상황이 아니라면, 또는 테이블 인덱스 로그를 남긴다면, append 힌트는 쓰나마나라고 한다. 

현재 현업의 상태가 어떤지는 정확하게 알지 못하나... 추후에도 동일한 상황이 생기지 않기 위해 알아보는것을 추천한다. 

 

 

 

 

ref.

https://rpaul.tistory.com/141

 

/*+ APPEND */ 힌트의 진실과 거짓

 APPEND 힌트가 최고인가요?  대량의 데이터를 INSERT 시킬때 많이 사용하는 구문 중에 하나가 INSERT INTO big_table SELECT * FROM all_objects;  라는건 많이 아실 겁니다. (물론 테이블 drop후 create tabl..

rpaul.tistory.com

https://hoing.io/archives/292

 

오라클(Oracle) - APPEND 와 APPEND_VALUES 힌트

 

hoing.io

https://jungmina.com/772

 

[Oracle] 오라클 Direct Path I/O, Direct Path Insert

Direct Path I/O 오라클 DB Buffer Cache를 경유하지 않고 곧바로 데이터 블록을 읽고 쓸 수 있도록 제공되는 기능 * Conventional Path I/O : DB Buffer Cache를 경유하는 일반적인 I/O 작업 Direct Path I/O가..

jungmina.com

 

반응형

'Programming > Oracle' 카테고리의 다른 글

[Oracle] Oracle Exadata의 압축방식 (Exadata Hybrid columnar Compression, EHCC)  (0) 2022.05.21
[Oracle] Oracle Exadata란 무엇인가  (0) 2022.05.14
[Oracle] 오라클 힌트(hint)의 개념, 사용법 알아보기  (0) 2022.03.27
[Oracle] 오라클 WITH절을 사용하여 임시테이블 만들기  (0) 2022.03.12
[Oracle] SQL 병렬 힌트를 부여하여 쿼리 수행시간 단축하기  (0) 2022.02.26
'Programming/Oracle' 카테고리의 다른 글
  • [Oracle] Oracle Exadata의 압축방식 (Exadata Hybrid columnar Compression, EHCC)
  • [Oracle] Oracle Exadata란 무엇인가
  • [Oracle] 오라클 힌트(hint)의 개념, 사용법 알아보기
  • [Oracle] 오라클 WITH절을 사용하여 임시테이블 만들기
자동화먹
자동화먹
많은 사람들에게 도움이 되는 생산적인 기록하기
    반응형
  • 자동화먹
    자동화먹의 생산적인 기록
    자동화먹
  • 전체
    오늘
    어제
    • 분류 전체보기 (144)
      • 생산성 & 자동화 툴 (30)
        • Notion (24)
        • Obsidian (0)
        • Make.com (1)
        • tips (5)
      • Programming (37)
        • Python (18)
        • Oracle (6)
        • Git (13)
      • AI Study (65)
        • DL_Basic (14)
        • ML_Basic (14)
        • NLP (21)
        • Marketing&Recommend (4)
        • chatGPT (0)
        • etc (12)
      • 주인장의 생각서랍 (10)
        • 생각정리 (4)
        • 독서기록 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    기초
    GPT
    파이토치
    Jupyter notebook
    노션
    notion
    gcp
    ML
    Google Cloud Platform
    git commit
    pytorch
    git
    자연어처리
    seq2seq
    노션첫걸음
    cnn
    Github
    빅데이터
    python기초
    nlp
    Python
    dl
    데이터분석
    머신러닝
    빅데이터분석
    LSTM
    데이터베이스
    파이토치로 시작하는 딥러닝 기초
    Transformer
    딥러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
자동화먹
[Oracle] 오라클 append와 append_values 힌트, 사용방법
상단으로

티스토리툴바