insert 와 delete 의 차이

ManduTheCat·2023년 11월 2일
0
post-thumbnail

오라클 기준 둘은 같은 dml 이지만 같은 데이터를 넣는데 성능차이가 날수 있다.

우선 insert 의 성능에 영향주는 요소 delete 의 성능에 영향주는 요소를 비교해보자

INSERT

  • 로그 기록 (redo.rlog)
    * LOG AHEAD 기법으로 인해 항상 리두 로그를 기록하고 디스크에
    기록한다.
    • insert 는 다이렉트 로딩 힌트를 사용해 데이터를 저장해 성능을 확보할수 있다.
  • HWM BUMP UP
    데이터를 INSERT 테이블내 논리적 저장단위인 블록 을 새롭게 확보해야하는데
    이때 HWM 기준으로 블록의 더 하위 저장단위인 EXTNT 가 저장되기 떄문에 HWM 가 이동한다 (뒤로) HWM 이동하는 작업은 고비용작업이기 때문에 성능에 영향을 주게 된다.
    즉 HWM 이 후진 해야 데이터 저장이 가능해진다.
  • 인덱스 갯수
    인덱스가 이전에 존재 하고 있다면 인덱스를 추가하는 작업이진행된다.
    데이터 겟수만큼 인덱스 추가작업이 일어난다.
    * 인덱스는 순서를 유지해야하기 때문에 고비용의 작업이 일어난다.
  • 롤백을 위한 로그기록 (undo.log)
    커밋의 ROLL BACK 수행할때 사용하는 undo.log 를 갱신하는 작업이 데이터 갯수만큼 일어난다
    변경전 데이터를 기록하는 방식으로 동작한다.
  • 디스크 I/O
    * HWP BUMP UP 을 제외한 작업은 모두 디스크에서 일어난다.

DELETE

  • HWM BUMP UP 를 제외하고 인서트와 동일하다.

성능은INSERT 보다 DELETE 가 더느리다

  • 분명 성능에 영향을 주는 요소는 DELTE 가 더 적지만 동일한 데이터양에 대해선 DELETE 가 더느리다.
  • undo 를 진행하면서 이전데이터를 기록하냐 안하냐 차이가 있기 떄문에 delete 가 더느림.
  • insert 는 이전 데이터가 없기 떄문에 undo 에서 기억할데이터가 update, delete 보다 적다.
  • undo 는 디스크 IO 기 떄문에 같은 디스크에 성능에서 이런 논리가 가능.

추가 질문

  • update 와 delete 중 누가더 느릴까?
  • 성능이 느린 delete 를 어떻게 하면 빠르게 할수 있을까?

참조

profile
알고리즘, SpringBoot, Java, DataBase

0개의 댓글