본문 바로가기

공부 이야기/데이터베이스

Oracle Update 처리 과정 및 성능 튜닝

1. 데이터가 변경되는 경우 undo log, redo log에 변경 사항을 각각 기록한다.

2. 대용량 데이터를 변경하는 경우, undo space, tablespace, archive file이 full 차는 경우, data type이 맞지 않는 등의 이유로 장애가 발생할 수 있다.

3. 수행 시간만큼 롤백에 소요되는 시간이 오래 걸릴 수 있고 데이터 정합성이 맞지 않는 심각한 오류가 발생할 수 있다.

4. Update 처리 성능을 높이기 위해서 다음과 같은 방법이 있다.

(1) 힌트 : /*+ enable_parallel_dml parallel(6) */  

: 병렬 처리를 유도

- 예시

UPDATE /*+ enable_parallel_dml parallel(6) */ SALES

SET SALARY * 1.1

WHERE CODE > 1000

 

(2) CTAS(Create Table AS) : 변경 후 정보와 동일한 새로운 테이블을 만든 후, 바꿔치기 하는 방식이 Update 보다 더 빠를 수 있다. 

- CASE WHEN을 이용해서 SELECT를 하기 때문이다.

-> direct path I/O, nologging 옵션을 줘서 성능을 더 높일 수 있다. 물론 상황에 맞게 사용한다.

- 예시

테이블 생성)

CREATE TABLE SALES_v2 parallel 6

AS 

SELECT CODE,

CASE WHEN CODE > 1000

THEN SALARY * 1.1

ELSE SALARY

END AS SALARY,

KOR_NAME,

PROD_DATE

FROM SALES;

 

테이블명 변경)

RENAME SALES to SALES_BACKUP;

RENAME SALES_v2 to SALES;

 

참고 : 인덱스가 있는 경우, CREATE INDEX를 해줘야 한다.

 

5. DELETE도 동일한 방식으로 수행할 수 있다. 변경 대상 데이터가 테이블 레코드에서 높은 비중을 차지하거나 혹은 그냥 양이 많은 경우, CTAS가 효과적이기 때문이다.

- 예) 단가가 1000원 이상인 상품이 전체 테이블의 90%를 차지하는 경우

- 예) 변경 작업만 몇 시간씩 걸리는 경우

 

6. re-organize 작업이란? DELETE, UPDATE 작업 등으로 실제 데이터 크기보다 할당된 테이블 크기가 더 많은 경우 실제 사이즈에 맞게 압축시켜주는 작업

- 예시

ALTER TABLE 테이블명 move parallel 6

including rows

WHERE NOT (칼럼명1 = 조건)

7. re-organize 작업으로 CTAS DELETE 작업과 유사하게 동작할 수 있다.