본문 바로가기
Programming/MSSQL

MSSQL 파티셔닝으로 DELETE할 때 유의할 점

by 제타 2018. 3. 19.
반응형

파티션 테이블을 PARTITION SWITCH를 통해 DELETE 하려고 하는데 

PARTITION RANGE가 헷갈려서 데이터가 잘못 지워질 수도 있다고 생각하여 실험을 진행했다.



테이블을 생성했다.

CREATE TABLE TEST (

DT DATE NOT NULL,

ITEM_ID VARCHAR(20) COLLATE Korean_Wansung_CS_AS NOT NULL

)

WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = HASH([ITEM_ID]),

PARTITION ([DT] RANGE RIGHT FOR VALUES ('Jan  1 2016', 'Jan  1 2017', 'Jan  1 2018')));





이렇게 만들어진 TEST 테이블은 파티션을 조회하면 다음과 같이 나온다.

파티션 번호 / 파티션 값

1 / 2016-01-01

2 / 2017-01-01

3 / 2018-01-01



그리고 TEST 테이블에 DATA를 INSERT하는데 DT를 2015년, 2016년, 2017년, 2018년






결론은


1번 파티션에는 2016-01-01 미만인 2015년 데이터가 들어가고

2번 파티션에는 2016-01-01 이상 2017-01-01 미만 2016년 데이터가 들어가고

3번 파티션에는 2017-01-01 이상 2018-01-01 미만 2017년 데이터가 들어가고

4번 파티션에는 2018-01-01 이상인 2018년 데이터가 들어간다.




대량의 데이터를 DELETE하려면 로그쓰는데 시간이나 물리적 자원이 많이 드는데 

이럴 경우 파티션 SWAP을 통해 TRUNCATE 하면 훨씬 적은 자원으로 데이터를 지울 수 있다.

하지만 파티션 SWAP을 할 땐 데이터의 RANGE를 잘 생각해야 할 것 같다.




반응형