With 구문 With란 미리 뷰를 선언해 둠으로써 추후에 계속 재사용할 수 있도록 하는 것. With절을 한 번만 참조 시 Inline으로 수행되지만 materialize 힌트를 사용해 Material 방식으로 사용할 수도 있다. with temp as ( select /*+ materialize */ ... ) Material 방식 내부적으로 임시 테이블을 생성함으로써 반복 재사용하는 것. Material 방식으로 선언된 임시 데이터는 영구적인 오브젝트가 아니며, With 절을 선언한 SQL문이 수행되는 동안 만 유지된다. 배치 프로그램에서 특정 데이터 집합을 반복적으로 사용하거나, 전체 처리 흐름을 단순화시킬 목적으로 임시 테이블을 활용하는 경우가 있는데, 이 방식을 사용하면 새로운 임시 테이블을 ..
낮은 단계의 트랜잭션 고립화 수준 사용 시 발생하는 현상 Dirty Read 트랜잭션이 rollback하였음에도 다른 트랜잭션이 rollback되기 이전의 데이터를 갖고 있는 경우 → 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽을 수 있도록 허용할 때 발생(오라클에선 해당 문제 발생 x) Non-Repeatable Read 트랜잭션이 수행되는 동안 다른 트랜잭션에 의해 값이 변경, 또는 삭제되어(update/delete) 데이터의 일관성이 보장되지 않는 현상 → 트랜잭션을 수행하는 동안 두 쿼리의 결과가 상이하게 나타나 비일관성이 발생하는 것. Phantom Read 트랜잭션 수행 중, 다른 트랜잭션에 의해 데이터가 추가되고 다시 읽었을 때 유령 레코드가 발생하는 현상 트랜잭션 수준 읽기 일관성 문장..
병렬처리 배치 프로그램 주로 대용량 데이터 처리 일련의 작업을 하나의 작업 단위로 묶어서 일괄 처리 정기적으로 반복 실행되거나 사전에 정의해 둔 조건을 충족할 때 자동 실행됨. OTLP, DW/OLAP 시스템 모두에서 활용한다. 스타일 절차형으로 작성된 프로그램 SQL 결과집합을 루프 내에서 한건씩 Fetch 하면서 또 다른 SQL을 반복해서 수행하는 형태를 이야기함. → 인덱스 구성 중요 One SQL 위주로 작성된 프로그램 튜닝 전체 처리속도 최적화를 목표로 튜닝하여야함. 튜닝 대상 선정 시 개별 서비스, 또는 프로그램 수행시간 단축보다 전체 프로세스 수행시간을 단축하는 데 더 큰 목표를 두어야함. 필요 이상의 병렬도 지정 x 배치 윈도우를 조절하여 프로그램 수행 시간대를 적절히 분산하면 개별 프로그..
파티셔닝 파티셔닝을 통해 얻을 수 있는 이점 성능 향상 경합 분산 가용성 향상 Range 파티션 특정 기준으로 범위를 지정해 나누는 방법. 예시로 특정 날짜를 기준 파티셔닝 하는 경우가 있다. create table test1 ( range_key_column date NOT NULL, data varchar2(20) ) partition by range (range_key_column) ( partition part1 values less than(to_date("20220401","YYYYMMDD")) partition part2 values less than(to_date("20220701","YYYYMMDD")) ) 특징 과거 파티션에 대량 변경이나 백업 또는 복구를 진행하는 중에도 최신 파티션을..
인덱스 Batch I/O 배경 인덱스를 통한 Table Random Access는 Single Block I/O으로 작동하기에 엄청난 부하를 유발하는데, 심지어 버퍼 캐시 경유 비용 + 래치 경합까지 발생할 수 있어 로우가 많아 질수록 각종 Wait Event가 발생해 성능이 급격히 저하되었다. 이에 Table Random Access 성능 개선을 위해 오라클은 12c 이상부터 Batch I/O를 선보였다. 실행계획은 “TABLE ACCESS BY INDEX ROWID BATCHED “로 표시된다. Batch I/O 작동 방식 기존 인덱스를 이용해 버퍼 캐시에서 찾지 못하면 Disk I/O를 수행하였던 Single I/O 방식과 달리 Batch I/O는 테이블 블록 Disk I/O를 잠시 미뤄두고 일정량..
index scan Index Range Scan 선두 칼럼이 조건절에 존재할 때 사용할 수 있는 방식이다. 선두컬럼의 값이 작을 때 효과적이다. 불가조건 인덱스를 정상적으로 범위 검색할 수 없는 이유는 인덱스 스캔 시작 지점을 찾을 수 없기 때문이다. 때문에 인덱스를 Range Scan하지 못하는 대표적인 경우는 다음과 같다. 인덱스 액세스 조건절 칼럼 가공 LIK를 통한 중간값 조회 부정형 비교 조건일 때 소트 연산 생략 아래 공식에 따라 인덱스 구성 시 소트 연산이 생략 가능하다. ‘=’ 연산자로 사용한 조건절 컬럼 선정 ‘=’ 연산자 후에 정렬 순서대로 칼럼 인덱스가 존재하여야한다. ORDER BY 절에 기술한 컬럼 추가 반드시 정렬할 순서대로 인덱스가 이어져 구성되어야한다. ‘=’ 연산자가 아닌..