database

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 절에 기술한 컬럼 추가 반드시 정렬할 순서대로 인덱스가 이어져 구성되어야한다. ‘=’ 연산자가 아닌..

Database

Oracle IOT

IOT 테이블 전체가 인덱스 구조로 이루어진 테이블을 IOT(Index-Organized Table)이라고 부르며 테이블을 찾아가기 위한 rowid를 갖는 일반 인덱스와는 달리 모든 데이터를 리프 블록에 저장하고 있다. (인덱스 리프 블록 == 데이터 블록) IOT 구조로 테이블을 구성하기 위해선 테이블 시작 시 설정하여야하는데, 그 방법은 아래와 같다. create table index_org t (a number primary key, b varchar(10)) organization index; //IOT 생성 특징 같은 값을 가진 레코드들이 100% 정렬된 상태로 모여있기 때문에 Rnadom 액세스가 아닌, Sequential 방식으로 데이터를 액세스할 수 있다. → 넓은 범위를 액세스할 때 유리..

Database

인덱스 ROWID

제한 ROWID 포맷 오라클 초기 버전부터 사용하던 ‘제한 ROWID 포맷’은 ROWID가 데이터파일 번호 + 블록 번호 + 블록 내 로우번호로 구성된다. 확장 ROWID 포맷 오라클 8 버전부터 사용하기 시작한 ‘확장 ROWID 포맷’은 ROWID가 오브젝트 번호 + 데이터파일 번호 + 블록 번호 + 블록 내 로우번호로 구성된다. 둘 중 어느 것을 사용할지는 오브젝트 유형에 따라 다르다.

Database

인덱스 종류(알고리즘)

B-Tree 인덱스 탐색 성능을 높이기 위해 균형 있게 높이를 유지하는 자료구조. (Balanced Tree) 특징 OTLP(실시간으로 데이터 입력과 수정이 일어나는 환경)에 적합하다. 구조 트리 구조의 최상위에 하나의 루트 블록을 가지며, 그 하위에 노드가 붙어있는데 이 노드 중 가장 하위에 있는 노드를 리프 블록이라고 하며 루트 블록과 리프 블록 사이에 존재하는 블록을 브랜치 블록이라고 한다. 리프 블록 리프블록은 아래 두 개의 데이터로 이루어져 있으며 인덱스를 구성하는 칼럼의 데이터 해당 데이터를 가지고 있는 행의 위치를 가리키는 ROWID 리프 블록끼리는 이중연결 리스트 구조로 연결되어있다. 리프 블록의 각 로우와 테이블 로우 간에는 1:1 관계이고, 각 로우의 키 값과 각 테이블 로우의 키 값은..

xlwdn98767
'database' 태그의 글 목록 (3 Page)