전체 글

Database

With 구문

With 구문 With란 미리 뷰를 선언해 둠으로써 추후에 계속 재사용할 수 있도록 하는 것. With절을 한 번만 참조 시 Inline으로 수행되지만 materialize 힌트를 사용해 Material 방식으로 사용할 수도 있다. with temp as ( select /*+ materialize */ ... ) Material 방식 내부적으로 임시 테이블을 생성함으로써 반복 재사용하는 것. Material 방식으로 선언된 임시 데이터는 영구적인 오브젝트가 아니며, With 절을 선언한 SQL문이 수행되는 동안 만 유지된다. 배치 프로그램에서 특정 데이터 집합을 반복적으로 사용하거나, 전체 처리 흐름을 단순화시킬 목적으로 임시 테이블을 활용하는 경우가 있는데, 이 방식을 사용하면 새로운 임시 테이블을 ..

Database

트랜잭션 고립화 레벨

낮은 단계의 트랜잭션 고립화 수준 사용 시 발생하는 현상 Dirty Read 트랜잭션이 rollback하였음에도 다른 트랜잭션이 rollback되기 이전의 데이터를 갖고 있는 경우 → 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽을 수 있도록 허용할 때 발생(오라클에선 해당 문제 발생 x) Non-Repeatable Read 트랜잭션이 수행되는 동안 다른 트랜잭션에 의해 값이 변경, 또는 삭제되어(update/delete) 데이터의 일관성이 보장되지 않는 현상 → 트랜잭션을 수행하는 동안 두 쿼리의 결과가 상이하게 나타나 비일관성이 발생하는 것. Phantom Read 트랜잭션 수행 중, 다른 트랜잭션에 의해 데이터가 추가되고 다시 읽었을 때 유령 레코드가 발생하는 현상 트랜잭션 수준 읽기 일관성 문장..

Database

데이터베이스 병렬처리

병렬처리 배치 프로그램 주로 대용량 데이터 처리 일련의 작업을 하나의 작업 단위로 묶어서 일괄 처리 정기적으로 반복 실행되거나 사전에 정의해 둔 조건을 충족할 때 자동 실행됨. OTLP, DW/OLAP 시스템 모두에서 활용한다. 스타일 절차형으로 작성된 프로그램 SQL 결과집합을 루프 내에서 한건씩 Fetch 하면서 또 다른 SQL을 반복해서 수행하는 형태를 이야기함. → 인덱스 구성 중요 One SQL 위주로 작성된 프로그램 튜닝 전체 처리속도 최적화를 목표로 튜닝하여야함. 튜닝 대상 선정 시 개별 서비스, 또는 프로그램 수행시간 단축보다 전체 프로세스 수행시간을 단축하는 데 더 큰 목표를 두어야함. 필요 이상의 병렬도 지정 x 배치 윈도우를 조절하여 프로그램 수행 시간대를 적절히 분산하면 개별 프로그..

Database

파티셔닝

파티셔닝 파티셔닝을 통해 얻을 수 있는 이점 성능 향상 경합 분산 가용성 향상 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")) ) 특징 과거 파티션에 대량 변경이나 백업 또는 복구를 진행하는 중에도 최신 파티션을..

Database

인덱스 Batch I/O

인덱스 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를 잠시 미뤄두고 일정량..

Database

Index Scan

index scan Index Range Scan 선두 칼럼이 조건절에 존재할 때 사용할 수 있는 방식이다. 선두컬럼의 값이 작을 때 효과적이다. 불가조건 인덱스를 정상적으로 범위 검색할 수 없는 이유는 인덱스 스캔 시작 지점을 찾을 수 없기 때문이다. 때문에 인덱스를 Range Scan하지 못하는 대표적인 경우는 다음과 같다. 인덱스 액세스 조건절 칼럼 가공 LIK를 통한 중간값 조회 부정형 비교 조건일 때 소트 연산 생략 아래 공식에 따라 인덱스 구성 시 소트 연산이 생략 가능하다. ‘=’ 연산자로 사용한 조건절 컬럼 선정 ‘=’ 연산자 후에 정렬 순서대로 칼럼 인덱스가 존재하여야한다. ORDER BY 절에 기술한 컬럼 추가 반드시 정렬할 순서대로 인덱스가 이어져 구성되어야한다. ‘=’ 연산자가 아닌..

xlwdn98767
개발 조무사 IT 개발 블로그