본문 바로가기

Oracle/Tip

TOP 절을 이용한 반복 처리 데이터 삭제(대용량 DB)

집합기반 반복처리 방식의 가장 기본적인 핵심은 데이터가 기하급수적으로 늘어남에 따른 DB성능이 저하되는것을 방지하는데 사용된다.

즉, 락이 걸리는 시간을 최대한 짧게 가져가며 트랜잭션 로그가 꽉 차서 문제가 발생하는 상황을 방지 하기 위한 방법 일수도 있다.

이러한 방식은 주로 대용량 데이터베이스에 주로 사용된다. 주기적으로 배치를 실행하는 것도 이러한 문제를해결하기 위함이다.

우선 이해하기 쉽도록 테스트 테이블을 생성하여 데이터를 20건 넣었다.

SELECT *
FROM TEST_01;

COL1 COL2
---- ----
01   AA
02   AA
03   AA
04   AA
05   AA
06   AA
07   AA
08   AA
09   AA
10   AA
11   AA
12   AA
13   AA
14   AA
15   AA
16   AA
17   AA
18   AA
19   AA
20   AA

SET @BATCHSIZE = 10;
SET @ROWCNT = @BATCHSIZE

WHILE @ROWCNT = @BATCHSIZE

BEGIN ;

DELETE TOP(@BATCHSIZE)
FROM TEST_01
WHERE 1=1

SET @ROWCNT = @@ROWCOUNT;
END;

위와 같이 처리하면 BATCHSIZE 의 수만큼 조건을 만족하는 행을 순차적으로 삭제한다. 

만일 데이터가 수억건 이상 이라면 위와 같이 처리하는 방식을 꼭 써야 할 것이다.

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

crontab  (0) 2015.09.14
union 과 union all  (0) 2015.09.14
OS 부팅시 oracle 자동 시작 설정  (0) 2015.09.14
DB 선택 접속(리눅스)  (0) 2015.09.14
NLS_LANG 설정에 따른 메세지 출력 확인  (0) 2015.09.14