Truncate 와 Delete 차이

Ju hee Lee·2024년 7월 30일

Memo

목록 보기
3/3

Truncate 와 Delete 는 어느 상황에 맞게 써야할까?

기초적인 내용을 제외하고 운영하면서 배운 내용 위주로 간략히 적어본다.

Delete :

  • 데이터가 건 by 건 으로 삭제된다.
  • 주로 테이블의 Rows 가 적으면 Delete 로 지우는게 효율적이다.
  • 실제 Meta에 할당된 데이터도 함께 지워진다.

Truncate :

  • 테이블의 데이터 건수가 많을때 사용하기 좋다.
  • Meta에 할당된 페이지를 날린다. (정확히 metadata 페이지와 extent와의 연결을 끊는다. 데이터는 남아있긴하다)
    따라서 연결만 끊기에 운영쪽에서 관리하는데 DB를 잘 아는 사람은 Index page 를 찾아 연결이 끊긴 데이터를 찾아낼 수 있다
  • Truncate 를 실행하면 sch-m 락이 걸린다.

확인법 :

BEGIN TRAN
	TRUNCATE TABLE TEST_1
  1. Tran 을 열고 trauncate 를 한뒤
  2. 새 창에서 해당 테이블을 select 하면 접근이 안된다. with(nolock) 으로도 접근불가
select *
from sys.dm_tran_locks

위 상태에서 확인 시 Sch-M Lock 이 걸리는것을 확인할 수 있다.

따라서 운영환경에서 라이브중에 Truncate 를 쓸일은 없겠지만, 만약 쓰게 된다면 해당 테이블에 잠금이 생기니 주의하여야 된다.

번외)

BEGIN TRAN
	DELETE FROM TEST_1
    
    (4개 행이 영향을 받음)

완료 시간: 2024-07-30T15:33:53.5365826+09:00

DELETE 는 TRAN을 열고 실행하면 바로 삭제되며
새 창에서 접근 또한 가능하다.

  • tran 을 열고 명령어를 실행하였기 때문에 X-Lock 만 걸림

0개의 댓글