비트맵 인덱스(Bitmap Index)

비트맵 인덱스(Bitmap Index)

비트맵 인덱스(Bitmap Index)는 데이터베이스에서 인덱싱을 최적화하기 위해 사용하는 인덱스 기법 중 하나입니다. 비트맵 인덱스는 각 고유한 값에 대해 비트 배열(비트맵)을 생성하여 데이터를 효율적으로 검색할 수 있도록 합니다. 특히 값의 종류(카디널리티, Cardinality)가 적은 경우(예: 성별, 상태값, 부서 코드 등)에 매우 효과적입니다. (OLTP보단 OLAP에서 효과적) 1. 비트맵 인덱스의 동작 방식 비트맵 인덱스는 각 열(column)의 고유한 값(unique value)에 … Read more

Oracle Index 문제 (Fragmentation 등)

Oracle Index 문제 (Fragmentation 등)

인덱스(Index)는 데이터 검색 성능을 향상시키는 중요한 구조이지만, 시간이 지나면서 단편화(Fragmentation), 희소성(Sparse), 비대화(Bloat), 데이터 불균형(Skew) 등의 문제로 인해 성능이 저하될 수 있습니다.이 문서에서는 Index Fragmentation(인덱스 단편화) 를 비롯한 여러 인덱스 관련 문제를 정리하고, 원인과 해결 방법을 설명합니다. 1. Index Fragmentation (인덱스 단편화) (1) Index Fragmentation이란? (2) 발생 원인 ✅ DELETE 후 블록이 재사용되지 않음✅ UPDATE 시 … Read more

Oracle의 WITH 절 (Subquery Factoring)

Oracle의 WITH 절 (Subquery Factoring)

Oracle의 WITH 절은 서브쿼리 팩터링(Subquery Factoring) 기능을 제공하여 복잡한 쿼리를 단순화하고 성능을 최적화하는 데 사용됩니다.이 절을 사용하면 서브쿼리를 여러 번 재사용하거나, 임시 데이터셋을 저장하여 쿼리 실행 성능을 향상할 수 있습니다. 1. WITH 절 기본 문법 WITH 서브쿼리_이름 AS ( SELECT 컬럼1, 컬럼2 FROM 테이블 WHERE 조건)SELECT * FROM 서브쿼리_이름; 🔹 주요 특징 2. WITH 절을 … Read more

Oracle FreeList와 HWM(High Water Mark)

Oracle FreeList와 HWM(High Water Mark)

1. FreeList와 HWM 개념 Oracle 데이터베이스에서 테이블이나 인덱스에 데이터를 저장할 때, 공간 관리와 성능 최적화를 위해 FreeList와 HWM(High Water Mark)가 중요한 역할을 합니다. 개념 설명 FreeList 테이블이나 인덱스에서 새로운 데이터가 삽입될 수 있는 여유 공간(블록) 목록 HWM (High Water Mark) 테이블에서 한 번이라도 데이터가 기록된 가장 마지막 블록의 위치 2. FreeList (프리리스트) FreeList란? FreeList 관리 … Read more

ILM (Information Lifecycle Management) in Database

ILM (Information Lifecycle Management) in Database

Information Lifecycle Management (ILM)은 데이터베이스에서 데이터의 수명 주기에 따라 저장, 보관, 이동, 삭제를 자동화하는 관리 기법입니다.즉, 자주 사용하는 데이터(핫 데이터)는 빠른 스토리지에, 오래된 데이터(콜드 데이터)는 저비용 스토리지로 이동하여 성능과 비용을 최적화하는 전략입니다. 1. ILM의 개념 ILM은 데이터의 가치와 접근 빈도에 따라 데이터 관리 전략을 자동화합니다. ✔ ILM 주요 기능 2. ILM 주요 단계 (데이터 수명 … Read more

DIRECT PATH INSERT (Oracle)

DIRECT PATH INSERT (Oracle)

1. 개요 Direct Path Insert는 Oracle에서 데이터를 삽입할 때 기존 테이블의 블록을 재사용하지 않고, 새로운 데이터 블록을 직접 할당하여 삽입하는 방식입니다. 일반적인 INSERT는 기존 블록에 데이터를 추가하지만, Direct Path Insert는 새로운 블록을 예약하여 데이터베이스에 바로 기록합니다. 🔹 Direct Path Insert 주요 특징 2. Direct Path Insert 문법 (1) 기본 문법 INSERT /*+ APPEND */ INTO … Read more

병렬 INSERT in Oracle

병렬 INSERT in Oracle

Oracle에서는 병렬 INSERT를 통해 데이터를 빠르게 삽입할 수 있습니다. 일반적인 INSERT 작업은 단일 세션에서 수행되지만, 병렬 처리(Parallel Processing)를 이용하면 여러 개의 프로세스가 동시에 데이터를 삽입하여 성능을 향상시킬 수 있습니다. 1. 병렬 INSERT 개념 병렬 INSERT는 여러 개의 병렬 프로세스를 활용하여 데이터를 삽입하는 기법입니다. Oracle은 데이터를 블록 단위로 나누고 여러 개의 프로세스가 동시에 데이터를 쓰도록 하여 … Read more

NO_UNNEST 힌트 in Oracle

NO_UNNEST 힌트 in Oracle

1. NO_UNNEST 힌트란? NO_UNNEST 힌트는 서브쿼리(Subquery)의 변환(UNNESTING) 최적화를 방지하는 데 사용됩니다. NEST의 사전적 의미는 무언가를 “포개다, 겹치다”의 의미로 중첩을 의미합니다. 서브쿼리에 unnest 힌트를 사용하게 되면, 서브쿼리를 펴서 메인쿼리와 조인으로 풀어내겠다는 의미로 보시면 됩니다. no_unnest는 중첩을 풀지 않고 필터조건으로 풀어내는 것으로 보면 됩니다. ※ /*+ unnest */ : 서브쿼리를 unnesting 함으로써 JOIN 방식으로 최적화하도록 유도 /*+ … Read more

키 보존 테이블 (Key-Preserved Table) in Oracle

키 보존 테이블 (Key-Preserved Table) in Oracle

1. 키 보존 테이블이란? 키 보존 테이블(Key-Preserved Table) 은 View(뷰)에서 특정 테이블의 기본 키(Primary Key)가 유지되는 테이블을 의미합니다. (뷰에 rowid를 제공하는 테이블)즉, 뷰를 통해 SELECT, INSERT, UPDATE, DELETE 작업을 수행할 때, 기본 키(Primary Key)가 그대로 유지되는 테이블을 말합니다. 📌 주요 개념: 2. 키 보존 테이블의 필요성 Oracle에서 뷰(View)를 사용하면 데이터를 읽기 전용(READ-ONLY) 으로 볼 수 … Read more

Lock Escalation (락 에스컬레이션) in Oracle

Lock Escalation (락 에스컬레이션) in Oracle

1. Lock Escalation 개요 Lock Escalation(락 에스컬레이션) 은 데이터베이스에서 트랜잭션이 획득한 잠금(Lock)의 범위가 증가하여 더 큰 범위를 잠그는 과정을 의미합니다.즉, 많은 개별 행(row) 잠금을 유지하는 대신, 일정 임계치를 초과하면 테이블 단위 잠금(table-level lock)으로 변경하여 시스템 성능을 최적화합니다. 💡 Oracle에서는 자동 Lock Escalation이 발생하지 않으며, MS SQL Server나 DB2에서는 기본적으로 지원됨.즉, Oracle은 기본적으로 Row-level Lock을 유지하며, … Read more