** 데이터 진흥원 - SQL 전문가 가이드의 [과목3-6장 : 고급 SQL 튜닝] 내용
(1) Sort 튜닝 (2) DML 튜닝 (3) DB CALL 튜닝 (4) 파티셔닝 (5) 대용량 배치 프로세스 튜닝 (6) 복잡 구문 간결화 - 6개 중 (2/3번)
2) DML 튜닝
◼︎ Index 비용 고려하기
> Index가 많을 수록 DML의 성능은 느려진다. 인덱스의 변형은 데이터 레코드 DML보다 더 많은 리소스를 요구한다.
(Update 연산도 인덱스의 경우 Delete&Insert를 통해 변경되며, 유지를 위해 Undo 레코드도 2개씩 생성된다.)
> 대량의 데이터를 입력/수정/삭제할 때는 인덱스를 Drop하거나 Unusable상태로 변경한 후 수행하는 것도 방법이다.
◼︎ Insert 성능 개선방법
| Oracle | SQL Server |
| - Direct Path Insert [배경 설명] DB의 일반적인 힙 테이블들을 IOT(index-organized table)이 아님으로 freelist로부터 할당받은 블록에 무작위로 입력을 진행한다. freelist는 HWM(high-water mark)하의 블록 중, 빈 블록들을 관리하는 자료구조 (지정된 pctfree, pctused에 의해 결정됨) [장점 설명] -> 대량의 Insert인 경우, 하나하나 freelist를 거치면 비효율이 발생 -> HWM 바깥 영역에 버퍼 캐시를 거치지 않고 디스크에 바로 입력 1) insert 문장에 /*+ append */ 옵션 사용 2) 병렬 모드로 insert 3) direct 옵션 지정 후, SQL*Loader(sqlldr) 데이터 로드 4) CTAS 문장 수행 위 4가지 경우, direct path insert가 수행됨. (해당 테이블은 Lock) + [nologging 모드] direct path insert가 수행될 때, redo로그마저도 생략하고 싶다면 alter table t nologging;을 수행한다. -> 장애 발생 시 복구가 되지 않는 제한이 있음으로 즉시 백업을 생성하거나, DW 이전처럼 손상 시에도 문제가 없는 경우 사용한다. |
- 최소 로깅 (minimal nologging) 'alter database SQLPRO set recovery SIMPLE' recovery 모드가 SIMPLE 또는 Bulk-logged여야 한다. 1) BULK INSERT문의 WITH절에 TABLOCK을 추가 2) Select into 3) insert into with (TABLOCK) ~ (ver 2008이상부터) 4) 클러스터형 인덱스 테이블에도 수행 가능 --------------------- use SQLPRO go alter database SQLPRO set recovery SIMPLE DBCC TRACEON(610); insert into t_idx select * from t_source order by col1 -> t_idx의 클러스터형 인덱스 키 순 정렬 --------------------- |
◼︎ Update 성능 개선방법
> 대량의 update가 필요한 경우, pk, idx 등의 변경에 의해 update 성능이 상당히 저하될 수 있음으로
pk, idx를 지우고, 테이블을 truncate한 후에, 위에서 배운 bulk insert를 진행할 때 변경하려는 구문을 적용한다.
+ delete도 마찬가지
> 조인이 포함된 update 구문 (조인 뷰 사용)
두 테이블이 키-보존(key-preserved Table : key에 의해 비교되었을 때, 중복 없이 unique하게 식별이 가능한 테이블)관계여야 함.
+ Merge문에도 조인 컨셉 적용이 가능하다.
merge into 고객 t using 고객변경분 s on (t.고객번호 = s.고객번호)
when matched then update
set t.고객번호 = s.고객번호, t.고객명 = s.고객명, t.이메일 = s.이메일,
when not matched then insert
(고객번호, 고객명, 이메일, 전화번호, 거주지역, 주소, 등록일시) values
(s.고객번호, s.고객명, s.이메일, s.전화번호, s.거주지역, s.주소, s.등록일시);
3) DB CALL 튜닝
'Data Engineering > OnPrem_DataBase' 카테고리의 다른 글
| [DataBase] 고급 SQL 튜닝 - Sort 튜닝 (0) | 2024.05.03 |
|---|---|
| [DataBase] 옵티마이저 (0) | 2024.04.21 |
| [DataBase] 조인의 원리 & 튜닝 (0) | 2024.04.10 |
| [DataBase] I/O 메커니즘 - 튜닝 지표 (0) | 2024.03.31 |
| [DataBase] 인덱스의 원리 & 스캔 & 최적화 (0) | 2024.03.31 |